📅  最后修改于: 2020-12-27 09:56:00             🧑  作者: Mango
Arduino中的中断()允许某些基本任务在后台执行,并且默认情况下启用这些任务。
禁用interrupts()可能会干扰Arduino功能,并可能影响通信。这意味着如果禁用interrupts(),则Arduino中的某些功能将无法使用。
中断有时会干扰代码时序。为了防止此类干扰,可以在代码的关键部分禁用中断。
语法为:
interrupts()
让我们看一个例子。
考虑下面的代码:
void setup()
{
}
void loop()
{
interrupts();
// code is written here
nointerrupts();
// it includes sensitive code
// critical section of code
}
下面列出了interrupts()的功能:
外部中断如下:
设置中断的第一个函数是: attachInterrupt()
我们需要使用digitalPinToInterrupt(pin)将实际的数字引脚转换为中断号(指定的数字)。
例如,
如果要将其连接到5号插针,则需要使用以下参数:
digitalPinToInterrupt(5)
它是传递给attachInterrupt()的第一个参数。
让我们讨论用于各种Arduino板的一些数字引脚,这些数字引脚可用于中断。
PIN -2,3
对于所有基于328 Microcontroller的板,其引脚号都将相似。
PIN -2,3,18,19,20,21
它包括除引脚号4之外的所有数字引脚。
PIN -0、1、4、5、6、7、8、9,A1,A2
它包括所有可用作中断的数字引脚。
注意:在附加函数修改的变量应声明为volatile。在这里,delay()函数将无法在附加函数。它需要中断才能工作。
语法为:
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)
上面的语法是最推荐的。
不推荐的语法是:
attachInterrupt(interrupt, ISR, mode)
适用于Due,Uno WiFi Rev2,Arduino SAMD开发板和101的语法为:
attachInterrupt(pin, ISR, mode)
哪里,
中断:包括中断号。
此处使用的数据类型为int 。
引脚:包括Arduino板的指定引脚号。
模式:确定何时可以在Arduino中触发中断。
ISR :代表中断服务程序。出现中断时调用。它不包含任何参数。
有四种模式或常量,如下所列:
当指定引脚为低电平时,用于触发中断。
当指定的引脚从高电平变为低电平时,它用于触发中断。
当指定的引脚更改值时,它用于触发中断。
当指定引脚从低到高时,它用于触发中断。
让我们看一个例子。
考虑下面的代码:
const byte LEDPin = 13;
const byte PINofInterrupt = 2;
volatile byte state = LOW;
void setup() {
// other declaration
attachInterrupt(digitalPinToInterrupt(PINofInterrupt), blink, CHANGE);
}
void loop()
{
digitalWrite(LEDPin, state);
}
void blink()
{
// condition specified here
}
detachInterrupt()用于关闭给定的或当前的中断。
语法为:
detachInterrupt(digitalPinToInterrupt(pin))
建议使用以上语法。
不推荐的语法是:
detachInterrupt(interrupt)