微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 求助了,为什么9600波特率调试助手收到乱码

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

时间:10-02 整理:3721RD 点击:

程序如下:
#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的时候就不行了...好奇怪啊

波特率太高

硬件不支持吗,查下硬件情况.

蓝牙模块支持上万的波特率呢,9600是常用数值啊...

你的初值装错了,应该是TH1= 0xFD;TL1= 0xF9; 
而且最好使用11.0592MHZ的晶振(9600波特率的初值为TH1= 0xFD;TL1= 0xFA; ),用12MHZ的总是或多或少产生误码率的!

9600波特率用12M晶振误差是8.51%,误差太大了,串行波特率误差大于2.5%就不能用了,建议换11.0592MHZ的晶振

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top