1

我正在研究 Arduinos,我想使用中断来使用旋转编码器。但我想将中断代码减少到最低限度。

我可以在单个中断上使用多个触发器吗?

我想替换我的实际代码:

attachInterrupt(0, ChangeA, CHANGE);

像这样的东西

attachInterrupt(0, FailingA, FAILING);
attachInterrupt(0, RisingA, RISING);

可能吗?

4

1 回答 1

1

不,不完全可能。外部中断被配置为仅对内部的一种可能性作出反应。

您可以做的一件事是使用CHANGE中断服务程序并在 ISR 开始时测试引脚的值来执行FallingA()RisingA()

这里有一个潜在的问题。该引脚可能在您测试之前再次更改,因此触发中断的中断可能已经下降,例如,您的测试确定它正在上升。防止两次快速中断的一种方法是检查标志是否仍然设置。如果在中断开始时它应该被清除,如果它被设置然后再次发生变化。没有实用的方法来防止三个快速变化。

如果您真的想使用两个独立的 ISR,您是否有额外的引脚可用?如果是这样,您可以将引脚连接在一起并在一个上运行FALLINGISR,在另一个上运行 ISR RISING

于 2014-11-12T20:36:54.400 回答