1、什么是中断呢?
可以举一个日常生活中的例子来说明,假如你正在给朋友写信,电话铃响了。这时,你放下手中的笔,去接电话。通话完毕,再继续写信。这个例子就表现了中断及其处理过程:电话铃声使你暂时中止当前的工作,而去处理更为急需处理的事情(接电话),把急需处理的事情处理完毕之后,再回头来继续原来的事情。
在这个例子中,电话铃声称为“中断请求”,你暂停写信去接电话叫作“中断响应”,接电话的过程就是“中断处理”,相应地,在计算机执行程序的过程中,由于出现某个特殊情况(或称为“事件”),使得暂时中止现行程序,而转去执行处理这一事件的处理程序,处理完毕之后再回到原来程序的中断点继续向下执行,这个过程就是中断。
2、那我们为什么要使用中断呢?
再举一个例子,假设你有一个朋友来拜访你,但是由于不知道何时到达,你只能在大门等待,于是什么事情也干不了。如果在门口装一个门铃,你就不必在门口等待而去干其它的工作,朋友来了按门铃通知你,你这时才中断你的工作去开门,这样就避免等待和浪费时间,同样它能使得CPU的效率大大提高。
3、中断是怎样分类的呢?
产生中断请求的设备或事件称为“中断源”。从中断源来看,中断一般可分为三类:
(1)由计算机硬件异常或故障引起的中断,也称为内部异常中断。
(2)由程序中执行了中断指令引起的中断,也称为软中断。(3)外部设备(如输入输出设备)请求引起的中断,也称为外部中断或I/O中断。
在这三类中断中,外部中断我们接触得最多,好了中断相信介绍到这,大家了解的也差不多了~~~
下面我们就来介绍下Arduino的外部中断使用!
外部中断在不同的Arduino型号上位置也不同,只有外部中断发生在以下端口,Arduino才能捕获到,大部分Arduino控制板上有两个外部中断:数字0(数字端口2)和数字1(数字端口3),以下是常见的几种型号的外部中断引脚标号。
[attach]396[/attach]
Arduino Due 控制板的中断功能很强大,它的每个引脚都可以使用中断。
语法 :
attachInterrupt(interrupt, function, mode)
attachInterrupt(pin, function, mode)(只适用于 Arduino Due )
参数:
interrupt:中断引脚数
pin: the pin number 可以直接使用引脚号 (只适用于 Arduino Due)
function:中断发生时调用的函数,此函数必须不带参数和不返回任何值。该函数有时被称为中断服务程序。
mode:定义何时发生中断以下四个contstants预定有效值:
LOW 当引脚为低电平时,触发中断
CHANGE 当引脚电平发生改变时,触发中断
RISING 当引脚由低电平变为高电平时,触发中断
FALLING 当引脚由高电平变为低电平时,触发中断
HIGH 当引脚为高电平时,触发中断 (只适用于 Arduino Due)
在使用attachInterrupt函数时要注意以下几点:
中断函数是没有返回值的;
在中断函数中delay函数不能使用;
读取串口数据的话,可能会丢失;
中断函数中使用的变量需要定义为volatile型。
关闭中断
当然如果你在程序中某段不需要中断,也可以使用函数detachInterrupt(interrupt)来关闭设定的中断;在使用Arduino Due控制板时,我们可以使用detachInterrupt(pin)。(参数同上)
下面我们看下官方给出的例子:
外部中断的应用还是很多的,大家在以后编写程序中可以用在程序中,来提高程序的效率~
wqb123 发表于 2014-1-6 12:34
这个如果是arduino mini怎么使用attachInterrupt(interrupt, function, mode) 这个interrupt代表了什么?
AllBlue 发表于 2014-1-6 14:40
中断引脚:0 -- 2号引脚
1 -- 3号引脚
1610092227 发表于 2019-1-27 16:12
还是没有明白0和1是什么意思
欢迎光临 YFROBOT创客社区 (http://yfrobot.com.cn/) | Powered by Discuz! X3.1 |