单片机与PC机相联的串口通信

2019-08-05 19:52发布

我写了一段单片机与PC机相联的串口通信协议,先PC机向单片机发一个数据,然后单片机再把这个数据发给PC机,一开始我是这样写的:
#include <reg52.h>
unsigned char a,flag;
void main()
{
SM0=0;
SM1=1;
REN=1;
TMOD=0X20;  //8位自动重装
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=1;
ES=1;
flag=0;
while(1)
{
   if(flag==1)
   {
    ES=0;
    flag=0;
    SBUF=a;
     if(TI==1)
    {
     TI=0;
     ES=1;
     }
   
   }
}
}

void serial()interrupt 4
{
RI=0;
P1=SBUF;
a=SBUF;
flag=1;
}

这个程序的结果PC机只能发一次,也只能收到一次,再发就收不到了,然后我改了一下程序:
#include <reg52.h>
unsigned char a,flag;
void main()
{
SM0=0;
SM1=1;
REN=1;
TMOD=0X20;  //8位自动重装
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=1;
ES=1;
flag=0;
while(1)
{
   if(flag==1)
   {
    ES=0;
    flag=0;
    SBUF=a;
    while(!TI);
     TI=0;
     ES=1;
   
   }
}
}

void serial()interrupt 4
{
RI=0;
P1=SBUF;
a=SBUF;
flag=1;
}


这个程序的结果是PC机与单片机收发正常。两个程序唯一的不同就是在字体比较大的那个地方不同,可是第一个程序好像也没错呀,可为什么只能收发一次呢??
请各位大侠支招,
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。