|
写了一个程序,用定时器控制led灯,当led灯亮时,发送一次数据到串口,当led灯灭时,发送一次数据到串口,现在遇到的问题是,当led灯亮时,会发送多次数据到串口,当灯灭时,又会发送多次数据到串口,
求助:怎么才能保证led灯亮和灭时各只发送一次数据到串口,下面是程序,求大神帮忙看下,程序哪些地方有问题,请帮忙指出,万分感谢,
//程序目标:led0灯每秒钟亮灭一次,led0亮时x=0x01,并把x值发送到串口,led0灭时y=0x02,并把y值发送到串口
/*现在遇到的问题:程序启动后,led0亮时,会发送多次x值到串口(程序目标是led0亮时只发送一次x值到串口)
led0亮时,会发送多次x值到串口(程序目标是led0亮时只发送一次y值到串口)*/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit led0=P1^0; //LED灯
uchar x,y; //设置变量,当led0=0时,x=0x01,当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) //当led0=0时,把x值发送到串口
{
x=0x01;
ES=0;
SBUF=x;
while(!TI);
TI=0;
ES=1;
}
if(led0==1) //当led0=1时,把y值发送到串口
{
y=0x02;
ES=0;
SBUF=y;
while(!TI);
TI=0;
ES=1;
}
}
}
void timer0() interrupt 1 //计数器中断(每秒钟led0亮灭各一次)
{
TH0=0x4C;
TL0=0x00;
count++;
}
void timer5() interrupt 4 //串口中断
{
}
|
|