基本信息
文件名称:Arduino 系列:Arduino Micro (基于 ATmega32U4)_(13).Arduino Micro的外部中断.docx
文件大小:22.29 KB
总页数:17 页
更新时间:2025-06-27
总字数:约8.6千字
文档摘要

PAGE1

PAGE1

ArduinoMicro的外部中断

什么是外部中断

外部中断是单片机的一种重要功能,它允许外部信号在特定的条件下中断当前的程序执行,转而执行预先定义的中断服务程序(InterruptServiceRoutine,ISR)。外部中断在实时响应外部事件、提高系统效率和可靠性方面发挥着重要作用。ArduinoMicro基于ATmega32U4微控制器,提供了多个外部中断引脚,可以用于检测外部信号的变化并触发相应的中断处理。

外部中断引脚

ArduinoMicro有多个引脚可以配置为外部中断引脚。这些引脚分别是:

D2(外部中断引脚0)

D3(外部中断引脚1)

D4(外部中断引脚2)

D5(外部中断引脚3)

D6(外部中断引脚4)

D7(外部中断引脚5)

D8(外部中断引脚6)

D9(外部中断引脚7)

D10(外部中断引脚8)

D11(外部中断引脚9)

D12(外部中断引脚10)

D13(外部中断引脚11)

D14(外部中断引脚12)

D15(外部中断引脚13)

这些引脚可以配置为不同的中断模式,包括:

LOW:当引脚电平为低时触发中断。

CHANGE:当引脚电平发生变化时触发中断。

RISING:当引脚电平从低变高时触发中断。

FALLING:当引脚电平从高变低时触发中断。

配置外部中断

attachInterrupt函数

在Arduino中,配置外部中断的主要函数是attachInterrupt。该函数的原型如下:

voidattachInterrupt(interruptModemode,void(*userFunc)(void),intd_pin);

interruptModemode:中断模式,可以是LOW、CHANGE、RISING或FALLING。

**void(*userFunc)(void)**:中断服务函数的指针,即当中断触发时执行的函数。

intd_pin:外部中断引脚编号。

detachInterrupt函数

如果需要取消某个引脚的外部中断,可以使用detachInterrupt函数。该函数的原型如下:

voiddetachInterrupt(intd_pin);

intd_pin:外部中断引脚编号。

示例代码

以下是一个简单的示例,演示如何使用外部中断来响应引脚D2的下降沿事件,并在中断服务程序中点亮一个LED。

//定义引脚

constintinterruptPin=2;//外部中断引脚

constintledPin=13;//LED引脚

//定义中断服务函数

voidhandleInterrupt(){

//当中断触发时,点亮LED

digitalWrite(ledPin,HIGH);

delay(100);//延时100毫秒

digitalWrite(ledPin,LOW);

}

voidsetup(){

//初始化引脚

pinMode(interruptPin,INPUT);

pinMode(ledPin,OUTPUT);

//配置外部中断

attachInterrupt(digitalPinToInterrupt(interruptPin),handleInterrupt,FALLING);

}

voidloop(){

//主程序循环

//这里可以执行其他任务

}

代码解释

定义引脚:

constintinterruptPin=2;:定义外部中断引脚为D2。

constintledPin=13;:定义LED引脚为D13。

定义中断服务函数:

voidhandleInterrupt(){...}:当外部中断触发时,执行该函数。在函数中,首先将LED引脚设置为高电平,点亮LED,然后延时100毫秒,最后将LED引脚设置为低电平,熄灭LED。

初始化引脚:

pinMode(interruptPin,INPUT);:将外部中断引脚设置为输入模式。

pinMode(ledPin,OUTPUT);:将LED引脚设置为输出模式。

配置外部中断:

attachInterrupt(digitalPinToInterrupt(interruptPin),handleInterrupt,FALLING);:将引脚D2配置为下降沿中断模式,并指定中断服务函数handleInterrupt。

主程序循环:

voidloop(){...}:主程序循环中可以执行其他任务,但在这个示例中没有其他任务,只是等待中断触发。

外部中断的应用