作者DamonF1 (..........)
看板ASM
标题Re: [问题] 8051 外部中断 用C语言
时间Wed Apr 23 21:15:49 2008
※ 引述《dream3325 (忧郁蓝调)》之铭言:
: 最近刚接触8051
: 想请问依下
: 外部中断要如何用C语言写(INT0)
: 还有要如何消弹跳(像按个一秒钟 程式就判断我按了9下 类似的问题)?
: 拜托了><"
消除弹跳可以用硬体和软体
软体程式复杂但硬体简单
弹跳现象有两个发生点
1.按下时
2.放开时
弹跳波形时间大约 10ms~40ms左右
要闪开弹跳现象则要看使用者如何设定sw跟执行动作
装况有很多种:
1.按下sw後,马上执行动作,很快就放开,继续判断下一次sw
2.按下sw後,不动作,等sw off时才执行动作,所以按下时间可以很久或很短
3.......
现在假设 SW OFF时 信号脚位为 HI
SW ON 时 信号脚位为 LOW
现在情况是根据原po要求按下sw ( P1.0 ) 後进入中断副程式执行想要的动作,
但是一秒後才放开,以下是简单的防弹跳程式区段
C语言少写,用组语代替
INT0_INT:
CLR EX0
CALL DELAY_30ms ;跳过sw on之弹跳(如果 动作程式有达 30 ms,可不用此行)
.
.
. 动作程式
.
.
JNB P1.0,$ ;等待按键放开
CALL DELAY_30ms ;跳过sw off之弹跳
SETB EX0
RETI
以上只是其中一种,因为要考虑的因素很多
要看你的动作要求为何,连动作程式执行时间也可以考虑当做跳过弹跳时间
就试试看吧,还有外部中断使用 负缘触发 比较好,不然准位触发会更难防止弹跳
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.23.154.94
1F:→ icetofux:按1秒钟9跳下,感觉他好像用到低准位触发了@.@? 04/23 22:36
2F:推 dexders:可以判断重复几次动作 然後再决定是不是正确的动作 04/23 22:42
3F:推 stool100:C少写的这个想法 个人不以为然 04/23 23:02
4F:推 stool100:建议也可以用软体积分方法.有中断时累加.超过某值动作 04/23 23:43
5F:→ final01:他是说ISR最好用ASM写吧 04/24 15:06
6F:推 stool100:ISR中建议不要DELAY 04/24 15:37
7F:→ DamonF1:感谢大家的意见,看看怎样可以改善的最好, 04/24 23:46