程序在下面。利用上位机发送数据给51,然后51把数据返回给上位机。但现在有一个问题,就是当上位机没有发数据给51的时候,为什么一直进入中断服务程序呢?上位机一打开,就会持续的接收数据,只有把if(flag==1)中加入ES=0,ES=1,while(TI==0).程序才可以正常运行。
疑问:为什么串口中断服务程序会一直响应?
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
void delay(int z);
char a,flag;
void main()
{
EA=1;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
ET1=0;
TR1=1;
ES=1;
REN=1;
SM0=0;
SM1=1;
while(1)
{
if(flag==1)
{
ES=0;
flag=0;
SBUF=a;
while(TI==0);
TI=0;
ES=1;
}
}
}
void ser_interrupt()interrupt 4
{
RI=0;
P1=SBUF; //P1口接的发光二极管,以此查看接收到的数据
a=SBUF;
flag=1;
}