📜  Arduino中断

📅  最后修改于: 2020-12-27 09:56:00             🧑  作者: Mango

Arduino中断

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()
  • detachInterrupt()

attachInterrupt()

设置中断的第一个函数是: attachInterrupt()

我们需要使用digitalPinToInterrupt(pin)将实际的数字引脚转换为中断号(指定的数字)。

例如,

如果要将其连接到5号插针,则需要使用以下参数:

digitalPinToInterrupt(5) 

它是传递给attachInterrupt()的第一个参数。

可用于中断的数字引脚

让我们讨论用于各种Arduino板的一些数字引脚,这些数字引脚可用于中断。

  • Arduino UNO,Mini或Nano

PIN -2,3

对于所有基于328 Microcontroller的板,其引脚号都将相似。

  • Arduino Mega ADK,Mega 2560或Mega

PIN -2,3,18,19,20,21

  • Arduino的零

它包括除引脚号4之外的所有数字引脚。

  • Arduino MKR系列板

PIN -0、1、4、5、6、7、8、9,A1,A2

  • Arduino到期

它包括所有可用作中断的数字引脚。

注意:在附加函数修改的变量应声明为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()用于关闭给定的或当前的中断。

语法为:

detachInterrupt(digitalPinToInterrupt(pin))

建议使用以上语法。

不推荐的语法是:

detachInterrupt(interrupt)

适用于due="" nhref="https://www.javatpoint.com/arduino-due" p="" rev2,arduino="" samd开发板和101的语法为:<="" wifi="" ,="">

哪里,

interrupt :它包括我们要禁用的中断号。

pin :这是Arduino板的引脚号,用于禁用中断。