本帖最后由 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的时候就不行了...好奇怪啊
而且最好使用11.0592MHZ的晶振(9600波特率的初值为TH1= 0xFD;TL1= 0xFA; ),用12MHZ的总是或多或少产生误码率的!
一周热门 更多>