|
寫了一個程序,用定時器控制led燈,當(dāng)led燈亮?xí)r,發(fā)送一次數(shù)據(jù)到串口,當(dāng)led燈滅時,發(fā)送一次數(shù)據(jù)到串口,現(xiàn)在遇到的問題是,當(dāng)led燈亮?xí)r,會發(fā)送多次數(shù)據(jù)到串口,當(dāng)燈滅時,又會發(fā)送多次數(shù)據(jù)到串口,
求助:怎么才能保證led燈亮和滅時各只發(fā)送一次數(shù)據(jù)到串口,下面是程序,求大神幫忙看下,程序哪些地方有問題,請幫忙指出,萬分感謝,
//程序目標(biāo):led0燈每秒鐘亮滅一次,led0亮?xí)rx=0x01,并把x值發(fā)送到串口,led0滅時y=0x02,并把y值發(fā)送到串口
/*現(xiàn)在遇到的問題:程序啟動后,led0亮?xí)r,會發(fā)送多次x值到串口(程序目標(biāo)是led0亮?xí)r只發(fā)送一次x值到串口)led0亮?xí)r,會發(fā)送多次x值到串口(程序目標(biāo)是led0亮?xí)r只發(fā)送一次y值到串口)*/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led0=P1^0; //LED燈
uchar x,y; //設(shè)置變量,當(dāng)led0=0時,x=0x01,當(dāng)led0=1時,y=0x02,
uint count;
void delay(uint xms) //延時
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void init() //定時器及串口初始化程序
{
TMOD=0x21;
TH1=0XFD;
TL1=0XFD;
TH0=0x4C;
TL0=0x00;
SM0=0;
SM1=1;
REN=1;
EA=1;
ET0=1;
TR0=1;
TR1=1;
ES=1;
}
void main()
{
init();
while(1)
{
if(count==10)
{
count=0;
led0=~led0;
}
if(led0==0) //當(dāng)led0=0時,把x值發(fā)送到串口
{
x=0x01;
ES=0;
SBUF=x;
while(!TI);
TI=0;
ES=1;
}
if(led0==1) //當(dāng)led0=1時,把y值發(fā)送到串口
{
y=0x02;
ES=0;
SBUF=y;
while(!TI);
TI=0;
ES=1;
}
}
}
void timer0() interrupt 1 //計數(shù)器中斷(每秒鐘led0亮滅各一次)
{
TH0=0x4C;
TL0=0x00;
count++;
}
void timer5() interrupt 4 //串口中斷
{
}
|
|