我正在研究 Arduinos,我想使用中断来使用旋转编码器。但我想将中断代码减少到最低限度。
我可以在单个中断上使用多个触发器吗?
我想替换我的实际代码:
attachInterrupt(0, ChangeA, CHANGE);
像这样的东西
attachInterrupt(0, FailingA, FAILING);
attachInterrupt(0, RisingA, RISING);
可能吗?
不,不完全可能。外部中断被配置为仅对内部的一种可能性作出反应。
您可以做的一件事是使用CHANGE
中断服务程序并在 ISR 开始时测试引脚的值来执行FallingA()
或RisingA()
。
这里有一个潜在的问题。该引脚可能在您测试之前再次更改,因此触发中断的中断可能已经下降,例如,您的测试确定它正在上升。防止两次快速中断的一种方法是检查标志是否仍然设置。如果在中断开始时它应该被清除,如果它被设置然后再次发生变化。没有实用的方法来防止三个快速变化。
如果您真的想使用两个独立的 ISR,您是否有额外的引脚可用?如果是这样,您可以将引脚连接在一起并在一个上运行FALLING
ISR,在另一个上运行 ISR RISING
。