检查信号持续性
检测P2^1上面信号 2s时间内一直为1(中断50ms,20次100ms,再20次2s),则led亮,中途有0则led 不亮
#include <reg52.h>
sbit alarm=P2^1;
sbit led=P2^2;
unsigned char alarm_num=0;
main()
{
while(1)
{
if(alarm_num>=20)
{led=1;}
else {led=0;}
}
}
void init_time0(void)
{
TMOD|=0X01;
EA=1;
ET0=1;
TR0=1;
}
void timer0(void) interrupt 1
{
static unsigned int num;
TH0=(65536-2000)/256;
TL0=(65536-2000)%256;
num++;
if(num==50)
{
if(alarm==1)
{alarm_num++;}
else
{alarm_num=0;}
}
}
结果LED 一直不亮
中断写的,不知道问题出在哪里??
alarm_num初始值是0,main函数里执行while无限循环中,一直在执行else下的内容:LED不亮
持续检查太占处理器资源,而且还不一定绝对能保证不会漏检,可以在开始检查后,启动下降沿中断,检查结束后关闭下降沿中断。这样单片机不需要一直守着看IO状态。
static unsigned int num;把和这个弄到全局变量里就行了,就这个事。
if(num==50)变一下,if(num/50)
while(1)
{
if(alarm_num>=20)
{led=1;}
else {led=0;}
变一下
while(1)
{
if(alarm_num>=20)
{led=1;
num = 0;}
else {led=0;}