单片机控制管理系统中必不可少的“中断”基础知识
连载的最后一期。本期我们将说明在单片机编程过程中一定会遇到的、也是单片机控制中必不可少的一种解决方法---“中断”。
“中断”处理并非单片机控制管理系统所特有的现象,在我们的日常生活中“中断”的例子也随处可见。 让我们来看看身边的例子吧。比如尽管您知道今天有快递送到,但却不知道快递送来的具体时间,在这种情况下,也许您会选择坐在客厅里边看书,边等快递送来。在您看书其间,门铃响的时候就表明快递到了(有事件发生)。这就是“中断”的例子。
如果不用“中断”处理等待方式的话,在看书的过程中,您就必须经常走到门口去确认快递是否到了。 像这样频繁地确认是否有“事件”发生的现象,在单片机控制中是通过软件编程完成的。我们把这种解决方法称为“轮询”(图2)。
实际上单片机的中断处理更为复杂,还是以上述事例(边看书边等待快递送来)进行说明。
现在,相信我们大家对“中断” 已经知道了。下面我们来看看在实际的“中断”处理中,单片机内部是怎样进行的。
在单片机中,通知事件发生的中断信号一般来自于外部INT引脚的输入信号,或是来自定时器、串行I/F等内部的外围功能电路的信号。接收中断信号的是中断控制器。中断控制器根据产生的中断信号的优先级,按优先级顺序发送给CPU。当然,被设定为无效的设备所传送来的中断信号是不会传给CPU的,您也可以屏蔽或忽略它们。CPU根据从中断控制器接收到的指示,执行相应的程序(中断处理)。
“中断”与“轮询”看起来好象能够直接进行同样的处理,实际上它们有很大的区别。不同之处在于当事件发生时,中断方式能立刻执行对应事件的处理。中断的这种解决方法被称为是实时处理。
而在“轮询”方式中,如果对发生事件的监视周期较短的话也能轻松实现实时处理,但是在通常情况下,总是有多个事件发生,有时主程序也不允许太短的循环,所以,难以实现实时处理。
当 “中断” 发生时,由于从检测到事件发生到切换到中断处理只需要几十至几百个时钟,所以能在极短的时间内对应事件进行处理。
例如,在键输入或开关输入的情况下,对于单片机来说开关何时将被按下是不可预测的事件。所以,如果在主程序中以“轮询”的方式监视的话,将会无端浪费CPU的处理时间,而且,如果要进行多个“轮询”处理,则“轮询”的周期将会变长。
如果不具备单片机的硬件知识,是很难理解和应用“中断”的。“中断”的内容也确实有些难度,但是它却是单片机系统控制中无法避开的一种处理。所以,大家必须要加深对单片机知识的理解,并熟练掌握“中断”的基本知识和使用方法!