求助了,为什么9600波特率调试助手收到乱码

2019-07-16 02:17发布

本帖最后由 tim4146 于 2013-3-5 18:27 编辑

程序如下:
#include <AT89X51.h>
#define uchar unsigned  char
#define uint unsigned int
uchar  idata trdata[]={'B','E','S','T',0x0d,0x0a,0x00};
uchar  idata trdata1[]={'Y','Z','2','0','0',0x0d,0x0a,0x00};


/******************************************/
/*              主程序                    */
/******************************************/
main()
{
uchar i;
  uint j;
SCON= 0x40;                //串口方式1
PCON=0;                     //SMOD=0
REN=1;                     //允许接收
TMOD= 0x20;                //定时器1定时方式2
TH1= 0xFD;                //12MHz 9600波特率  
TL1= 0xFD;
TR1= 1;                  //启动定时器
  while(1)
  {
    i=0;
    while(trdata!=0x00)        //发送字符串BEST
        {
                SBUF=trdata;
              while(TI==0);
              TI=0;
              i++;
    }
    for (j=0;j<50000;j++); //延时
        i=0;
        while(trdata1!=0x00)         //发送YZ200
        {
                  SBUF=trdata1;
              while(TI==0);
              TI=0;
              i++;
    }
        for (j=0;j<50000;j++); //延时
  }
}

===================================================================

其实源程序是初值E6,1200波特率,我就改了一下,一直收不到正确的字符串了。求教了....

测试发现,波特率2400,1200(对应各自初值)的时候都能正常收到单片机发来的字符,4800的时候就不行了...好奇怪啊
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
lysylb
1楼-- · 2019-07-16 07:12
波特率太高
xinqiudianzi
2楼-- · 2019-07-16 08:12
硬件不支持吗,查下硬件情况.
tim4146
3楼-- · 2019-07-16 13:37
xinqiudianzi 发表于 2013-3-10 12:36
硬件不支持吗,查下硬件情况.

蓝牙模块支持上万的波特率呢,9600是常用数值啊...
孙yx
4楼-- · 2019-07-16 14:50
你的初值装错了,应该是TH1= 0xFD;TL1= 0xF9; 
而且最好使用11.0592MHZ的晶振(9600波特率的初值为TH1= 0xFD;TL1= 0xFA; ),用12MHZ的总是或多或少产生误码率的!
1378107154
5楼-- · 2019-07-16 16:10
9600波特率用12M晶振误差是8.51%,误差太大了,串行波特率误差大于2.5%就不能用了,建议换11.0592MHZ的晶振

一周热门 更多>