欢迎来到天天文库
浏览记录
ID:37637296
大小:1.05 MB
页数:13页
时间:2019-05-27
《Arduino中断的使用》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、要搞清楚什么是中断,我们可以从生活中的一个例子了解下。你正在家里看电视,突然家里座机响了,你起身去接电话,接完电话后继续回来看电视。这就是生活中的中断现象,也就是一个正在做的事情被外部的事情打断,当执行完外部事情后,继续做原本的事情。什么是中断?所谓中断,是指CPU在正常运行程序时,由于内部/外部事件或由程序预先安排的事件,引起CPU中断正在运行的程序,而转到为内部/外部事件或为预先安排的事件服务的程序中去,服务完毕,再返回去执行波暂时中断的程序由于某个事件的发生,CPU暂停当前正在执行的程序,转而执行处理该事件的一个程序。该程序执行完成后,CPU接着执行被暂停的程序。这
2、个过程称为中断。根据中断源的位置,有两种类型的中断。有的中断源在CPU的内部,称为内部中断。大多数的中断源在CPU的外部,称为外部中断。根据中断引脚的不同,或者CPU响应中断的不同条件,也可以把中断划分为可屏蔽中断和不可屏蔽中断两种。使用中断的好处1、实行分时操作提高CPU的效率只有当服务对象向CPU发出中断申请时才去为它服务这样我们就可以利用中断功能同时为多个对象服务从而大大提高了CPU的工作效率2、实现实时处理利用中断技术各个服务对象可以根据需要随时向CPU发出中断申请及时发现和处理中断请求并为进入正题我们在本次试验中使用ocrobotmango(ArduinoUNO
3、兼容板),IDE使用1.0.1版本。在OCROBOTMANGO(UNO也一样)中,有两个可以使用的外部中断,0(数字引脚2)和1(数字引脚3),本次例子中我们使用D2引脚作为中断引脚,使用A0引脚控制LED。原理图如下:5VArduinopin2GND标准的数字输入与输出--没有中断如果你按照上面的电路图进行了接线,把下面的代码编译上传进入Arduino。代码用来读取你输入的值,然后作为条件进行比较,(按下开关,LED状态不会立刻改变,要按住一会儿才能改变)1.intpbIn=2;//定义输入信号引脚2.intledOut=A0;//定义输出指示灯引脚3.intstate
4、=LOW;//定义默认输入状态4.voidsetup()5.{6.//设置输入信号引脚为输入状态、输出引脚为输出状态7.pinMode(pbIn,INPUT);8.pinMode(ledOut,OUTPUT);9.}10.voidloop()11.{12.state=digitalRead(pbIn);//读取微动开关状态13.digitalWrite(ledOut,state);//把读取的状态赋予LED指示灯14.//模拟一个长的流程或者复杂的任务15.for(inti=0;i<100;i++)16.{17.//延时10毫秒18.delay(10);19.}20.}使
5、用中断现在,我们使用相同的电路连接图,然后修改代码以使用硬件中断。然后把下面的代码下载进入控制板中,当按下按钮时,LED的状态就会立刻改变,尽管代码仍然是在主循环中,而且是同样的延时。(按下开关,LED状态就会立刻变化)1.intpbIn=0;//定义中断引脚为0,也就是D2引脚2.intledOut=A0;//定义输出指示灯引脚3.volatileintstate=LOW;//定义默认输入状态4.voidsetup()5.{6.//置ledOut引脚为输出状态7.pinMode(ledOut,OUTPUT);8.//监视中断输入引脚的变化9.attachInterrup
6、t(pbIn,stateChange,CHANGE);10.}11.voidloop()12.{13.//模拟长时间运行的进程或复杂的任务。14.for(inti=0;i<100;i++)15.{16.//什么都不做,等待10毫秒17.delay(10);18.}19.}20.voidstateChange()21.{22.state=!state;23.digitalWrite(ledOut,state);24.}中断命令语法介绍attachInterrupt(interrupt,function,mode)interrupt:中断引脚数(0or1)function:中
7、断发生时调用的函数,此函数必须不带参数和不返回任何值。该函数有时被称为中断服务程序。mode:定义何时发生中断以下四个contstants预定有效值:LOW当引脚为低电平时,触发中断CHANGE当引脚电平发生改变时,触发中断RISING当引脚由低电平变为高电平时,触发中断FALLING当引脚由高电平变为低电平时,触发中断.当发生外部中断时,调用一个指定函数。当中断发生时,该函数会取代正在执行的程序。大多数的Arduino板有两个外部中断:0(数字引脚2)和1(数字引脚3)。arduinoMege有四个外部中断:数字2(引脚21
此文档下载收益归作者所有