#include<reg52.h>
sbit D1=P3^5;
void main()
{
TMOD=0x20;//设置定时器1为工作方式2
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
//EA=1;
//ES=1;
while(1)
{
if(RI==1)
{
RI=0;
}
if(SBUF==0xFF)
D1=0;
else
D1=1;
}
}
void ser() interrupt 4
{
RI=0;
}
看了一下你的程序,给你修改了一下。问题原因主要在中断程序中没有把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
}
}
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |