学习到这里,就已经初窥门庭了,下一步还有一个重要的关口-------中断
单片机的中断,概念并不难以理解。只是要真正理解运用编程处理一些实际中断的例子,却也不是很容易,甚至是单片机学习、入门的拦路虎。要想学会实际的中断处理编程,也还需要清楚一些程序存储器,程序结构,程序计数器,硬件堆栈,现场保护等这些个另杂碎概念。因此,我们在学习中断以前、以后和学习中断过程中,都有必要介绍回顾复习一些有关上述关键词的概念和知识,否则,尽管你学了中断,用起来可还是不能得心应手,以至于茫然。
还是用比喻的方法介绍一下中断的概念:
你的主程序任务是做一桌可口的饭菜,期间可能要多次调用子程序“撒盐”。尽管子程序下边还有更小的子任务,比如“计算食盐的量”等过程,尽管这些子过程很复杂,但他们的出场时间和顺序是可以预料的,是可以预先安排的。也就说你肯定知道在什么时候放盐。
有一类子程序,他的出场时间是不确定的,突然的,处理他们的时间刻不容缓,必须赶紧的。我们称这一类子程序为中断子程序。也就是我们所说的“中断”。
你正在做菜的过程中,隔壁邻居小孩突然敲门说他的二大爷在他房间里摔倒了,请你帮忙把二大爷扶起来。这是急迫的,必须处理的事务。
你肯定关掉炉子一溜烟跑出去帮忙,等回来以后再点着炉子继续做菜。
这个事件的特点就是发生的时间你无法预先知道,而这个任务必须得停下当前工作去处理,并且是刻不容缓。
从开始关炉子到回来点着炉子的这段时间里以及你的救人行为,就叫做“中断子程序”。
在中断子程序过程中,你关炉子的动作,叫做“中断现场保护”;点着炉子叫做“中断现场恢复”;中间走出去扶起隔壁二大爷到回来叫做“中断任务处理”;小孩子敲门就叫做“中断请求”。这就是中断的基本概念。
在单片机里,中断的例子也是很多的。我举一个你手里的手机的例子,你的GSM手机正工作在赋闲,屏幕上也就显示个时间日期中国电信什么的,表面看没有什么。其实它内部的cpu高速运行忙碌地工作在诸如联络无线网络,查询是否有短消息发来,计算当前信号强度,时间等任务。
你突然按下数字键“8”,此时内部cpu必须停下它正在干的工作来应付你,也就是清屏,显示你按下的数字8,然后再回到它原来的任务接着运行。(当然,这个例子不一恰当,现在有操作系统Windows-ce windows-mobile的手机的工作机制远没有如此的简单)