Arduino外部中断

2015-06-121.7万
AI 快速预览详细 收起
本文介绍了Arduino外部中断的基本概念和应用。中断是CPU在正常运行时,由于内部或外部事件引起CPU暂停当前程序,转到该事件的处理程序,执行完毕后再返回原程序。文章详细解释了中断的类型、中断函数的使用方法,并提供了示例程序。示例程序展示了如何在D2引脚上设置中断,控制LED灯的状态变化。通过学习本文,初学者可以更好地理解和应用Arduino外部中断。


一、什么是中断
1.中断是CPU在正常时,由于内部/外部事件引起CPU暂停正在运行的程序,而转到该事件的程序中去,执行完毕,再返回去执行暂时中断的程序。举一例子,假如你正在用手机玩消消乐,女朋友来喊你出去逛街。这时,你只能暂停游戏去逛街。逛街回来,可以继续玩o(∩_∩)o 这个例子就表现了中断及其处理过程:女友要求去逛街称为“中断请求”,你暂停游戏去逛街叫作“中断响应”,陪女友逛街的过程就是“中断处理”
2.根据中断源的位置,有两种中断:有的中断源在CPU的内部,称为内部中断;大多数的中断源在CPU的外部,称为外部中断。
根据中断引脚的不同,或者CPU响应中断的不同条件,也可以把中断划分为可屏蔽中断和不可屏蔽中断两种。
二、计算机为什么要采用中断
1.实行分时操作:可以利用中断功能同时为多个对象服务,以提高CP的工作效率。
2.实现实时处理:通过中断,各个服务对象可以根据需要随时CP发出中断申请。

三、中断函数
大部分的Arduino板子里有两个外部中断: numbers 0 (on digital pin 2) and 1 (on digital pin 3)。
Mege有四个外部中断:numbers 2(数字针脚21),3(20),4(19),5(18)。
1.外部中断的语法:attachInterrupt(interrupt, function, mode),即attachInterrupt(中断号,中断函数,中断模式)。
  中断模式:LOW     当中断管脚是低电平时触发
          CHANGE  当中断管脚有高低电平变化时触发
          RISING  当中断管脚是上升延时触发(从低电平变高电平)
          FALLING 当中断管脚是下降延时触发(从高电平变低电平)

2.删除中断:detachInterrupt(interrupt_number)
3.忽略所有中断:noInterrupts()
4.重新启用中断:interrupts()
注意事项:当中断函数时,delay()和millis()的数值将不会继续变化,串口收到的数据可能会丢失,应该声明一个变量来在未发生中断时储存变量。
四、示例程序
  1. int pbIn = 0;                  // 定义中断引脚为0,也就是D2引脚
  2. int ledOut = A0;                // 定义输出指示灯引脚
  3. volatile int state = LOW;      // 定义默认输入状态
  4. void setup()
  5. {               
  6.   // 置ledOut引脚为输出状态
  7.   pinMode(ledOut, OUTPUT);
  8.   // 监视中断输入引脚的变化
  9.   attachInterrupt(pbIn, stateChange, CHANGE);
  10. }
  11. void loop()                     
  12. {
  13.   // 模拟长时间运行的进程或复杂的任务。
  14.   for (int i = 0; i < 100; i++)
  15.   {
  16.     // 什么都不做,等待10毫秒
  17.     delay(10);
  18.   }
  19. }
  20. void stateChange()
  21. {
  22.   state = !state;
  23.   digitalWrite(ledOut, state);  
  24. }
复制代码




创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(1)
hnyzcj
hnyzcj
非常有用的东西,在车速码表中会用到中断的。张禄回头指导我一下。
丄帝De咗臂
丄帝De咗臂
作者
回复hnyzcj
你过奖了,我这也是现学现卖
- 没有更多了 -