51单片机,用按键实现外部中断,软件如何去抖?

51单片机,用按键实现外部中断,软件如何去抖?,第1张

外部中断的一般都是采用延时程序,而且延时程序一般是利用定时器做10~15ms的延时去抖,来实现的,而且时间不是特别精确,单片机书上和有关资料上应该都有我写一个参考一下:

void DelayMS(unsigned char a)

{int i

for(a>0a--)

for(i=110i>梁模0i--)

}延时约为a毫秒,不过不够准确,可以通过keil软件或者汇编来确立更精确的延时时孝渣卖间!

在中断执行前先做判断:用if语句看看引脚的电平,如果没有跳变,那么再延时判断,如果还没有跳变那么再延时,如此重复;

等到电平跳变了,延时看看是不是电平收其他非 *** 作性因素引起的,比如说电源抖动,延时之后再判断如果的确是跳变了,可巧逗以进行中断后的 *** 作了!

1、防抖不想使用延时程序,就使用单片机内部的计时器,做内部中断;

2、按键可以采用单片机的外乱游尺部中断,如果按键个数比较多的话就需要外扩硬哗高件;

3、更磨档复杂的系统可以考虑主芯片的换型。

使用外部中断的话,一定要做好硬件的消抖。比如减小上拉电阻。加接消抖电容器。还有就是电路中增加施密特触发器。这些都是必须的。否则,频繁的触发中断会对主程序造成影响。

intt0:lcall dely

mov a,p1

jnb p1.0,xia

sjmp shang

上面的程序无非就是进入中断后先延时下,然后再次检测端口状态。p10为0 转到xia p10为1 向下执行

呼呼 好久没有用汇编了 差点都忘了

还有一种方法就是进入中断后,设置一个标志位 然后接着就退出来。这样就不用核族掘使用延时了。然后,主程序中按键检测的子程序要安排一下。巧妙利用其他的子程序当作延时子程序。这样,当执行完其他程序的时候,按键的抖动也就过去了。然后下一个就是执行按键的处理。根据标志位的变化再次对按键进行检测。并且执行完按键检测子程序后复位标志位。比如 正常情况下,改核标志位=0 此时,就算执行到按键的子程序也不会检测按键的状态。当标志位=1 的时候,执行到按键检测子程序后就开始检穗绝测外部端口的状态。根据状态进行 *** 作。同时,将标志位复位。以便下次检测。嘿嘿嘿 说实话,这个注意是我一边回答你问题一边想出来的。这个方法好是好,就是对编程者的能力有点要求。看你的能力也编写不出来。那你还是使用上面的那个简单延时的吧。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12493557.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存