1、第第5 5章章 中断系统及定时中断系统及定时/计数器计数器 中断系统和定时中断系统和定时/计数器是单片机应用系统中非常重要的计数器是单片机应用系统中非常重要的组成部分。组成部分。MCS-51系列中中断源略有不同,下面以系列中中断源略有不同,下面以80C51为为例进行介绍,例进行介绍,80C51有有5个中断源和个中断源和2个个16位定时位定时/计数器。计数器。5.1 80C515.1 80C51中断系统中断系统 由于早期计算机与外设交换信息时,慢速工作的外设与由于早期计算机与外设交换信息时,慢速工作的外设与快速工作的快速工作的CPU之间会出现速度不匹配的问题,例如,之间会出现速度不匹配的问题,例
2、如,CPU处理和传送字符的速度远远比打印机打印字符的速度要快得处理和传送字符的速度远远比打印机打印字符的速度要快得多。如果采用查询法,多。如果采用查询法,CPU就不得不花费大量的时间等待和就不得不花费大量的时间等待和查询打印机打印字符的过程,而采用中断技术后的计算机,查询打印机打印字符的过程,而采用中断技术后的计算机,可以解决可以解决CPU与外设之间速度匹配的问题,使计算机可以及与外设之间速度匹配的问题,使计算机可以及时处理系统中许多随机的参数和信息,同时它也提高了计算时处理系统中许多随机的参数和信息,同时它也提高了计算机处理故障与应变的能力。机处理故障与应变的能力。5.1.1 5.1.1 中
3、断概述中断概述1什么是中断什么是中断在日常生活中就有中断现象,比如:你正在看书,电话铃响在日常生活中就有中断现象,比如:你正在看书,电话铃响了你在书上做个记号,走到电话旁,你拿起电话和对方通话了你在书上做个记号,走到电话旁,你拿起电话和对方通话这时,门铃又响了你让打电话的对方稍等一下,你去开门,这时,门铃又响了你让打电话的对方稍等一下,你去开门,并在门旁与来访者交谈片刻谈话结束,关门回到电话机旁,并在门旁与来访者交谈片刻谈话结束,关门回到电话机旁,拿起电话,继续通话通话完毕,挂上电话从做记号的地方起拿起电话,继续通话通话完毕,挂上电话从做记号的地方起继续看书。继续看书。结合这个日常生活中的例子
4、,我们可以知道什么是中断:计结合这个日常生活中的例子,我们可以知道什么是中断:计算机在执行程序的过程中,当出现算机在执行程序的过程中,当出现CPU以外的某种情况时,以外的某种情况时,由服务对象向由服务对象向CPU发出中断请求信号,要求发出中断请求信号,要求CPU暂时中断当暂时中断当前程序的执行而转去执行相应的处理程序,待处理程序执行前程序的执行而转去执行相应的处理程序,待处理程序执行完毕后,再继续执行原来被中断的程序。这种程序在执行过完毕后,再继续执行原来被中断的程序。这种程序在执行过程中由于某种原因而被中间打断的情况称为程中由于某种原因而被中间打断的情况称为“中断中断”,其运,其运行过程如图
5、行过程如图5-1所示。所示。图5-1 中断示意图 “中断中断”之后所执行的相应的处理程序通常称为中断服之后所执行的相应的处理程序通常称为中断服务或中断处理子程序,原来正常运行的程序称为主程序。主务或中断处理子程序,原来正常运行的程序称为主程序。主程序被断开的位置(或地址)称为程序被断开的位置(或地址)称为“断点断点”。引起中断的原。引起中断的原因或能发出中断申请的来源,称为因或能发出中断申请的来源,称为“中断源中断源”。调用中断服务程序的过程类似于调用子程序,其区别在于调调用中断服务程序的过程类似于调用子程序,其区别在于调用子程序在程序中是事先安排好的,而何时调用中断服务程用子程序在程序中是事
6、先安排好的,而何时调用中断服务程序事先却无法确定,因为序事先却无法确定,因为“中断中断”的发生是由外部因素决定的发生是由外部因素决定的,程序中无法事先安排调用指令,因此,调用中断服务程的,程序中无法事先安排调用指令,因此,调用中断服务程序的过程是由硬件自动完成的。序的过程是由硬件自动完成的。2中断功能中断功能(1)实现)实现CPU与外设的速度配合与外设的速度配合由于许多外部设备的速度较慢,无法与由于许多外部设备的速度较慢,无法与CPU直接进行直接的直接进行直接的同步数据交换,因此可通过中断方法来实现同步数据交换,因此可通过中断方法来实现CPU和外设的协和外设的协调工作,在调工作,在CPU执行程
7、序过程中,如需进行数据输入执行程序过程中,如需进行数据输入/输出输出时,可先启动外设,然后时,可先启动外设,然后CPU继续执行程序。与此同时,外继续执行程序。与此同时,外设在为数据输入设在为数据输入/输出传送做准备。当准备完成后,外设发出输出传送做准备。当准备完成后,外设发出中断请求,请求中断请求,请求CPU暂停正在执行的程序,转去完成数据的暂停正在执行的程序,转去完成数据的输入输入/输出传送。传送结束后,输出传送。传送结束后,CPU再返回继续执行原程序,再返回继续执行原程序,而外设则为下次数据传送做准备。这种以中断方法完成数据而外设则为下次数据传送做准备。这种以中断方法完成数据的输入的输入/
8、输出操作,从宏观上看,似乎是输出操作,从宏观上看,似乎是CPU与外设在同时与外设在同时工作。工作。采用中断技术,不但能够实现主机和一台外设并行工作,而采用中断技术,不但能够实现主机和一台外设并行工作,而且还可以实现主机和多台外设并行工作。这样不但提高了且还可以实现主机和多台外设并行工作。这样不但提高了CPU的利用率,而且也提高了数据的输入的利用率,而且也提高了数据的输入/输出效率。输出效率。(2)实现实时控制)实现实时控制实时处理是自动控制系统对计算机提出的要求。所谓实时处实时处理是自动控制系统对计算机提出的要求。所谓实时处理就是计算机能够及时完成被控对象随机提出的分析和计算理就是计算机能够及
9、时完成被控对象随机提出的分析和计算任务,以便使被控对象能保持在最佳工作状态,达到预定的任务,以便使被控对象能保持在最佳工作状态,达到预定的控制要求。在自动控制系统中,各控制参量可能随机地在任控制要求。在自动控制系统中,各控制参量可能随机地在任何时刻向计算机发出请求,要求进行某种处理。对此,何时刻向计算机发出请求,要求进行某种处理。对此,CPU必须作出快速响应和及时处理。这种实时处理功能只能靠中必须作出快速响应和及时处理。这种实时处理功能只能靠中断技术才能实现。断技术才能实现。(3)故障处理)故障处理针对难以预料的情况或故障,如掉电、存储出错、运算溢出针对难以预料的情况或故障,如掉电、存储出错、
10、运算溢出等,可通过中断系统由故障源向等,可通过中断系统由故障源向CPU发出中断请求,再由发出中断请求,再由CPU转到相应的故障处理程序进行处理。转到相应的故障处理程序进行处理。(4)实现分时操作)实现分时操作单片机应用系统通常需要控制多个外设同时工作。例如键盘、单片机应用系统通常需要控制多个外设同时工作。例如键盘、打印机、显示器、打印机、显示器、A/D转换器、转换器、D/A转换器等,这些设备工转换器等,这些设备工作有些是随机的,有些是定时的,对于一些定时工作的外设,作有些是随机的,有些是定时的,对于一些定时工作的外设,可以利用定时器,到一定时间产生中断,在中断服务程序中可以利用定时器,到一定时
11、间产生中断,在中断服务程序中控制这些外设。例如动态扫描显示,每隔一定的时间就更换控制这些外设。例如动态扫描显示,每隔一定的时间就更换显示子位码和字段码。显示子位码和字段码。此外,中断系统还能用于程序调试和多机连接等方面。因此,此外,中断系统还能用于程序调试和多机连接等方面。因此,中断系统是计算机系统中的重要组成部分。中断系统是计算机系统中的重要组成部分。5.1.2 5.1.2 中断源和中断控制器中断源和中断控制器1中断源中断源80C51单片机的中断源共有单片机的中断源共有5个,其中个,其中2个为外部中断源,个为外部中断源,3个个为内部中断源。为内部中断源。(1):外部中断):外部中断0,中断请
12、求信号由,中断请求信号由P3.2输入。输入。(2):外部中断):外部中断1,中断请求信号由,中断请求信号由P3.3输入。输入。(3)T0:定时:定时/计数器计数器0溢出中断,对外部脉冲计数,由溢出中断,对外部脉冲计数,由P3.4输入。输入。(4)T1:定时:定时/计数器计数器1溢出中断,对外部脉冲计数,由溢出中断,对外部脉冲计数,由P3.5输入。输入。(5)串行中断:包括串行接收中断)串行中断:包括串行接收中断RI和串行发送中断和串行发送中断TI。2中断控制寄存器中断控制寄存器80C51单片机中涉及中断控制的有单片机中涉及中断控制的有3个方面个方面4个特殊功能寄存个特殊功能寄存器。器。(1)中
13、断请求:定时和外中断控制寄存器)中断请求:定时和外中断控制寄存器TCON;串行控;串行控制寄存器制寄存器SCON。(2)中断允许控制寄存器)中断允许控制寄存器IE。(3)中断优先级控制寄存器)中断优先级控制寄存器IP。在整个中断系统结构中,这在整个中断系统结构中,这4个寄存器的作用如图个寄存器的作用如图5-2所示。所示。图5-2 中断系统结构具体说明如下。具体说明如下。(1)中断请求控制寄存器)中断请求控制寄存器、T0、T1中断请求标志存放在中断请求标志存放在TCON中,串行中断请求标中,串行中断请求标志存放在志存放在SCON中。中。TCON的结构、位名称、位地址和功能的结构、位名称、位地址和
14、功能如表如表5-1所示。所示。INT1INT1INT0INT0TCON位D7D6D5D4D3D2D1D0位名称TF1TR1TF0TR0IE1IT1IE0IT0位地址8FH8EH8DH8CH8BH8AH89H88H功能T1中断标志T1启动控制T0中断标志T0启动控制中断标志触发方式中断标志触发方式表5-1 TF1:定时器:定时器1的溢出中断标志。的溢出中断标志。T1被启动计数后,从初被启动计数后,从初值开始做加值开始做加1计数,计满溢出后由硬件置位计数,计满溢出后由硬件置位TF1,同时向,同时向CPU发出中断请求,此标志一直保持到发出中断请求,此标志一直保持到CPU响应中断后才由响应中断后才由硬
15、件自动清零。也可由软件查询该标志,并由软件清零。硬件自动清零。也可由软件查询该标志,并由软件清零。TR1:定时器:定时器1启动控制位。由软件置启动控制位。由软件置1或清零来启动或关或清零来启动或关闭定时器闭定时器1。具体在。具体在5.2.3节中具体介绍。节中具体介绍。TF0:定时器:定时器0溢出标志位。其功能及操作情况同溢出标志位。其功能及操作情况同TF1。TR0:定时器:定时器0启动控制位。其功能及操作同启动控制位。其功能及操作同TR1。将在。将在5.2.3节中介绍。节中介绍。IE1:中断标志。:中断标志。IE1=1,说明外部中断,说明外部中断1向向CPU申请中申请中断。断。IT1:中断触发
16、方式控制位。当:中断触发方式控制位。当IT1=0时,外部中断时,外部中断1控控制为电平触发方式。在这种方式下,若为制为电平触发方式。在这种方式下,若为P3.3低电平,则产低电平,则产生中断申请,随即使生中断申请,随即使IE1标志置位;因为在电平触发方式中,标志置位;因为在电平触发方式中,CPU响应中断后不能由硬件自动清除响应中断后不能由硬件自动清除IE1标志,也不能由软标志,也不能由软件清除件清除IE1标志,所以在中断返回之前必须撤销引脚上的低标志,所以在中断返回之前必须撤销引脚上的低电平,否则将再次中断导致出错。当电平,否则将再次中断导致出错。当IT1=1时,中断方式为时,中断方式为边沿触发
17、方式,当边沿触发方式,当P3.3引脚出现下降沿脉冲信号时产生中断引脚出现下降沿脉冲信号时产生中断申请,进入中断响应后,申请,进入中断响应后,IE1由硬件自动清零。由硬件自动清零。IE0:中断标志。:中断标志。IE0=1,其操作功能与,其操作功能与IE1相同。相同。IT0:中断触发方式控制位。其操作功能与:中断触发方式控制位。其操作功能与IT1相同。相同。SCON的结构、位名称、位地址和功能如表的结构、位名称、位地址和功能如表5-2所示。所示。表5-2 SCON的结构、位名称、位地址和功能 SCON位D7D6D5D4D3D2D1D0位名称TIRI位地址99H98H功能串行发送中断标志串行接收中断
18、标志 TI:串行口发送中断请求标志。:串行口发送中断请求标志。CPU将数据写入发送缓将数据写入发送缓冲器冲器SBUF时,就启动发送,每发送完一个串行帧,硬件将时,就启动发送,每发送完一个串行帧,硬件将使使TI置位。置位。RI:串行口接收中断请求标志。在串行口允许接收时,:串行口接收中断请求标志。在串行口允许接收时,每接收完一个串行帧,硬件将使每接收完一个串行帧,硬件将使RI置位。置位。CPU在响应串行发在响应串行发送、接收中断后,送、接收中断后,TI、RI不能自动清零,必须由软件清零,不能自动清零,必须由软件清零,具体将在第具体将在第6章介绍。章介绍。(2)中断允许控制寄存器)中断允许控制寄存
19、器计算机中断系统有两种不同类型的中断:一类称为非屏蔽中计算机中断系统有两种不同类型的中断:一类称为非屏蔽中断,另一类称为可屏蔽中断。对于非屏蔽中断,用户不能用断,另一类称为可屏蔽中断。对于非屏蔽中断,用户不能用软件的方法加以禁止,一旦有中断申请,软件的方法加以禁止,一旦有中断申请,CPU必须予以响应。必须予以响应。对于可屏蔽中断,用户可以通过软件方法来控制是否允许某对于可屏蔽中断,用户可以通过软件方法来控制是否允许某中断源的中断,允许中断称为中断开放,不允许中断称为中中断源的中断,允许中断称为中断开放,不允许中断称为中断屏蔽。断屏蔽。80C51系列单片机的系列单片机的5个中断源都是可屏蔽中断,
20、其个中断源都是可屏蔽中断,其中断系统内部设有一个专用寄存器中断系统内部设有一个专用寄存器IE,用于控制,用于控制CPU对各中对各中断源的开放或屏蔽。断源的开放或屏蔽。IE的结构、位名称、位地址和功能如表的结构、位名称、位地址和功能如表5-3所示。所示。表5-3 IE的结构、位名称、位地址和功能 开INT1开IE位D7D6D5D4D3D2D1D0位名称EAESET1EX1ET0EX0位地址AFHACHABHAAHA9HA8H功能总控位开串行口中断开T1中断中断开T0中断中断 EA:总中断允许控制位。:总中断允许控制位。EA=1,开放所有中断,各中,开放所有中断,各中断源的允许和禁止可通过相应的中
21、断允许位单独加以控制;断源的允许和禁止可通过相应的中断允许位单独加以控制;EA=0,禁止所有中断。,禁止所有中断。ES:串行口中断允许位。:串行口中断允许位。ES=1,允许串行口中断;,允许串行口中断;ES=0,禁止串行口中断。,禁止串行口中断。ET1:定时器:定时器1中断允许位。中断允许位。ET1=1,允许定时器,允许定时器1中断;中断;ET1=0,禁止定时器,禁止定时器1中断。中断。EX1:外部中断:外部中断1中断允许位。中断允许位。EX1=1,允许外部中断,允许外部中断1中断;中断;EX1=0,禁止外部中断,禁止外部中断1中断。中断。ET0:定时器:定时器0中断允许位。中断允许位。ET0
22、=1,允许定时器,允许定时器0中断;中断;ET0=0,禁止定时器,禁止定时器0中断。中断。EX0:外部中断:外部中断0中断允许位。中断允许位。EX0=1,允许外部中断,允许外部中断0中断;中断;EX0=0,禁止外部中断,禁止外部中断0中断。中断。8051单片机系统复位后,单片机系统复位后,IE中各中断允许位均被清零,即禁中各中断允许位均被清零,即禁止所有中断。止所有中断。开开T1中断过程是:首先开总中断(中断过程是:首先开总中断(SETB EA),然后,开),然后,开T1中断(中断(SETB ET1),这两条位操作指令也可合并为一条),这两条位操作指令也可合并为一条字节指令(字节指令(MOV
23、IE,#88H)。)。(3)中断优先级控制寄存器)中断优先级控制寄存器80C51有有5个中断源,划分为两个中断优先级:高优先级和低个中断源,划分为两个中断优先级:高优先级和低优先级。若优先级。若CPU在执行低优先级中断时,又发生高优先级中在执行低优先级中断时,又发生高优先级中断请求,则断请求,则CPU会中断正在执行的低优先级中断,转而响应会中断正在执行的低优先级中断,转而响应高优先级中断。中断优先级的设定是可编程的。控制高优先级中断。中断优先级的设定是可编程的。控制80C51中断优先级的寄存器为中断优先级的寄存器为IP,只要对,只要对IP各位设置各位设置“1”或或“0”,就可以对各中断源设置高
24、优先级或低优先级。就可以对各中断源设置高优先级或低优先级。IP的结构、位的结构、位名称、位地址和功能如表名称、位地址和功能如表5-4所示。所示。表5-4 IP的结构、位名称、位地址和功能 INT1IP位D7D6D5D4D3D2D1D0位名称PSPT1PX1PT0PX0位地址BCHBBHBAHB9HB8H中断源串行口T1T0 PS:串行口中断优先控制位。:串行口中断优先控制位。PS=1,设定串行口为高优,设定串行口为高优先级中断;先级中断;PS=0,设定串行口为低优先级中断。,设定串行口为低优先级中断。PT1:定时器:定时器T1中断优先控制位。中断优先控制位。PT1=1,设定定时器,设定定时器T
25、1中断为高优先级中断;中断为高优先级中断;PT1=0,设定定时器,设定定时器T1中断为低中断为低优先级中断。优先级中断。PX1:外部中断:外部中断1中断优先控制位。中断优先控制位。PX1=1,设定外部中,设定外部中断断1为高优先级中断;为高优先级中断;PX1=0,设定外部中断,设定外部中断1为低优先级为低优先级中断。中断。PT0:定时器:定时器T0中断优先控制位。中断优先控制位。PT0=1,设定定时器,设定定时器T0中断为高优先级中断;中断为高优先级中断;PT0=0,设定定时器,设定定时器T0中断为低中断为低优先级中断。优先级中断。PX0:外部中断:外部中断0中断优先控制位。中断优先控制位。P
26、X0=1,设定外部中,设定外部中断断0为高优先级中断;为高优先级中断;PX0=0,设定外部中断,设定外部中断0为低优先级为低优先级中断。中断。当系统复位后,当系统复位后,IP低低5位全部清零,所有中断源均设定为低位全部清零,所有中断源均设定为低优先级中断。优先级中断。如果几个同一优先级的中断源同时向如果几个同一优先级的中断源同时向CPU申请中断,申请中断,CPU就就通过内部硬件查询逻辑,按自然优先权顺序确定先响应哪个通过内部硬件查询逻辑,按自然优先权顺序确定先响应哪个中断请求。自然优先权由硬件形成,排列如下:中断请求。自然优先权由硬件形成,排列如下:中断源中断源同级自然优先权同级自然优先权外部
27、中断外部中断0高优先权高优先权 定时器定时器T0中断中断 外部中断外部中断1 定时器定时器T1中断中断 串行口中断串行口中断 低优先权低优先权 若只有一个中断源,则没有必要设置优先级。如果程序若只有一个中断源,则没有必要设置优先级。如果程序中没有中断优先级设置指令,则中断源按自然优先级进行排中没有中断优先级设置指令,则中断源按自然优先级进行排列。实际应用中常把列。实际应用中常把IP寄存器和自然优先权相结合,使中断寄存器和自然优先权相结合,使中断的使用更加方便、灵活。例如,要将的使用更加方便、灵活。例如,要将T0、串行口设置为高优、串行口设置为高优先级,其余中断源设置为低优先级,可执行下列指令:
28、先级,其余中断源设置为低优先级,可执行下列指令:SETB PT0SETB PS0或或MOV IP,#00010010B5.1.3 中断处理流程 中断处理过程可中断处理过程可分为中断请求、中断分为中断请求、中断响应、中断处理和中响应、中断处理和中断返回三个阶段。不断返回三个阶段。不同的计算机因其中断同的计算机因其中断系统的硬件结构不同,系统的硬件结构不同,因此,中断响应的方因此,中断响应的方式也有所不同。这里式也有所不同。这里仅以仅以8051单片机为例单片机为例进行叙述。其主要内进行叙述。其主要内容及一般顺序如图容及一般顺序如图5-3所示。所示。图5-3 中断流程图1中断请求中断请求中断源发出中
29、断请求信号,相应的中断请求标志位(在中断中断源发出中断请求信号,相应的中断请求标志位(在中断允许控制寄存器允许控制寄存器TCON中)置中)置“1”。CPU将不断地及时查询将不断地及时查询这些中断请求标志,一旦查询到某个中断请求标志置位,这些中断请求标志,一旦查询到某个中断请求标志置位,CPU就会响应该中断源中断。就会响应该中断源中断。2中断响应中断响应(1)中断响应条件)中断响应条件CPU响应中断的条件有:响应中断的条件有:有中断源发出中断请求。有中断源发出中断请求。中断总允许位中断总允许位EA=1。申请中断的中断源允许。申请中断的中断源允许。满足以上基本条件,满足以上基本条件,CPU一般会响
30、应中断,但若有下列任何一般会响应中断,但若有下列任何一种情况存在,则中断响应会受到阻断。一种情况存在,则中断响应会受到阻断。CPU正在响应同级或高优先级的中断。正在响应同级或高优先级的中断。当前指令未执行完。当前指令未执行完。正在执行正在执行RETI中断返回指令或访问专用寄存器中断返回指令或访问专用寄存器IE和和IP的的指令。指令。若存在上述任何一种情况,中断查询结果即被取消,若存在上述任何一种情况,中断查询结果即被取消,CPU不不响应中断请求而在下一机器周期继续查询,否则,响应中断请求而在下一机器周期继续查询,否则,CPU在下在下一机器周期响应中断。一机器周期响应中断。(2)中断响应过程)中
31、断响应过程单片机一旦响应中断请求,就由硬件完成以下功能:单片机一旦响应中断请求,就由硬件完成以下功能:根据响应的中断源的中断优先级,使相应的优先级状态触根据响应的中断源的中断优先级,使相应的优先级状态触发器置发器置“1”,关闭同级和低级中断。,关闭同级和低级中断。执行硬件中断服务子程序调用,并把当前程序计数器执行硬件中断服务子程序调用,并把当前程序计数器PC的内容压入堆栈。的内容压入堆栈。清除相应的中断请求标志位(串行口中断请求标志清除相应的中断请求标志位(串行口中断请求标志 RI和和 TI除外)。除外)。把被响应的中断源所对应的中断服务程序的入口地址(中把被响应的中断源所对应的中断服务程序的
32、入口地址(中断矢量)送入断矢量)送入PC,从而转入相应的中断服务程序。,从而转入相应的中断服务程序。80C51五个中断入口地址如下。五个中断入口地址如下。:0003HT0:000BH:0013H T1:001BH串行口:串行口:0023H中断入口地址是固定的,其排列顺序按照自然优先权排列,中断入口地址是固定的,其排列顺序按照自然优先权排列,相互之间间隔相互之间间隔8B。一般来说,。一般来说,8B空间安排不下一个中断服空间安排不下一个中断服务程序,但可安排一条转移指令,跳转到其他合适的区域编务程序,但可安排一条转移指令,跳转到其他合适的区域编写真正的中断服务程序。写真正的中断服务程序。3中断服务
33、程序中断服务程序中断服务程序一般包含以下几个部分。中断服务程序一般包含以下几个部分。(1)现场保护和现场恢复)现场保护和现场恢复为了使中断服务程序的执行不破坏为了使中断服务程序的执行不破坏CPU中寄存器或存储单元中寄存器或存储单元的原有内容,以免在中断返回后影响主程序的运行,应该把的原有内容,以免在中断返回后影响主程序的运行,应该把CPU中有关寄存器或存储单元的内容推入堆栈中保护起来,中有关寄存器或存储单元的内容推入堆栈中保护起来,这就是所谓的现场保护,通常是指这就是所谓的现场保护,通常是指ACC、PSW和和DPTR等。等。中断服务结束后,在返回主程序前,须把保存的现场从堆栈中断服务结束后,在
34、返回主程序前,须把保存的现场从堆栈中弹出,以恢复寄存器存储单元的原有内容,这就是所谓现中弹出,以恢复寄存器存储单元的原有内容,这就是所谓现场恢复。对于场恢复。对于80C51,利用堆栈保护和恢复现场需要遵循先,利用堆栈保护和恢复现场需要遵循先进后出、后进先出的原则。进后出、后进先出的原则。(2)开中断和关中断)开中断和关中断在中断处理进行的过程中,可能又有新的中断请求到来,如在中断处理进行的过程中,可能又有新的中断请求到来,如果禁止被中断的,可以先关闭中断系统,待任务执行完后再果禁止被中断的,可以先关闭中断系统,待任务执行完后再打开中断系统。当然,如系统本身需要中断嵌套,则不能将打开中断系统。当
35、然,如系统本身需要中断嵌套,则不能将中断系统关闭,所有中断的发生按照系统中断系统关闭,所有中断的发生按照系统“优先级优先级”的设置的设置自动自动“决策决策”行事。行事。(3)中断服务程序主体)中断服务程序主体中断服务程序主体是进行中断处理的具体内容,以子程序的中断服务程序主体是进行中断处理的具体内容,以子程序的形式存在,任何中断发生并被响应后,程序将自动进入相关形式存在,任何中断发生并被响应后,程序将自动进入相关的入口地址,执行中断服务程序。的入口地址,执行中断服务程序。(4)中断返回)中断返回中断返回是把程序运行从中断服务程序转回到被中断的主程中断返回是把程序运行从中断服务程序转回到被中断的
36、主程序上去,返回是通过一条专用的中断返回指令(序上去,返回是通过一条专用的中断返回指令(RETI)完)完成的,因此这条指令必然是中断服务程序的最后一条指令。成的,因此这条指令必然是中断服务程序的最后一条指令。当当CPU执行执行RETI指令后,自动完成下列操作:指令后,自动完成下列操作:恢复断点地址。将原来压入堆栈的恢复断点地址。将原来压入堆栈的PC断点地址从堆栈中断点地址从堆栈中弹出,送回弹出,送回PC。这样。这样CPU就返回到原断点处,继续执行被就返回到原断点处,继续执行被中断的原程序。中断的原程序。开放同级中断,以便允许同级中断源请求中断。开放同级中断,以便允许同级中断源请求中断。以上响应
37、过程的大部分操作是以上响应过程的大部分操作是CPU自动完成的,用户只需要自动完成的,用户只需要了解基本原理就可以,需要做的事情是编制中断服务程序,了解基本原理就可以,需要做的事情是编制中断服务程序,并在此之前完成中断初始化。并在此之前完成中断初始化。4中断请求的撤除中断请求的撤除中断源发出中断请求,相应中断请求标志置中断源发出中断请求,相应中断请求标志置“1”。CPU响应响应中断后,必须清除中断请求中断后,必须清除中断请求“1”标志;否则中断响应返回后,标志;否则中断响应返回后,将再次进入该中断,引起死循环出错。如何撤除中断请求标将再次进入该中断,引起死循环出错。如何撤除中断请求标志的说明如下
38、:志的说明如下:(1)对于定时器)对于定时器0或或1溢出中断,溢出中断,CPU在响应中断后即由硬在响应中断后即由硬件自动清除其中断标志位件自动清除其中断标志位TF0或或TF1,用户无须采取其他措,用户无须采取其他措施。施。(2)对于串行口中断,)对于串行口中断,CPU在响应中断后,硬件不能自动在响应中断后,硬件不能自动清除中断请求标志位清除中断请求标志位TI、RI,用户必须在中断服务程序中用,用户必须在中断服务程序中用软件将其清除(如软件将其清除(如CLR RI)。)。(3)对于外中断、,若采用边沿触发方式,)对于外中断、,若采用边沿触发方式,CPU响应中断响应中断时,也由硬件自动清除响应的中
39、断请求标志时,也由硬件自动清除响应的中断请求标志IE0或或IE1。(4)对于外中断、,若采用电平触发方式,)对于外中断、,若采用电平触发方式,CPU响应中断响应中断时,虽然也用硬件自动清除响应的中断请求标志时,虽然也用硬件自动清除响应的中断请求标志IE0或或IE1,但是相应的引脚(但是相应的引脚(P3.2或或P3.3)的低电平信号若继续保持下)的低电平信号若继续保持下去,中断请求标志去,中断请求标志IE0或或IE1就又会自动置就又会自动置“1”,也会发生重,也会发生重复响应中断情况。所以,在复响应中断情况。所以,在CPU响应中断后,应立即撤除引响应中断后,应立即撤除引脚上的低电平。而脚上的低电
40、平。而CPU又不能控制引脚的信号,因此,只有又不能控制引脚的信号,因此,只有通过硬件再配合相应软件才能解决这个问题。图通过硬件再配合相应软件才能解决这个问题。图5-4是可行是可行方案之一。方案之一。图5-4 撤除外部中断请求的电路由图由图5-4可知,外部中断请求信号不直接加引脚上,而是加可知,外部中断请求信号不直接加引脚上,而是加在在D触发器的触发器的CLK端。由于端。由于D端接地,当外部中断请求的正端接地,当外部中断请求的正脉冲信号出现在脉冲信号出现在CLK端时,端时,Q端输出为端输出为0,或为低电平,外,或为低电平,外部中断向单片机发出中断请求。利用部中断向单片机发出中断请求。利用P1口的
41、口的P1.0作为应答线,作为应答线,当当CPU响应中断后,可在中断服务程序中采用两条指令:响应中断后,可在中断服务程序中采用两条指令:ANLP1,#0FEHORLP1,#01H来撤除外部中断请求。第来撤除外部中断请求。第1条指令使条指令使P1.0为为0,因,因P1.0与与D触触发器的异步置发器的异步置1端端SD相连,相连,Q端输出为端输出为1,从而撤除中断请求。,从而撤除中断请求。第第2条指令使条指令使P1.0变为变为1,=1,Q继续受继续受CLK控制,即新的控制,即新的外部中断请求信号又能向单片机申请中断。第外部中断请求信号又能向单片机申请中断。第2条指令是必条指令是必不可少的,否则,将无法
42、再次形成新的外部中断。不可少的,否则,将无法再次形成新的外部中断。5.1.4 5.1.4 中断优先控制和中断嵌套中断优先控制和中断嵌套1中断优先控制中断优先控制80C51中断优先控制首先根据中断优先级,此外,还规定中断优先控制首先根据中断优先级,此外,还规定了同一中断优先级之间的中断优先权。其从高到低的顺序了同一中断优先级之间的中断优先权。其从高到低的顺序为:、为:、T0、T1、串行口。、串行口。中断优先级是可编程的,而中断优先权是固定的,不能设中断优先级是可编程的,而中断优先权是固定的,不能设置,仅用于同级中断源同时请求中断时的优先次序。因此置,仅用于同级中断源同时请求中断时的优先次序。因此
43、80C51中断优先控制的基本原则是:中断优先控制的基本原则是:(1)高优先级中断可以中断正在响应的低优先级中断,)高优先级中断可以中断正在响应的低优先级中断,反之则不能。反之则不能。(2)同优先级中断不能互相中断。)同优先级中断不能互相中断。(3)同一中断优先级中,若有多个中断源同时请求中断,)同一中断优先级中,若有多个中断源同时请求中断,CPU将先响应优先权高的中断,后响应优先权低的中断。将先响应优先权高的中断,后响应优先权低的中断。2中断嵌套中断嵌套当当CPU正在执行某个中断服务程序时,如果发生更高一级的中正在执行某个中断服务程序时,如果发生更高一级的中断源请求中断,那么断源请求中断,那么
44、CPU可以再可以再“中断中断”正在执行的低优先级正在执行的低优先级中断服务程序,转而响应更高一级的中断,这就是中断嵌套。中断服务程序,转而响应更高一级的中断,这就是中断嵌套。其示意图如图其示意图如图5-5所示。图所示。图5-5 中断嵌套示意图中断嵌套示意图中断嵌套只能高优先级中断嵌套只能高优先级“中断中断”低优先级,低优先级不能低优先级,低优先级不能“中中断断”高优先级,同一优先级也不能相互高优先级,同一优先级也不能相互“中断中断”。中断嵌套结构类似于调用子程序嵌套,不同的是:中断嵌套结构类似于调用子程序嵌套,不同的是:(1)子程序嵌套是在程序中事先安排好的;中断嵌套是随机发)子程序嵌套是在程
45、序中事先安排好的;中断嵌套是随机发生的。生的。(2)子程序嵌套无次序限制,中断嵌套只允许高优先级)子程序嵌套无次序限制,中断嵌套只允许高优先级“中断中断”低优先级。低优先级。图5-5 中断嵌套示意图中断系统的应用要解决的问题首先是编制中断应用程序,其中断系统的应用要解决的问题首先是编制中断应用程序,其次是熟悉中断过程。编制应用程序包括两大部分内容:中断次是熟悉中断过程。编制应用程序包括两大部分内容:中断初始化和中断服务子程序。初始化和中断服务子程序。1中断初始化中断初始化(1)设置堆栈指针)设置堆栈指针SP,根据要保护数据的个数,设置堆栈,根据要保护数据的个数,设置堆栈深度。深度。深度要求不高
46、并且不用寄存器深度要求不高并且不用寄存器13组时,可维持复位时的组时,可维持复位时的状态:状态:SP=07H,深度为,深度为24B(20H2FH为位寻址区)。为位寻址区)。要求有一定深度时,可设置要求有一定深度时,可设置SP=60H或或50H,深度分别为,深度分别为32B和和48B。一般建议将一般建议将SP改为改为60H或或50H。(2)定义中断优先级。根据中断源的紧急程度,通过设置)定义中断优先级。根据中断源的紧急程度,通过设置IP寄存器,将中断优先级划分为高优先级和低优先级。寄存器,将中断优先级划分为高优先级和低优先级。5.1.5 5.1.5 中断系统的应用中断系统的应用(3)定义外中断触
47、发方式。外中断触发一般宜采用边沿触)定义外中断触发方式。外中断触发一般宜采用边沿触发方式,若必须采用电平触发方式时,应在硬件电路上和中发方式,若必须采用电平触发方式时,应在硬件电路上和中断服务程序中采取撤除中断请求信号的措施。断服务程序中采取撤除中断请求信号的措施。(4)开放中断。通过设置)开放中断。通过设置IE寄存器,开放用户所需要打开寄存器,开放用户所需要打开的中断。对的中断。对IE操作可以采用字节操作,也可以采用位操作,操作可以采用字节操作,也可以采用位操作,如:如:MOV IE,#81H或或 SETB EA,SETB EX0。(5)安排好等待中断或中断发生前主程序应完成的操作内)安排好
48、等待中断或中断发生前主程序应完成的操作内容,如内存单元的初始化等。容,如内存单元的初始化等。2中断服务子程序中断服务子程序中断服务子程序内容包括:中断服务子程序内容包括:(1)在中断服务入口地址设置一条跳转指令,转移到中断)在中断服务入口地址设置一条跳转指令,转移到中断服务程序的实际入口处。服务程序的实际入口处。(2)根据需要保护现场。)根据需要保护现场。(3)中断源请求中断服务要求的操作。)中断源请求中断服务要求的操作。(4)恢复现场。与保护现场相对应,注意遵循先进后出、)恢复现场。与保护现场相对应,注意遵循先进后出、后进先出操作原则。后进先出操作原则。(5)中断返回,最后一条指令必须是)中
49、断返回,最后一条指令必须是RETI。例如,现有外部中断例如,现有外部中断1提出申请,且主程序中有提出申请,且主程序中有R0、DPTR、累加器累加器A需保护,则编制程序应为:需保护,则编制程序应为:ORG0000H AJMPMAINORG0013HLJMPZD1ORG0100HMAIN:;主程序;主程序ORG1000H ZD1:PUSHACC;中断服务程序;中断服务程序PUSHDPHPUSHDPLPUSH00H;处理程序;处理程序POP00H POPDPL POPDPH POPACC RETI编程中应注意:编程中应注意:(1)在)在0000H处放一条跳转到主程序的跳转指令,这是因为处放一条跳转到
50、主程序的跳转指令,这是因为80C51单片机复位后,单片机复位后,PC的内容变为的内容变为0000H,程序从,程序从0000H 开始执行,紧接着开始执行,紧接着 0013H是中断程序入口地址,故在此中间是中断程序入口地址,故在此中间只能插入一条转移指令。只能插入一条转移指令。(2)响应中断时,程序自动转入)响应中断时,程序自动转入0013H这个入口地址,执行这个入口地址,执行“LJMP ZD1”后将程序引导到真正的服务程序。后将程序引导到真正的服务程序。(3)在中断服务程序的末尾,必须安排一条中断返回指令)在中断服务程序的末尾,必须安排一条中断返回指令RETI,使程序自动返回主程序。,使程序自动