单片机外部中断

[复制链接]
5411|26
 楼主| xyp749192072 发表于 2010-8-1 15:22 | 显示全部楼层 |阅读模式
摁一次键,外部中断服务程序执行多次,原因是由于中断服务程序执行完后,按键还没有拉开,导致再一次进入中断。解决这种现象大家都有什么招数?
lyjian 发表于 2010-8-1 15:32 | 显示全部楼层
不要用外部中断做按键输入
laoliang3064 发表于 2010-8-1 16:40 | 显示全部楼层
加延时不就好了。

评分

参与人数 1威望 +1 收起 理由
xyp749192072 + 1

查看全部评分

欧阳青云 发表于 2010-8-1 17:27 | 显示全部楼层
你按下时,程序进入中断处理后关掉中断,然后在主函数里面加一句判断:松手时再开外部中断
cbs110 发表于 2010-8-1 17:33 | 显示全部楼层
外部中断弄成下降沿有效不就行了?
928315 发表于 2010-8-1 18:49 | 显示全部楼层
最好不要这样做,这样做按键消抖是个麻烦事情
 楼主| xyp749192072 发表于 2010-8-1 19:09 | 显示全部楼层
外部中断弄成下降沿有效不就行了?
cbs110 发表于 2010-8-1 17:33

不行,下降沿还是会被执行多次
 楼主| xyp749192072 发表于 2010-8-1 19:10 | 显示全部楼层
此贴已结,还是在中断里加个延时函数好点
lyjian 发表于 2010-8-1 20:53 | 显示全部楼层
在中断里延时最傻的做法,不仅解决不了你的问题,还把中断的优点了用成了缺点。
如果我一直按着这个键不放那你不就一直是死在那里了。
calor 发表于 2010-8-1 20:59 | 显示全部楼层
中断里加延时?
那段时间MCU就不能做其他的事情了,想个好点的办法吧,这样做肯定不是最佳的!
batsong 发表于 2010-8-1 21:01 | 显示全部楼层
硬件加个触发器,每个下降沿触发一个脉冲
chunyang 发表于 2010-8-1 21:10 | 显示全部楼层
好的程序结构应尽量不要在中断服务程序中运行过多代码,可以在去抖处理后设置一个标志同时关闭该中断即可,主程序根据标志调用相应的处理程序,执行完毕后清标志开中断,延时程序可加在键处理程序中,如果采用任务调度且恰好工艺准许时,延时甚至可以是不必要的。标志也可开多个,用以实现自锁、互锁等功能,比如某键只能在某种条件下响应一次或在某种前提下才能响应等等。
xwj 发表于 2010-8-1 21:14 | 显示全部楼层
唉~~~~~~~
飞鹰嵌入式 发表于 2010-8-1 22:01 | 显示全部楼层
设置成上升沿出发应该会好一些的
yytdragon 发表于 2010-8-2 08:16 | 显示全部楼层
中断里加延时……
是不是只有在学校的教科书里才会出现的程序?
xiaoyu9632 发表于 2010-8-2 11:45 | 显示全部楼层
采用这种方式的话进中断后屏蔽掉中断是必须的做法。无论是边沿触发还是电平触发都要做按键的消抖处理。同时需要分辨按键的按下和按住状态。当然也还有诸如长按,或者长按释放等,这些处理方式是不同的。
xiaoyu9632 发表于 2010-8-2 11:46 | 显示全部楼层
另外,中断里加延时那是学校老师才会做的事情。
流行音乐 发表于 2010-8-2 11:53 | 显示全部楼层
每隔2ms~4ms扫描一下按键状态即可,不要用外部中断,最多用定时器中断(如果程序设计的合适,也可以不用)。
HWM 发表于 2010-8-2 11:54 | 显示全部楼层
to 17L:

你这逻辑有根据吗?若无,最好别妄加断言,否则你的“作业”估计也好不到那里去,因为很可能言出无据。
pineapple2009 发表于 2010-8-2 12:48 | 显示全部楼层
LS肯定是个好老师啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:年轻,正是积攒实力的时候!

1

主题

77

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部