检查信号的持续性(51单片机)

问题遇到的现象和发生背景

检查信号持续性
检测P2^1上面信号 2s时间内一直为1(中断50ms,20次100ms,再20次2s),则led亮,中途有0则led 不亮

img

问题相关代码,请勿粘贴截图
#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;}