看了一下你的程序,给你修改了一下。问题原因主要在中断程序中没有把PC传过来的数读取,就关闭中断程序了。
导致后面没法判断。
#include<reg52.h>
#define uchar unsigned char
unsigned char a,flag;
sbit D1=P3^5;
void main() { TMOD=0x20; TH1=0xfd; TL1=0xfd; TR1=1; SM0=0; SM1=1; REN=1; ES=1; //开串口中断 EA=1;
while(1) { if(flag==1) //如果标志位为1 { ES=0; //关闭串行中断位(这点重要) if(a==0xff)
D1=0;
else
D1=1;
} } } void risc() interrupt 4 { if(RI==1) //如果接受标志位为1,则说明已经接收到一帧数据 { RI=0; //写软件把接受标志位清零 SBUF=a; //读SBUF中的数据,放入a变量中 flag=1; //设置标志位为1 } }
|