求助了,为什么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的时候就不行了...好奇怪啊
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。