Arduino项目开发:音乐创意
上QQ阅读APP看书,第一时间看更新

1.4.6 中断函数

什么是中断?在日常生活中,中断非常常见,如图1-24所示。

你在看书时,电话铃响了,于是在书上做个记号,去接电话,与对方通话;门铃响了,有人敲门,你让打电话的对方稍等一下,去开门,并在门旁与来访者交谈,谈话结束,关好门;回到电话机旁,继续通话,接完电话后再回来从做记号的地方继续阅读。

同样的道理,在单片机中也存在中断概念,如图1-25所示。在计算机或者单片机中中断是由于某个随机事件的发生,计算机暂停主程序的运行,转去执行另一程序(随机事件),处理完毕后又自动返回主程序继续运行的过程。也就是说高优先级的任务中断了低优先级的任务。在计算机中中断包括如下几部分:

中断源——引起中断的原因,或能发生中断申请的来源。

主程序——计算机现行运行的程序。

中断服务子程序——处理突发事件的程序。

图1-24 中断的概念

图1-25 单片机中的中断

1. attachInterrupt(interrput,function,mode);

该函数用于设置中断,有3个参数,分别表示中断源、中断处理函数和触发模式。中断源可选0或者1,对应数字引脚2、数字引脚3。中断处理函数是一段子程序,当中断发生时执行该子程序部分。触发模式有4种类型,LOW(低电平触发)、CHANGE(变化时触发)、RISING(低电平变为高电平触发)、FALLING(高电平变为低电平触发)。

例程功能如下:引脚2接按钮开关,引脚4接LED1(红色),引脚5接LED2(绿色)。在例程中,LED3为板载的LED,每秒闪烁一次。使用中断0控制LED1,中断1控制LED2。按下按钮,马上响应中断,由于中断响应速度快,LED3不受影响,继续闪烁。使用不同的4个参数,例程1试验LOW和CHANGE参数,例程2试验RISING和FALLING参数。

例程1:

例程2:

2. detachInterrupt(interrput);

该函数用于取消中断,参数interrupt表示所要取消的中断源。