外部中断的一个现象?

2019-07-20 20:44发布

当外部中断服务函数里只写一句翻转io的代码的时候,实验现象是有时能翻转有时不能翻转,但当我加一句延时1us后,就每次都能翻转了,为什么会这样?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
27条回答
正点原子
1楼-- · 2019-07-21 01:00
1,在中断里面,一定要清除中断标志。
2,按键必须加延时,去抖动,否则很容易受干扰导致结果错误。
white_fox
2楼-- · 2019-07-21 05:20
 精彩回答 2  元偷偷看……
dfbb123
3楼-- · 2019-07-21 08:19
white_fox 发表于 2016-8-8 17:54
中断速度过快导致不响应?你试试在中断中先关了中断  翻转完IO后再开中断试试

不行,现象依旧;
dfbb123
4楼-- · 2019-07-21 11:47
也不是抖动造成,因为我用另一块单片机的io当触发信号也是这个现象,所以排除是外部因素,另外我用n多的代码(长度已经大于1us了)代替delay_us(1)也不行。只能用延时函数,哪怕延时1us就有效。大家不信可以试试。
特朗姆斯
5楼-- · 2019-07-21 12:21
无法接受在中断服务程序里加延时的做法,即使只有1us,中断服务程序就应当是尽可能简洁简单而高效。如果要延时的话那就设一个标志(flag)在主程序里对该标志进行判断后做I/O翻转的处理。

另外,问一句,楼主你在外部中断服务程序里只写了一句翻转I/O,那么你翻转I/O之前有没有判断外部中断的状态寄存器?判断完状态寄存器之后有没有清除对应的中断标志位?
1206447373
6楼-- · 2019-07-21 16:43
学习、没遇到过这个问题、我每次外部中断翻转都没出现过这样子的问题!! 加一个机械延时试一试?asm("nop");

一周热门 更多>