论坛风格切换切换到宽版
  • 3483阅读
  • 6回复

帮忙 波特率设置的问题 [复制链接]

上一主题 下一主题
离线bg2gc
 
发帖
971
只看楼主 倒序阅读 0楼 发表于: 2008-12-10
我用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;         //开总中断、串口中断

请朋友们指点
我附上计算波特率的软件
附件: wsmcu51btl.rar (0 K) 下载次数:85
离线bg2gc
发帖
971
只看该作者 1楼 发表于: 2008-12-10
我没有试其他的单片机,不知是程序的问题,还是单片机的问题 :confused:
离线汤圆
发帖
1157
只看该作者 2楼 发表于: 2008-12-10
产生的波特率=((2^smod)/32) *(fsoc/ 12*(256-x))

smod是pcon的bit7 控制频率加倍的
离线汤圆
发帖
1157
只看该作者 3楼 发表于: 2008-12-10
tmod 高四位t1 第四位t0   tmod=0x21 表示 t1 自装入 t0方式1   此时t1不产生中断 仅仅给串口提供波特率
离线汤圆
发帖
1157
只看该作者 4楼 发表于: 2008-12-10
再确认一下stc 工作的频率 可以采用1/6t 也可以1/12t
离线bg2gc
发帖
971
只看该作者 5楼 发表于: 2008-12-10
谢谢老朋友

朋友给做的程序,在lcd上直接显示nmea语句,不好意思再去麻烦人家了
初学,程序没有看透
在仔细研究研究

再问如何设置pcon,才使smod=1
离线汤圆
发帖
1157
只看该作者 6楼 发表于: 2008-12-10
pcon 寄存器不支持位寻址 直接设置寄存器pcon=0x80; 就变成了波特率加倍模式