Arduino - 中断(Interrupts)

Arduino - 中断(Interrupts) 首页 / Arduino入门教程 / Arduino - 中断(Interrupts)

中断Interrupts会停止Arduino当前的工作,以便可以完成其他工作。

主程序正在运行并在电路中执行某些函数,但是,当发生中断时,主程序将暂停,同时执行另一个例程,该例程完成后,处理器将再次返回主例程。

Interrupt

中断类型

有两种类型的中断-

无涯教程网

  • 硬件中断  -  它们是响应外部事件而发生的,例如外部中断引脚变高或变低。

  • 软件中断  -  它们是响应软件中发送的指令而发生的,支持的唯一中断类型是attachInterrupt()函数。

使用中断

中断在Arduino程序中非常有用,因为它有助于解决时序问题,中断的一个很好的应用是读取旋转编码器或观察用户输入。

通常,全局变量用于在ISR和主程序之间传递数据,为了确保正确更新ISR和主程序之间共享的变量,请将其声明为volatile

attachInterrupt 语法

attachInterrupt(digitalPinToInterrupt(pin),ISR,mode);//推荐用于arduino板
attachInterrupt(pin, ISR, mode) ; //推荐 Arduino Due
//参数 pin:pin 号
//参数 ISR:中断发生时要调用的 ISR;
   //此函数必须不带任何参数且不返回任何内容。
   //该函数有时被称为中断服务程序.
//参数模式:定义何时应触发中断。

以下三个常量已预定义为有效值-

  • LOW           -  每当引脚为低电平时触发中断。

  • CHANGE   -  以在引脚更改值时触发中断。

  • Falling        -  每当引脚从高电平变为低电平时,

int pin=2; //将中断引脚定义为 2
volatile int state=LOW; //确保 ISR 之间共享变量
//主程序已正确更新,将它们声明为 volatile。

void setup() {
   pinMode(13, OUTPUT); //将引脚 13 设置为输出
   attachInterrupt(digitalPinToInterrupt(pin), blink, CHANGE);
   //当引脚更改值时,引脚 2 处的中断闪烁 ISR
} 
void loop() { 
   digitalWrite(13, state); //引脚 13 等于状态值
} 

void blink() { 
   //中断服务功能
   state=!state; //中断发生时切换状态
}

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

高并发系统设计40问 -〔唐扬〕

说透中台 -〔王健〕

人人都能学会的编程入门课 -〔胡光〕

分布式系统案例课 -〔杨波〕

技术管理案例课 -〔许健〕

Flink核心技术与实战 -〔张利兵〕

物联网开发实战 -〔郭朝斌〕

零基础学Python(2023版) -〔尹会生〕

手把手教你落地DDD -〔钟敬〕

好记忆不如烂笔头。留下您的足迹吧 :)