还没写完!
之前写过一篇arduino中断教程 http://www.arduino.cn/thread-2421-1-1.html
本篇是针对Genuino 101重写的中断教程。
程序运行中,我们时常需要监控一些事件的发生,如对某一传感器的检测结果做出反应。使用轮询的方式检测,效率较低,等待时间较长,而使用中断方式检测,可以到达实时检测的效果。
如图3-13所示,中断程序可以看作是一段独立于主程序之外的程序,当中断触发时,控制器会暂停当然正在运行的主程序,而跳转去运行中断程序,中断程序运行完后,会再回到之前主程序暂停的位置,继续运行主程序。如此便可做到实时响应处理事件的效果。
3.5.1 外部中断的使用
外部中断是由外部设备发起请求的中断。要使用外部中断,你需要了解中断引脚的位置,根据你外部设备选择中断模式,并编写一个中断触发后执行的中断函数。
中断引脚与中断编号
在不同型号的Arduino控制器上中断引脚的位置也不同,只有中断信号发生在带外部中断功能的引脚上,Arduino才能捕获到这个中断信号并做出响应。
在Genuino101上的中断使用,和其他Arduino控制器有些许不同:
其他Arduino只有部分引脚支持外部中断,而Genuino 101所有引脚都支持外部中断;
在其他型号的Arduino,中断编号和引脚号是不一样的,而在Genuino 101上,中断编号即是引脚编号。
中断模式
你还需要了解设备触发外部中断的输入信号类型,以此来设置中断模式。中断模式也就是中断触发的方式。在大多数Arduino上支持表3-4中的四种中断触发方式:
可用中断模式有如下几种:
LOW 低电平触发
HIGH 高电平触发
CHANGE 电平变化触发,高电平变低电平、低电平变高电平(仅2, 5, 7, 8, 10, 11, 12, 13引脚支持)
RISING 上升沿触发,低电平变高电平
FALLING 下降沿触发,高电平变低电平
中断函数
你还需要编写一个响应中断的处理程序——中断函数,中断触发后,便让Arduino运行这个函数。中断函数就是当中断触发后要去执行的函数,这个函数不能带任何参数,且返回类型为空,如:
当中断触发后,Arduino便会执行这个函数中的语句。
中断初始化
这些准备工作做好后,我们还需要在Setup() 中,使用attachInterrupt() 函数对中断引脚进行初始化配置,以开启Arduino的外部中断功能,其方法如下:
参数
pin:中断引脚。
ISR:中断函数名。中断触发后,即会运行的函数名称
mode:中断模式。
例如:
该语句即会开启3号引脚上的外部中断功能,并指定下降沿时触发该中断。当3号引脚上电平由高变低后,该中断会被触发,Arduino即会运行Hello() 函数中的语句。
关闭中断
如果你不需要使用外部中断了,你可以用中断分离函数detachInterrupt() 来关闭中断功能。
禁用外部中断。
参数
pin:需要禁用中断引脚。
|