#include<reg52.h>
sbit D1=P3^5;
void main()
{
TMOD=0x20;//設(shè)置定時(shí)器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;
}
看了一下你的程序,給你修改了一下。問(wèn)題原因主要在中斷程序中沒(méi)有把PC傳過(guò)來(lái)的數(shù)讀取,就關(guān)閉中斷程序了。
導(dǎo)致后面沒(méi)法判斷。
#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) //如果標(biāo)志位為1
{
ES=0; //關(guān)閉串行中斷位(這點(diǎn)重要)
if(a==0xff)
D1=0;
else
D1=1;
}
}
}
void risc() interrupt 4
{
if(RI==1) //如果接受標(biāo)志位為1,則說(shuō)明已經(jīng)接收到一幀數(shù)據(jù)
{
RI=0; //寫軟件把接受標(biāo)志位清零
SBUF=a; //讀SBUF中的數(shù)據(jù),放入a變量中
flag=1; //設(shè)置標(biāo)志位為1
}
}
| 歡迎光臨 (http://www.raoushi.com/bbs/) | Powered by Discuz! X3.1 |