|
Все так и будет, если ты не перепишешь TH1 или TH0. Но нужна ли тебе такая низкая скорость? Я делаю примерно так:
//----------------------------------------------------
// задали желаемую скорость
#define SMB_FREQUENCY 100000 // Target SCL clock rate
#define BAUDRATE 9600 // Baud rate of UART in bps
// для SMBus
void Timer1_reInit (void)
{
TR1 = 0; // Timer1 disabled
CKCON &= ~0x13; // Timer1 clock source = SYSCLK / 12
TMOD = 0x20; // Timer1 in 8-bit auto-reload mode
TH1 = -(SYSCLK/SMB_FREQUENCY/12/3); // Timer1 configured to overflow at 1/3
// the rate defined by SMB_FREQUENCY
TL1 = TH1; // Init Timer1
TR1 = 1; // Timer1 enabled
}
// для UART
void UART_Init (void)
{
TR1 = 0; // STOP Timer1
TMOD = 0;
SCON0 = 0x10; // SCON0: 8-bit variable bit rate
// level of STOP bit is ignored
// RX enabled
// ninth bits are zeros
// clear RI0 and TI0 bits
if (SYSCLK/BAUDRATE/2/256 < 1) {
TH1 = -(SYSCLK/BAUDRATE/2);
CKCON |= 0x10; // T1M = 1; SCA1:0 = xx
} else if (SYSCLK/BAUDRATE/2/256 < 4) {
TH1 = -(SYSCLK/BAUDRATE/2/4);
CKCON |= 0x01; // T1M = 0; SCA1:0 = 01
CKCON &= ~0x12;
} else if (SYSCLK/BAUDRATE/2/256 < 12) {
TH1 = -(SYSCLK/BAUDRATE/2/12);
CKCON &= ~0x13; // T1M = 0; SCA1:0 = 00
} else {
TH1 = -(SYSCLK/BAUDRATE/2/48);
CKCON |= 0x02; // T1M = 0; SCA1:0 = 10
CKCON &= ~0x11;
}
TL1 = 0xff; // set Timer1 to overflow immediately
TMOD |= 0x20; // TMOD: timer 1 in 8-bit autoreload
TMOD &= ~0xD0; // mode
TR1 = 1; // START Timer1
TI0 = 1; // Indicate TX0 ready
}
// ну и вперед.
// Это если один и тот же таймер используется и под UART, и под SMBus поочередно в случае, когда все остальные таймеры заняты
//-------------------------------------------------------------
Мождно использовать и оба таймера одновременно,но есть тонкость. Если исползуешь свои процедуры put (puts) и, соответственно, get (gets), пользуй любые таймеры для SMBus и для UART. А вот ежели пользуешь стандартные процедуры от дядюшки Кейла, то нужно, - либо править стандартную реализацию (а надо ли ?), либо UART-у оставить T1, а под SMBus пользовать T0.
Вот такая петруха :).
E-mail: info@telesys.ru