51单片机中断按键,抖动导致二次触发

用51的外部中断0 采集按键是否被按下,我采取的方式是在中断中做了一个循环,使灯闪烁一秒 然后退出中断,进入中断的时候,我先把EA关掉了,但是有时候按下按键,应该闪烁一秒,却闪烁两秒 也就是说 在中断程序执行的过程中,这个中断程序还有一次请求在等待,第一次中断结束后,直接又进入了一次中断,这是为什么?

第1个回答  2016-04-27
因为 当下降沿触发中断的时候 ie寄存器置1 进去中断服务程序后,硬件自动清除ie 这时还在按键的抖动区,又会有一个下降沿,ie又等于1,等执行完中断服务程序,因为ie等于1所以会再执行一次中断服务程序
第2个回答  2015-01-06
直接去抖就好了。
改为查询方式,100ms查询一次,连续3次都采集到被按下,认为是有效按下,否则扔掉。追问

软件延时去抖动我早就实现了,现在是用中断来做 反而产生了两次

追答

中断类型,有上升沿,有下降沿,也有上升沿和下降沿中断。也有电平中断。
中断了两次,说明符合中断条件两次,无非就是两部分,触发中断的条件,中断自身的设置。

本回答被网友采纳