关于IO中断去抖问题~

2019-03-24 10:11发布

小弟最近在玩msp430f149开发板,我用它搭了一个红外检测电路(买的现成的模块),检测液体滴定的速度~~~


之前看过郭天祥的视频,了解按键去抖可以使用延时函数,我测试了下,这里使用延时函数的效果不是很好

请问大神:我想实时检测IO口中断,使用的是上升沿中断,当红外检测电路检测到液体,会产生一个高电平。

如果不想在中断服务函数中使用延时函数,还有什么其它去抖的好办法吗(针对msp430单片机)?恳请赐教!!!

如下是我使用延时的中断服务程序


#pragma vector=PORT1_VECTOR

__interrupt void Port_1(void)

{

        

        P1IFG &= ~BIT0;  

        counter_val++;  

        Delay_us(1000);

}




此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
shower.xu
1楼-- · 2019-03-24 17:46
 精彩回答 2  元偷偷看……
zqjqq88
2楼-- · 2019-03-24 21:28
< :TI_MSP430_内容页_SA7 --> 1. 中断里面查询;
2. 状态机;
liuchang---
3楼-- · 2019-03-24 23:01
大神:能说的具体一点吗?最好附带几句重点的程序,感谢了~~~
1301120345
4楼-- · 2019-03-25 04:05
 精彩回答 2  元偷偷看……
qiushenghua
5楼-- · 2019-03-25 08:14
简单,继续使用延时去抖,但是不是这么处理。

  1. #pragma vector=PORT1_VECTOR
  2. __interrupt void Port_1(void)
  3. {
  4.     P1IFG &= ~BIT0;  
  5.     if(delay_counter_val==0)
  6.     {
  7.        counter_val++;  
  8.        delay_counter_val=1000;
  9.     }
  10. }

  11. 定时器中断()//s设定1μs的中断
  12. {
  13. if(delay_counter_val)delay_counter_val--;
  14. }

复制代码
同样是延时去抖,但是可以不在中断里延时,而是在定时器里延时。
bobde163
6楼-- · 2019-03-25 11:34
如果是使用中断进行判断则只能在中断程序里进行消抖操作,要不可在中断中置一个标志位,然后在主程序的大循环里使用case语句进行类延时判断,有点像多次采样来决定是否事件发生了的样子,希望能对楼主有帮助

一周热门 更多>

相关问题

    相关文章