程序在编写到实际应用中,可能存在抖动或者干扰而导致信号的误触发。在某些场合需要用到延时判断功能,为了防止误判漏判特写此文章以便后期借鉴参考。
例如:A信号置位的情况下B信号在1分钟后置1,在A信号复位的情况下信号B置位后再5秒钟内置0。典型代码如下:
UINT16 Signal_a;//A信号
UINT16 Signal_b;//B信号
UINT16 TimeCount;//信号计数
Timer(UINT16 u16_us)
{
INT16 i;
for(i =0;i<u16_us;i++)
{
asm(" RPT #149 || NOP");
}
TimeCount++;
}
for(;;)
{
if((Signal_a=1)&&(Signal_b=0))
{
if(TimeCount>=60)
{
Signal_b=1;
TimeCount=0;
}else
{
TimeCount=0;
}
}
else if((Signal_a=0)&&(Signal_b=1))
{
if(TimeCount>=5)
{
Signal_b=0;
TimeCount=0;
}
}else
{
TimeCount=0;
}
Timer(1000);
}通过以上程序代码可以有效避免抖动或者一次误判造成的信号置位或者复位,换句话说也就是在信号置位或者复位过程中,如果延时计数出现了一次错误,将重新开始计数,直到连续出现了达到设定状态的次数后才能置位或者复位信号。
延时之经典判断
最新推荐文章于 2024-06-12 10:00:23 发布