双源电子

在线客服
 工作时间
周一至周五 :8:30-17:30
周六至周日 :9:00-17:00

ARDUINO学习13

作者:双源电子

中断的使用。
中断是单片机系统的一个重要应用,加强了单片机对随机时间的处理能力;例如,主程序中正在处理A事件,突然发生了中断响应,单片机这时就去执行B事件了,等完成了B事件的处理,在返回来处理A事件。
中断分为外部中断和内部中断,顾名思义,外部中断需要外部信号触发, 比如引脚上的电平高低变化;内部中断源自单片机内部,比如定时器,串口事件等。
如果是几个中断同时发生,单片机则要根据中断的优先级来进行响应不同的事件。每个型号的单片机都有自己的中断向量表,因此在程序移植的时候,要注意中断向量值是否与当前的单片机匹配。
以ARDUINO  Leonardo为例,D3脚对应外部中断0,D2脚对应外部中断1;
中断关联函数为:

attachInterrupt(interrupt, function, mode);
参数含义:

interrupt:中断号
function:中断发生时调用的函数,此函数必须不带参数和不返回任何值。该函数有时被称为中断服务程序。
mode:发生中断的条件,包含以下四个类型:

  • LOW 当引脚为低电平时,触发中断
  • CHANGE 当引脚电平发生改变时,触发中断
  • RISING 当引脚由低电平变为高电平时,触发中断
  • FALLING 当引脚由高电平变为低电平时,触发中断.
我们把轻触开关的一端接D3脚,另一端接GND,执行下面程序:
int pbIn = 0;                  // 定义中断引脚为0,也就是D3引脚
int ledOut =13;                // 定义输出指示灯引脚
volatile int state = LOW;      // 定义默认输入状态
void setup()
{                
 // 置ledOut引脚为输出状态
 pinMode(ledOut, OUTPUT);
 // 监视中断输入引脚的变化
 attachInterrupt(pbIn , stateChange, FALLING );//当电平下降时,触发中断0,执行函数stateChange
}

void loop()                    
{
 // 模拟长时间运行的进程或复杂的任务。
 for (int i = 0; i < 100; i++)
 {
   // 什么都不做,等待10毫秒
   delay(10);
 }
}

void stateChange()//中断响应程序
{
 state = !state;//状态反转
 digitalWrite(ledOut, state);  //设置管脚状态
}
注意,中断响应程序中不要执行复杂的代码,越简单越好,最好只是简单的数字加减、赋值运算,否则,长时间的中断执行占用,会导致单片机的程序跑乱。
上面代码正常执行结果应该是:每次按下轻触开关,LED的状态就发生改变。


联系方式
_faiMaterial_000045

联系人:ANTBOT001

QQ:584860790

邮 箱:584860790@qq.com

交流群: 615486305