求助了,为什么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的晶振