单片机编程:开关输入采用中断的方式还是轮询好?

开关输入采用中断的方式还是轮询好?这个问题或许已经讨论了很多年了吧,正因为如此,答案就很明了了,既然被争论,说明两种方式各有各的优点和不足。下面分开谈谈我的一些看法。

1、对于中断。采用中断的方式的好处是响应及时,不会错过每个中断信息,但是正因为中断如此的敏感,导致了其的不足,我们知道,一般的开关都是有抖动的,按一次开关,其实会抖动很多次,这样就会造成中断很多次,而其实你所预想本应该只有一次,如果你此时的中断过多的处理一些东西,很容易造成混乱。如果你一定要用中断的方式来检测开关,那么中断函数最好知识对一些标志进行处理,这样的话,多次中断也是同样的效果,不易造成混乱。

2、对于轮询。轮询的好处是自带滤波效果(有点厉害),因为多久轮询一次由你来决定,加之我们可以用连续两次检测到按键按下的信号(中间加点延时)才认为按键事件产生,有效的避免了抖动造成的一次按键事件造成多次响应的事情发生。当然这种不敏感的特性也有其弊端,因为轮询的时间点是确定的,而按键事件的发生是不确定的,这样就有可能造成单片机错过按键事件(按键发生时,单片机正在干别的事),所以应该在足够短的时间片(比如每xms检测一次)给予按键检测,如果按键事件是频繁发生的还好,否则的话,如此小的时间片给按键事件有点小小的浪费。

所以,还是凡事得看应用场合。。。

你可能感兴趣的:(开发软件应用技巧)