关于单片机和pc串口通信的一段程序,不知道错在哪,请高手指点

目的是通过键盘在PC上输入四个字符,然后通过串口和单片机再回到PC将这四个字符显示出来,C代码如下:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar a,b,c,d,e,flag=0;
void init()
{
TMOD=0x20;
TL1=0Xfd;
TH1=0Xfa;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}

void main()
{
init();
while(1)
{
if(flag==1)
{
b=a;
flag=0;
while(!flag);
c=a;
flag=0;
while(!flag);
d=a;
flag=0;
while(!flag);
e=a;
flag=0;
SBUF=b;
while(!TI);
TI=0;
SBUF=c;
while(!TI);
TI=0;
SBUF=d;
while(!TI);
TI=0;
SBUF=e;
while(!TI);
TI=0;
}
}
}
void aaa() interrupt 4
{
RI=0;
a=SBUF;
flag=1;
}
测试显示返回值为乱码,请高手指点

第1个回答  2013-05-31
波特率,数据位,停止位,校验是否正确。
第2个回答  2013-06-01
void init()
{
TMOD=0x20;
TL1=0Xfd;---FD
TH1=0Xfa;---FA ???
TR1=1;
……
第3个回答  2013-05-31
void aaa() interrupt 4
{
if(RI)
{
RI=0;
a=SBUF;
flag=1;
}
}追问

请问加if语句有什么作用?我运行结果还是乱码啊

追答

有这个条件语句,那么就可以只处理接收中断,因为进入中断有接收和发送,因此加这个较好,至于乱码的出现有两个可能:一是你设置显示模式可能不对,有十六进制和字符模式,你切换试试看;二是波特率不匹配造成的,你看看两者间的波特率是否相同。

本回答被提问者和网友采纳
相似回答