《Arduino开发实战指南:机器人卷》一2.5 中断函数

本节书摘来华章计算机《Arduino开发实战指南:机器人卷》一书中的第2章 ,第2.5节,黄文恺 伍冯洁 陈 虹 编著更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.5 中断函数

单片机的中断可概述为:由于某一随机事件的发生,单片机暂停原程序的运行,转去执行另一程序(随机事件),处理完毕后又自动返回原程序继续运行,其发生过程如图2.2所示,其中中断源、主程序、中断服务程序简述如下。
中断源:引起中断的原因,或能发生中断申请的来源。
主程序:单片机现在运行的程序。
中断服务程序:处理中断事件的程序。

2.5.1 interrupts()和noInterrupts()

在Arduino中,interrupts函数与noInterrupts函数分别负责打开与关闭总中断,这两个函数均为无返回值函数,无参数。

2.5.2 attachInterrupt(interrput,function,mode)

attachInterrupt函数用于设置外部中断,有3个参数,分别表示中断源、中断处理函数和触发模式,它们的具体含义如下。
中断源:可选0或者1,对应2或者3号数字引脚。
中断处理函数:指定中断的处理函数,是一段子程序,当中断发生时执行该子程序部分,其中参数值为函数的指针。
触发模式:有四种类型——LOW(低电平触发)、CHANGE(变化时触发)、RISING(低电平变为高电平触发)、FALLING(高电平变为低电平触发)
数字引脚D2口接按钮开关,D4口接LED1(红色),D5口接LED2(绿色),LED3为板载LED灯,每秒闪烁一次。使用中断0来控制LED1,中断1来控制LED2。按下按钮,马上响应中断,由于中断响应速度快,LED3不受影响,继续闪烁。该示例的程序清单如下:

volatile int state1=LOW,state2=LOW;
int LED1=4;
int LED2=5;
int LED3=13;                    // 使用板载的LED灯
void setup()
{ 
  pinMode(LED1,OUTPUT);
  pinMode(LED2,OUTPUT);
  pinMode(LED3,OUTPUT);
  attachInterrupt(0,LED1_Change,LOW);        // 低电平触发
  attachInterrupt(1,LED2_Change,CHANGE);    // 任意电平变化触发
}
void loop()
{ 
  digitalWrite(LED3,HIGH); 
  delay(500);
  digitalWrite(LED3,LOW);
  delay(500);
}
void LED1_Change()
{ 
  state1=!state1;
  digitalWrite(LED1,state1);
  delay(100);
}
void LED2_Change()
{
  state2=!state2;
  digitalWrite(LED2,state2);
  delay(100);
}

2.5.3 detachInterrupt(interrput)

detachInterrupt函数用于取消中断,参数interrupt表示所要取消的中断源。

上一篇:MAT之SA:T1编写主函数法和T2Matlab自带的SA工具箱GUI法,两种方法实现对一元函数优化求解


下一篇:Excel 2016新增函数之IFS