#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://m.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |