我用stc89c55rd+ lcd602做了一个nmea0183数字信号,要求波特率38400,晶振22.1184,th1=0xfd,tmod = 0x21,可写进芯片后,测试38400波特率的信号竟然显示乱码,
我又晶振22.1184,th1=0xe8,tmod = 0x21,可写进芯片后,测试4800波特率的信号竟然显示乱码,晕,试着测试2400波特率的信号竟然显示正常,又试着按22.1184,th1=0xe8,tmod = 0x20写进芯片,2400波特率的信号也竟然显示正常,我真的不明白,为什么tmod = 0x21和tmod = 0x20设置的波特率一样,为什么????
下面是部分程序
void sys_init()
{
scon = 0x50; /* scon: mode 1, 8-bit uart, enable rcvr */
tmod = 0x21; /* tmod: timer 1, mode 2, 8-bit reload */
th1=0xfd;
/* th1: reload value for 38400 baud @ 22.1184mhz */
tr1 = 1; /* tr1: timer 1 run */
lcminit(); //初始化lcd
displaylistchar(0,0,"nmea monitor v1.0");
delay400ms();
lcd_cls();
ie=0x90; //开总中断、串口中断
请朋友们指点
我附上计算波特率的软件