Keil C 中的关于中断程序退出状态问题
发布网友
发布时间:2023-09-15 01:18
我来回答
共1个回答
热心网友
时间:2024-10-06 08:28
你的困惑根源在于对按键按下/抬起瞬间的状态认识不足。
事实上,在按键按下/抬起瞬间,按键端口上会有一个持续抖动的电平(类似于不规则锯齿波,你可以上网查找一下),因此在一段时间之内P2.6上采集的电平将是不断变化的0-1-0序列。你所增加的for(;;)只判断一种电平,所以也并不能起到去抖的作用。
一般较通用的按键处理流程是:当INT0#检测到跳变沿中断时,置一个标志,关闭EX0中断使能;主循环中凭借此标志延时20~100ms去抖(说白了就是避过按键电平不稳定的这段时间),然后重新采集P2.6状态,仍旧是低电平才判定为有效按键变化。
对于连接线较长或者易受干扰的场合,按键处理应增加至少一阶的数字滤波。