外部中断(External Interrupt)是指使用引脚来触发的一种中断方式。当引脚的电平由低变高或由高变低时,就会触发中断。常见的引脚包括按键、传感器、通信模块等。这种中断方式可以让CPU在无需不停地轮询状态的情况下,等待某个事件发生。
当按键按下或释放时,由于机械结构的原因,接触点会反复弹跳数次,形成接通或断开的信号震荡,这种现象就叫做抖动(Bouncing)。抖动时间短暂,通常只有几微秒,但足以让CPU在短时间内接收到多次中断信号,从而引发程序错误。
图1 显示的是按键弹跳的示意图,蓝色线为按键输出的电平,叠在一起的绿线表示经过抖动后的电平。可以看到,在按键按下和释放的瞬间,电平发生了多次变化,需要延时一段时间才能稳定下来。
由于抖动会导致信号不稳定,触发多次中断,因此必须采取一定的措施来消除抖动。最常见的方法是采用延时消抖(Debouncing with delay)技术。即在中断触发后,等待一段时间让信号稳定下来,再执行相应的中断服务程序。
延时时间需要根据具体的硬件条件来决定,一般在10~100毫秒之间。如果延时时间过短,可能无法完全消除抖动;如果时间过长,可能会导致对实时性要求很高的应用失效。
实现延时消抖的方法多种多样,这里介绍其中两种常用的方法。
第一种方法是采用软件延时,即在中断服务程序中添加延时函数。延时函数会占用CPU的时间片,因此需要考虑延时时间不能过长,否则会导致其它程序无法及时响应。此外,软件延时方式容易受到编译器等因素的影响,需要经过不断测试和调整才能达到最佳效果。
第二种方法是采用硬件延时,即利用定时器模块来实现延时。由于定时器功能通常是硬件支持的,因此具有较高的精度和稳定性。此外,利用定时器延时也可以避免占用CPU时间片的问题,从而提高系统的实时性。