我用串口调试助手发00 01 02 03,但接收到的是A0 B0 A4 C0等一些乱码,请教各位大侠!!
我的程序是C写的,用keil编译
#include <at89x51.h>
#define uint unsigned int
#define uchar unsigned char
uint i=0;
uchar data astring[10];
void main()
{
TMOD=0x20; //初始化串口
TL1=0xfd;
TH1=0xfd;
SCON=0xd8;
PCON=0x80 ;
TR1=1;
for(i=0;i <10;i++) //接收数据
{
while(RI==0);
RI=0;
astring[i]=SBUF;
}
for(i=0;i <10;i++) //发送数据
{
SBUF=astring[i];
while(TI==0);
TI=0;
}
TR1=0;
}
------解决方案--------------------
根据晶振频率计算你的波特率。
单片机的Rx和Tx不要直接连RS232.........估计你不会犯这样的错误。
可以一步一步找出原因:
单片机复位后先让它发送一个字母,比如“A”,以便测试你的发送是否正确,注意不要采用断电/上电的方式使单片机复位,这样的话PC会首先收到一个乱码;只要用一把镊子连一下复位端脚就可以了。
发送正确了,才可以继续测试你的接收。
你的问题是调试方法问题,过几年就有经验了,都是这么走过来的,多努力啊。
------解决方案--------------------
看你的设置:
1、你选择了串行工作方式3,它是11位的,1起始位、9数据位、1停止位,你串口助手设置得对吗
2、波特率对吗,用的晶振是多少,算错没有?
3、接线对吗,这看似简单,呵呵
4、用中断,把书看看
希望对你有所帮助