13869浏览
查看: 13869|回复: 2

Arduino外部中断

[复制链接]
本帖最后由 丄帝De咗臂 于 2015-6-12 10:49 编辑

一、什么是中断
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. }
复制代码




hnyzcj  版主

发表于 2015-6-12 11:34:46

非常有用的东西,在车速码表中会用到中断的。张禄回头指导我一下。
回复

使用道具 举报

丄帝De咗臂  高级技匠
 楼主|

发表于 2015-6-12 12:52:04

hnyzcj 发表于 2015-6-12 11:34
非常有用的东西,在车速码表中会用到中断的。张禄回头指导我一下。

你过奖了,我这也是现学现卖
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail