huibin.chen 当前离线
注册会员
订阅 TOP
strongchen 当前离线
版主
论坛元老
TOP
fish1330 当前离线
中级会员
1.中断服务程序提供信号标志,但是不要进行其他操作;2.main函数查询中断服务提供的信号标志,进行处理相关的操作;3.消抖太简单了,可以采取延迟、计时、计次等操作进行处理。
根据我提供的方法,可以轻松解决上诉问题。
[此贴子已经被作者于2009-5-25 10:23:42编辑过]
[此贴子已经被作者于2009-5-25 10:29:47编辑过]
我特意做了个计时,main主循环里面的计时误差极小,1小时的误差在10秒内。
中断部分,除了提供10MS、100MS基准时钟外,还进行脉冲信号采集、计数,防抖处理均在主循环调用的函数中进行。
你主循环太慢,是你的中断系统使用不当引起的问题,或者算法问题。
浮点数运算有吗?
zhangyifei68 当前离线
个人认为多路采集脉冲等信号,使用KBI等外部中断没有意义,直接用定时器中断进行多次检测去抖比较合适,至于是在中断中就直接处理还是在主循环中处理无所谓(我所指的处理只限于去抖过程,至于去抖后的事件处理一定要在主循环中执行,这是必须的),比如检测一个20ms的脉冲,可以定时1ms的定时器中断,连续检测20次以上脉冲电平就置该标志,然后在主循环中查询标志进行处理即可,或者像楼上的说的一样,直接在中断中置1ms标志然后在主循环中查询标志再去抖也行(至于这两种方法那种实时性更好,大家可以讨论一下,就我个人而言,我认为前者好点或者说差不多,因为最后要做到的效果是不管哪种方法都要一次不能错过的检测到信号,所以我选择了前者,而两种的处理实时性我感觉应该是一致的,所以个人认为两者皆可),但楼主的做法是绝对不行的,中断中坚决不能有延时,就算支持多重嵌套,估计也能把你给套牢了哈哈!