51系列单片机的中断系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
51系列单片机的中断系统
在单片机开发过程中,中断系统是非常重要的,它在很大程度上决定了系统对外界的反应速度。因此,用好中断,对一个系统开发的成败有着非常重要的意义。同时,在应用系统的开发中,单片机中断资源也是相当宝贵的,如何合理地使用中断资源,也是一个需要认真对待的问题。几乎所有的单片机开发实例,都涉及了中断系统的使用问题。
对中断概念的理解,一般都是站在CPU 的角度,认为中断系统是一种重要的外部设备。如果换个角度,面向应用任务来认识中断,就会看到,中断不仅仅只是外设。引入中断概念后,一块物理CPU 就变成了多块“逻辑CPU ”,复杂的多任务应用系统才有可能实现,操作系统才得以变成现实。可以说,中断是使微机走向实用的关键概念。
8.1 中断概念
8.1.1 从面向CPU 的观点认识中断概念
在应用系统中,CPU 与外部设备之间需要频繁交换数据。通常CPU 处理数据的速度比外部设备快得多,这造成系统内部各部分之间数据协调转移的不匹配。为解决外部设备与CPU 之间的速度匹配问题,CPU 与外部设备之间的数据交换可以采用两种办法:查询方式和中断方式。
在查询方式中,不论是输入还是输出,都是以计算机为主动的一方。CPU 在传送数据之前,首先要查询外部设备是否处于“准备好”状态。对于输入操作,需要知道外设是否已把要输入的数据准备好了;对于输出操作,则要知道外设是否已把上一次CPU 输出的数据处理完毕。只有通过查询确信外设已处于“准备好”状态,CPU 才能发出访问外设的指令,实现数据交换。查询方式的优点是通用性好,可以用于各类外部设备和CPU 之间的数据传送,缺点是需要有一个等待查询过程,CPU 在等待查询期间不能进行其他操作,从而导致工作效率低下。
与查询方式不同,中断方式是外设主动提出数据传送的请求,CPU 在收到这个请求以前,一直在执行着主程序,只是在收到外设希望进行数据传送的请求之后,才中断原有主程序的执行,暂时去与外设交换数据,数据交 图8.1中断概念示意图 换完毕后立即返回继续执行主程序。中断方式完全消除了CPU
在查询方式中的等待现象,大大
提高了CPU 的工作效率。中断方式的一个重要应用领域是实时控制。将从现场采集到的数据通过中断方式及时传送给CPU ,经过处理后就可立即作出响应,实现实时控制。而采用查询方式就很难做到及时采集,实时控制。由于中断方式传送数据可以有效提高CPU 的工作效率、
适合于实时控制系统,因而更为常用。
以上是中断在CPU 与外部设备之间交换数据中的作用。实际上,只要是同时需要兼顾两件事情,但又无法准确知道这两件事情发生时刻的时候(两事件发生时刻无关联),也就是说需要处理“异步”事件时,就会用到中断概念。
当CPU 正在执行处理某件事情的程序的时候,外部发生的某一事件(如电平的改变、脉冲边沿跳变、定时器/计数器溢出等)请求CPU 立即处理。CPU 暂时停止当前的程序运行,转去执行处理所发生的事件的程序。处理完该事件以后,再回到原来程序被打断的地方,继续执行原来的程序。这种程序在执行过程中由于外界的 原因而被暂时打断的情况称为“中响应中断请求
断点中断返回中断服务程序继续执行主程序主程序
断”。
相对于汇编指令中的转移指令,中断是通过硬件来改变CPU 的运行方向的。
8.1.2 从面向任务的观点认识中断概念
设想一个脉冲采集模块,其功能是对输入脉冲计数,要求将每一个脉冲乘上系数后在外部E 2ROM 中累加保存。
可以用查询方式监视输入脉冲的管脚,一旦有脉冲进来,CPU 就把外部E 2ROM 中的累加
数取出来,加上一个脉冲对应的系数值后,再存回外部E 2ROM 。这是把完整的功能当做一个
任务,由CPU 来执行。假如输入脉冲的频率不太高的话,两个脉冲之间有足够的时间用来运行计算和存储程序,自然是可行的;但如果输入脉冲频率比较高,相邻脉冲间隔已不能满足运行计算和存储程序的要求,就会发生丢失脉冲的现象。
利用中断概念可以解决这个问题。把上述功能拆分成两个独立的任务:一个是脉冲计数任务,只负责在脉冲到来时向脉冲计数单元中的脉冲个数加一;另一个是计算累加任务,负责把当前脉冲计数单元的脉冲个数取出来(取出后将脉冲计数单元清零),乘以规定的系数
后加到外部E 2ROM 中的累加数上。由于计算累加任务程序执行时间比较长,但实时性要求不
高,可以作为CPU 的主程序运行;而对于脉冲计数任务,由于脉冲频率不是预先确定好的,无法预见下一个脉冲何时到来,相对于主程序是“异步事件”,为保证不丢失脉冲,就需要良好的实时性,因此,脉冲计数任务由外部中断服务程序来完成。
仿照图8.1,将包含多个脉冲的一段时间中的程序流向表示出来,见图8.2。
响
应中断
请
求断点中断返回中断服务程序
程主序响应中断请求
断点中断返回中断服务程序主程序应中断请求断点中断返回中断服务程序继续执行主程序响时间方向脉冲
主程序
图8.2 多个脉冲程序流向图
注意到图中只有水平方向的线条才代表执行任务的过程,去掉只代表程序走向的斜向线条,就可以清楚地看到两个独立的任务在异步执行。在上述例子中,使用查询方式,一个CPU 只能进行一个任务;而由于加入了中断概念后,一个CPU 可以同时进行两个任务,或者说,中断概念使得一个物理CPU 变成了两个“逻辑CPU ”。
考虑更复杂的情况。上述脉冲采集模块是某个采集终端的一个部件。这个采集终端还包括按键和显示模块,其功能是响应并执行操作者的按键指令,以及定时显示必要的数据。这样一来,CPU 的工作就复杂多了。在前述脉冲采集(包括脉冲计数、计算与累计存储子任务)任务的基础上,又增加了人机交互(包括按键响应、按键指令执行、定时、显示刷新子任务)任务。如果采用类似“查询方式”的做法,合成一个大任务,肯定要顾此失彼,乱成一锅粥;即使采用图8.2的做法,由于每个任务都有不同的实时性要求,合成主任务的因素太复杂,也会导致设计困难,可靠性降低。