1、第第5 5章章 AT89S51AT89S51单片机的单片机的 中断系统中断系统1内容概要内容概要n中断系统的中断系统的硬件结构硬件结构和和工作原理工作原理。n有关的特殊功能寄存器有关的特殊功能寄存器及中断系统的应用特性及中断系统的应用特性n中断系统的中断系统的初始化编程初始化编程以及以及中断服务子程序设计中断服务子程序设计。25.1 AT89S515.1 AT89S51中断技术概述中断技术概述 中断技术主要用于中断技术主要用于实时监测与控制实时监测与控制,要求单片机,要求单片机能能快速快速响响应中断请求源提出的服务请求应中断请求源提出的服务请求,并及时处理。,并及时处理。当请求源当请求源发出中
2、断请求发出中断请求时,如果中断请求被允许,单片机时,如果中断请求被允许,单片机暂时中止当前正在执行的主程序,转到中断服务处理程序处暂时中止当前正在执行的主程序,转到中断服务处理程序处理中断服务请求。理中断服务请求。中断服务程序处理完中断请求后,再回到原来被中止的程中断服务程序处理完中断请求后,再回到原来被中止的程序之处(断点),继续执行被中断的主程序。序之处(断点),继续执行被中断的主程序。图图5-15-1为整个中断响应和处理过程。为整个中断响应和处理过程。34图5-1 中断响应和处理过程如果单片机没有中断系统如果单片机没有中断系统,大量时间可能会浪费在查询是否,大量时间可能会浪费在查询是否有
3、服务请求的查询操作上。有服务请求的查询操作上。中断技术完全中断技术完全消除单片机在查询方式中的等待消除单片机在查询方式中的等待,大大提高单,大大提高单片机片机工作效率工作效率和和实时性实时性。5.2 AT89S515.2 AT89S51中断系统结构中断系统结构 中断系统结构见中断系统结构见图图5-25-2。5 5个个中断请求源(简称中断源),中断请求源(简称中断源),两个中断优先级两个中断优先级,可实现,可实现两级中断服务程序嵌套两级中断服务程序嵌套。每一中断源可用软件独立控制为每一中断源可用软件独立控制为允许中断允许中断或或关中断关中断状态,状态,中中断优先级断优先级均可用软件来设置。均可用
4、软件来设置。55.2.1 中断请求源中断请求源由图5-2,中断系统共有5个中断请求源:(1)INT0*外部中断请求0,中断请求信号由INT0*引脚输入,请求标志为IE0。(2)INT1*外部中断请求1,中断请求信号由INT1*引脚输入,请求标志为IE1。(3)定时器定时器/计数器计数器T0计数溢出发出的中断请求,请求标志为TF0。(4)定时器定时器/计数器计数器T1计数溢出发出的中断请求,请求标志为TF1。(5)串行口串行口中断请求,请求标志为发送中断TI或接收中断RI。67图图5-2 5-2 AT89S51AT89S51的中断系统结构示意图的中断系统结构示意图5.2.2 中断请求标志寄存器中
5、断请求标志寄存器5个请求源个请求源中断请求标志中断请求标志分别由分别由TCON和和SCON的相应位锁的相应位锁存。存。1.TCON寄存器寄存器为为定时器定时器/计数器计数器的控制寄存器,字节地址的控制寄存器,字节地址88H,可,可位寻址位寻址。TCON的格式如的格式如图图5-3所示。所示。8图图5-3 5-3 特殊功能寄存器特殊功能寄存器TCONTCON的格式的格式TCON各位功能如下:各位功能如下:(1)TF1定时器定时器/计数器计数器T1的溢出中断请求标志位。的溢出中断请求标志位。当当T1计数产生溢出时,由硬件使计数产生溢出时,由硬件使TF1置置“1”,向,向CPU申请申请中断。中断。CP
6、U响应响应TF1中断时,中断时,TF1标志标志由硬件自动清由硬件自动清“0”,也可由软件清也可由软件清“0”。(2)TF0定时器定时器/计数器计数器T0的溢出中断请求标志位,功能的溢出中断请求标志位,功能与与TF1类似。类似。(3)IE1外部中断请求外部中断请求1的中断请求标志位。的中断请求标志位。(4)IE0外部中断请求外部中断请求0请求标志位,功能与请求标志位,功能与IE1类似。类似。(5)IT1选择外部中断请求选择外部中断请求1为跳沿触发还是电平触发。为跳沿触发还是电平触发。9IT1=0,电平触发,电平触发方式,引脚方式,引脚INT1*低电平低电平有效,并把有效,并把IE1置置“1”。转
7、向中断服务程序时,由硬件。转向中断服务程序时,由硬件自动清自动清“0”IE1。IT1=1,跳沿触发跳沿触发方式,加到引脚方式,加到引脚INT1*负跳变有效负跳变有效,并把,并把IE1置置“1”。转向中断服务程序时,由硬件。转向中断服务程序时,由硬件自动自动清清“0”IE1。(6)IT0选择外部中断请求选择外部中断请求0为跳沿触发方式还是电平触为跳沿触发方式还是电平触发方式,其意义与发方式,其意义与IT1类似。类似。复位复位后,后,TCON被清被清“0”,5个中断源的请求标志均为个中断源的请求标志均为0。TR1(D6位)、位)、TR0(D4位)位)这这2位位与中断系统无关与中断系统无关,将,将在
8、定时器在定时器/计数器中介绍。计数器中介绍。102.SCON寄存器寄存器串行口控制寄存器,字节地址为98H,可位寻址可位寻址。低二位锁存串行口的发送中断和接收中断的中断请求标志TI和RI,格式如图图5-4。图图5-4 SCON中的中断请求标志位各位功能:(1)TI串行口的发送中断请求标志位。每发送完一帧串行数据后,TI自动置“1”。TI必须由软件清必须由软件清“0”。11(2)RI串行口接收中断请求标志位。串行口接收完一个串行数据帧,硬件自动使RI中断请求标志置“1”。必须在中断服务程序中用指令对RI清“0”。5.3 中断允许控制中断允许控制与与中断优先级的控制中断优先级的控制中断允许中断允许
9、控制由IE控制。中断优先级中断优先级控制由IP控制。5.3.1 中断允许寄存器中断允许寄存器IE中断允许寄存器IE控制对各中断源的开放或屏蔽。IE字节地址为A8H,可位寻址可位寻址,格式如图图5-5。12 图5-5 中断允许寄存器IE的格式IE对中断的开放和关闭两级控制两级控制。总中断开关控制位EA(IE.7位),0:所有中断请求被屏蔽;1:总中断允许,但5个中断源的中断请求是否允许,还要由IE中的低中的低5位位决定(图5-5)。13IE各位功能如下:各位功能如下:(1)EA中断允许总开关控制位。中断允许总开关控制位。0:所有的中断请求被屏蔽。:所有的中断请求被屏蔽。1:所有的中断请求被开放。
10、:所有的中断请求被开放。(2)ES串行口中断允许位。串行口中断允许位。0:禁止串行口中断。:禁止串行口中断。1:允许串行口中断。:允许串行口中断。(3)ET1定时器定时器/计数器计数器T1的溢出中断允许位。的溢出中断允许位。0:禁止:禁止T1溢出中断。溢出中断。1:允许:允许T1溢出中断。溢出中断。(4)EX1外部中断外部中断1中断允许位。中断允许位。14 0:禁止外部中断:禁止外部中断1中断。中断。1:允许外部中断:允许外部中断1中断。中断。(5)ET0定时器定时器/计数器计数器T0的溢出中断允许位。的溢出中断允许位。0:禁止:禁止T0溢出中断。溢出中断。1:允许:允许T0溢出中断。溢出中断
11、。(6)EX0外部中断外部中断0中断允许位。中断允许位。0:禁止外部中断:禁止外部中断0中断。中断。1:允许外部中断:允许外部中断0中断。中断。单片机单片机复位后复位后,IE被清被清“0”,所有中断请求被禁止所有中断请求被禁止。IE各各位可用指令置位可用指令置“1”或清或清“0”。若使某一个中断源被允许中断若使某一个中断源被允许中断,除了,除了IE相应位被置相应位被置“1”外,外,还必须使还必须使EA位置位置“1”。改变改变IE,可用,可用位操作指令位操作指令来实现(即来实现(即SETB bit;CLR bit),也可用),也可用字节操作指令字节操作指令实现。实现。16【例例5-1】若允许片内
12、2个定时器/计数器中断,并禁止其他中断源的中断请求,请编写设置IE的相应程序段。(1)用位操作指令)用位操作指令CLRES;禁止串行口中断 CLREX0;禁止外部中断0中断CLREX1;禁止外部中断1中断SETBET0;允许定时器/计数器T0中断SETBET1;允许定时器/计数器T1中断SETBEA;总中断开关位开放(2)用字节操作指令)用字节操作指令MOV IE,#8AH上述两段程序对IE的设置是相同的。175.3.2 中断优先级寄存器中断优先级寄存器IP中断请求源有两个中断优先级两个中断优先级,由软件分别设置为高高优先优先级中断级中断或低低优先级中断优先级中断。可实现:两级中断嵌套两级中断
13、嵌套两级中断嵌套两级中断嵌套的过程过程如图图5-6所示。18 图5-6 两级中断嵌套的过程19各中断源的中断优先级关系,可归纳为两条基本规则两条基本规则:(1)低优先级可被高优先级中断,高优先级不能低优先)低优先级可被高优先级中断,高优先级不能低优先级中断。级中断。(2)同级不能中断同级)同级不能中断同级。中断优先级寄存器IP,其字节地址为字节地址为B8H,可位寻址。只要用程序改变其内容,可进行各中断源中断优先级设置中断优先级设置,IP寄存器格式见图5-7。20 图5-7 IP寄存器的格式中断优先级寄存器IP各位的含义各位的含义如下:(1)PS串行口中断优先级控制位 1:高优先级0:低优先级(
14、2)PT1定时器T1中断优先级控制位 1:高优先级0:低优先级21(3)PX1外部中断1中断优先级控制位1:高优先级0:低优先级(4)PT0定时器T0中断优先级控制位1:高优先级0:低优先级(5)PX0外部中断0中断优先级控制位1:高优先级0:低优先级用位操作指令或字节操作指令来改变中断优先级。AT89S51复位复位后,IP内容为0,各个中断源均为低优先均为低优先级级中断。22中断系统有2个不可寻址的优先级激活触发器。一个指示某高优先级一个指示某高优先级的中断正在执行;另一个触发器指另一个触发器指示某低优先级示某低优先级的中断正在执行,所有同级的中断都被阻止,但不阻断高优先级的中断请求。在同时
15、收到几个同优先级的中断请求几个同优先级的中断请求时,哪一个中断请求能优先得到响应,取决于内部的查询顺序。取决于内部的查询顺序。这相当于同时存在一个辅助优先级结构,查询顺序如表5-1。23 表表5-1 同级中断的查询次序同级中断的查询次序由此可见,各中断源在相同优先级条件下,外部中断外部中断0优先权最高最高,串行口串行口优先权最低最低。24【例例5-25-2】IP寄存器初始化,两个外中断两个外中断请求为高优先级,其他中断请求为低优先级。(1)用位操作指令)用位操作指令SETB PX0SETB PX0;外中断;外中断0 0设置为高优先级设置为高优先级SETB PX1SETB PX1;外中断;外中断
16、1 1设置为高优先级设置为高优先级CLR PSCLR PS;串行口设置为低优先级;串行口设置为低优先级CLR PT0CLR PT0;定时器;定时器/计数器计数器T0T0为低优先级为低优先级CLR PT1CLR PT1;定时器;定时器/计数器计数器T1T1为低优先级为低优先级 (2)用字节操作指令)用字节操作指令MOV IPMOV IP,#05H#05H255.4 响应中断请求的条件响应中断请求的条件中断请求被响应,须满足以下必要条件:须满足以下必要条件:(1)总中断允许总中断允许,即IE寄存器中的EA=1。(2)该中断源发出中断请求发出中断请求,即对应中断请求标志为对应中断请求标志为“1”。(
17、3)该中断源中断允许位中断允许位=1,即该中断被允许。(4)无同级无同级或更高级中断更高级中断正在被服务。当CPU查询到有效中断请求时,在满足上述条件时,紧接着就进行中断响应。26中断响应的过程:中断响应的过程:首先硬件自动生成自动生成一条长调用指令一条长调用指令“LCALL addr16”。就是程序存储区中相应的中断入口地址相应的中断入口地址。例如,例如,对于外部中断1响应,自动生成的长调用指令为LCALL 0013H首先将程序计数器PC的内容的内容压入堆栈压入堆栈以保护断点,再将中中断入口地址装入断入口地址装入PC,使程序转向相应中断请求的中断入口。各中断源服务程序的入口地址入口地址:27
18、表表5-25-2 中断中断入口地址表入口地址表 中断源中断源 入口地址入口地址 外部中断外部中断0 0 00030003H H 定时器定时器/计数器计数器T0 T0 000BH000BH外部中断外部中断1 1 00130013H H 定时器定时器/计数器计数器T1T1001BH001BH串行口中断串行口中断00230023H H两入口间只相隔两入口间只相隔8字节字节,难以安放一个完整的中断服务,难以安放一个完整的中断服务程序。因此,程序。因此,通常总是在中断入口地址处放置一条无条件转通常总是在中断入口地址处放置一条无条件转移指令移指令,使程序执行转向中断服务程序入口。,使程序执行转向中断服务程
19、序入口。28遇下列遇下列三种情况三种情况之一,中断响应被封锁:之一,中断响应被封锁:(1)CPU正在处理同级或更高优先级正在处理同级或更高优先级的中断。的中断。(2)所查询的机器周期)所查询的机器周期不是当前正在执行指令的最后一不是当前正在执行指令的最后一个机器周期个机器周期。只有在指令执行完后,才响应中断,确保当前。只有在指令执行完后,才响应中断,确保当前指令执行的完整性指令执行的完整性。(3)正在执行)正在执行RETI或是或是访问访问IE或或IP的指令。按中断系统的指令。按中断系统规定,在执行完这些指令后,需再执行完一条指令,才能响规定,在执行完这些指令后,需再执行完一条指令,才能响应新的
20、中断请求。应新的中断请求。如存在上述如存在上述3种情况之一,种情况之一,CPU将丢弃中断查询结果,不将丢弃中断查询结果,不能对中断进行响应。能对中断进行响应。295.5 外部中断的响应时间外部中断的响应时间使用使用外部中断外部中断时,需考虑时,需考虑外部中断请求到转向中断入口地外部中断请求到转向中断入口地址所需的时间址所需的时间。外中断外中断最短最短响应时间为响应时间为3个个机器周期机器周期。其中中断请求。其中中断请求标志位标志位查询占查询占1个机器周期个机器周期,也,也恰好是指令最后一个机器周期。恰好是指令最后一个机器周期。该机该机器周期结束后,中断即被响应,器周期结束后,中断即被响应,CP
21、U接着执行一条接着执行一条硬件子程硬件子程序调用指令序调用指令LCALL到相中断服务程序入口,到相中断服务程序入口,需需2个机器周期个机器周期。外部中断响应的外部中断响应的最长最长时间为时间为8个机器周期。个机器周期。在在CPU进行中断进行中断标志查询时,刚好标志查询时,刚好才开始执行才开始执行RETI或或访问访问IE或或IP的指令的指令,需,需执行完指令再继续执行一条指令后,才响应中断。执行完指令再继续执行一条指令后,才响应中断。30执行执行RETI或访问或访问IE或或IP指令,最长需要指令,最长需要2个机器周期个机器周期。接着再执行一条指令,最长指令(接着再执行一条指令,最长指令(乘指令乘
22、指令MUL和和除指令除指令DIV)来算,也只有)来算,也只有4个个机器周期机器周期。再加上硬件子程序调用指。再加上硬件子程序调用指令令LCALL的执行,需要的执行,需要2个个机器周期机器周期,所以,外部中断响应,所以,外部中断响应的的最长时间为最长时间为8个个机器周期机器周期。如已在如已在处理同级处理同级或或更高级中断更高级中断,响应时间无法计算。,响应时间无法计算。这样,在一个这样,在一个单一中断单一中断的系统里,的系统里,AT89S51对外部中断对外部中断请求的响应时间总是在请求的响应时间总是在38个机器周期个机器周期之间。之间。315.6 外部中断的触发方式选择外部中断的触发方式选择2种
23、触发方式:种触发方式:电平触发电平触发和和跳沿触发跳沿触发。5.6.1 电平触发方式电平触发方式外中断请求触发器外中断请求触发器状态状态随随CPU在每个机器周期采样到的外在每个机器周期采样到的外中断输入引脚中断输入引脚INTx*电平变化而变化。电平变化而变化。在在中断返回前中断返回前,外中断请求输入必须无效外中断请求输入必须无效(即外部中断请(即外部中断请求输入已由低电平变为高电平),否则会求输入已由低电平变为高电平),否则会再次响应中断。再次响应中断。本方式本方式适于适于外中断外中断以低电平输入以低电平输入且中断服务程序能且中断服务程序能清除外清除外部中断请求源部中断请求源(即外中断输入电平
24、又变为高电平)的情况。(即外中断输入电平又变为高电平)的情况。325.6.2 跳沿触发方式跳沿触发方式外中断申请触发器能外中断申请触发器能锁存外部中断输入线上的锁存外部中断输入线上的负跳变负跳变。即。即使不响应,中断请求标志不丢失。使不响应,中断请求标志不丢失。相继连续两次采样,相继连续两次采样,一个机器周期为高,下一机器周期采一个机器周期为高,下一机器周期采样为低,则中断申请触发器置样为低,则中断申请触发器置“1”,直到,直到CPU响应此中断响应此中断时,才清时,才清“0”。输入的输入的负脉冲宽度至少保持负脉冲宽度至少保持12个时钟周期个时钟周期,才能被采样到。,才能被采样到。适于以负脉冲形
25、式输入适于以负脉冲形式输入的外部中断请求。的外部中断请求。5.7 中断请求的撤销中断请求的撤销某中断请求被响应后,存在一个中断请求如何撤销问题。某中断请求被响应后,存在一个中断请求如何撤销问题。331定时器定时器/计数器中断请求的撤销计数器中断请求的撤销硬件会自动把中断请求标志位(硬件会自动把中断请求标志位(TF0或或TF1)清)清“0”,自自动撤销动撤销。2外部中断请求的撤销外部中断请求的撤销(1)跳沿方式请求的撤销)跳沿方式请求的撤销包括两项:包括两项:中断标志位清中断标志位清“0”和和外中断信号的撤销。外中断信号的撤销。中断标志位清中断标志位清“0”是在中断响应后由是在中断响应后由硬件自
26、动完成硬件自动完成的。的。外中断请求信号撤销外中断请求信号撤销,由于跳沿信号过后也就消失了,由于跳沿信号过后也就消失了,自自动撤销动撤销。34(2)电平方式外部中断请求的撤销)电平方式外部中断请求的撤销电平方式外中断请求的撤销,其中电平方式外中断请求的撤销,其中中断请求标志自动撤销中断请求标志自动撤销,但请求但请求信号的低电平可能继续存在信号的低电平可能继续存在,为此,除了标志位清,为此,除了标志位清“0”之外,还需在中断响应后之外,还需在中断响应后把中断请求信号输入引脚从把中断请求信号输入引脚从低低强制变强制变高高。如。如图图5-8。图图5-8 电平方式的外部中断请求的撤销电路电平方式的外部
27、中断请求的撤销电路35由图5-8,用D触发器锁存触发器锁存外来的中断请求外来的中断请求低电平低电平,并通过D触发器的输出端Q接到INT0*(或 INT1*)。所以,增加的D触发器不影响中断请求。中断响应后,利用D触发器的SD端接AT89S51的P1.0端。只要P1.0端输出一个负脉冲就可以使端输出一个负脉冲就可以使D触发器置触发器置“1”,撤销低电平的中断请求信号。在中断服务程序中增加如下指令产生负脉冲负脉冲:ORL P1,#01H;P1.0为为“1”ANL P1,#0FEH;P1.0为为“0”ORL P1,#01H;P1.0为为“1”363串行口中断请求的撤销串行口中断请求的撤销响应串口中断
28、后,响应串口中断后,CPU无法知道是接收中断还是发送中断,无法知道是接收中断还是发送中断,还需测试这还需测试这2个中断标志位,以个中断标志位,以判定是接收操作还是发送操判定是接收操作还是发送操作作,然后才清除。所以串口中断请求撤销,然后才清除。所以串口中断请求撤销只能使用只能使用软件软件的方的方法法,在中断服务程序中进行,即用如下指令进行清除:,在中断服务程序中进行,即用如下指令进行清除:CLR TI ;清;清TI标志位标志位CLR RI ;清;清RI标志位标志位5.8 中断服务子程序的设计中断服务子程序的设计设计前,先明确以下几个问题。设计前,先明确以下几个问题。371中断服务子程序设计的任
29、务中断服务子程序设计的任务4条:条:(1)设置中断允许控制寄存器设置中断允许控制寄存器IE,允许相应的中断请求,允许相应的中断请求源中断。源中断。(2)设置中断优先级寄存器设置中断优先级寄存器IP,确定所使用的中断源的,确定所使用的中断源的优先级。优先级。(3)若是外部中断源若是外部中断源,还要设置中断请求的,还要设置中断请求的触发方式触发方式决决定采用电平触发方式还是跳沿触发方式。定采用电平触发方式还是跳沿触发方式。(4)编写中断服务子程序编写中断服务子程序,处理中断请求。,处理中断请求。38前前3条一般放在主程序的初始化程序段中。条一般放在主程序的初始化程序段中。【例例5-35-3】假设允
30、许假设允许外部中断外部中断0中断中断,设定为,设定为高级高级中断,中断,采用跳沿触发方式,采用跳沿触发方式,其他中断源为低级中断其他中断源为低级中断。初始化程序。初始化程序如下:如下:SETB EA;EA 位置位置“1”,总中断开关位开放,总中断开关位开放SETB EX0;EX0位置位置“1”,允许外部中断,允许外部中断0产生中断产生中断SETB PX0;PX0位置位置“1”,外部中断,外部中断0为高优先级中断为高优先级中断SETB IT0;IT0位置位置“1”,外部中断,外部中断0为跳沿触发方式为跳沿触发方式392采用中断时的主程序结构采用中断时的主程序结构程序必须先从主程序起始地址主程序起
31、始地址0000H执行。所以,在在0000H起始地址的几个字节中,用无条件转移指令起始地址的几个字节中,用无条件转移指令,跳向主程序。另外,各中断入口地址间依次相差8字节,中断服务子程序稍长就超过8字节,影响其他中断源的中断处理。为此,一般在进入中断后,用一般在进入中断后,用一条无条件转移指令一条无条件转移指令,把中断服务子,把中断服务子程序程序跳转到跳转到远离其他中断入口的入口地址处。远离其他中断入口的入口地址处。40常用的主程序结构主程序结构如下:ORG0000H LJMP MAIN ORG X1X2X3X4H;X1X2X3X4H为某中断源的中断入口 LJMP INT;INT为某中断源的中断
32、入口标号 ORG Y1Y2Y3Y4H;Y1Y2Y3Y4H为主程序入口MAIN:主程序INT:中断服务子程序注意:注意:如果有多个中断源,就有多个“ORG X1X2X3X4H”的入口地址,多个“中断入口地址”必须依次由小到大排列必须依次由小到大排列。主程序MAIN的起始地址Y1Y2Y3Y4H,根据具体情况来安排。413中断服务子程序的流程中断服务子程序的流程 中断服务子程序的基本中断服务子程序的基本流程见流程见图图5-9。下面下面对有关中断服务子程序对有关中断服务子程序执行过程中的一些问题执行过程中的一些问题说明。说明。图图5-9 中断服务子程序的基本流程中断服务子程序的基本流程42(1)现场保
33、护和现场恢复)现场保护和现场恢复现场:现场:是指单片机中某些寄存器和存储器单元中的数据或是指单片机中某些寄存器和存储器单元中的数据或状态。为使中断服务子程序的执行不破坏这些数据或状态,状态。为使中断服务子程序的执行不破坏这些数据或状态,因此要送入堆栈保存起来,这就是因此要送入堆栈保存起来,这就是现场保护现场保护。现场保护现场保护一定要一定要位于中断处理程序的位于中断处理程序的前面前面。中断处理结束。中断处理结束后,在返回主程序前,则需要把保存的现场内容从堆栈中弹后,在返回主程序前,则需要把保存的现场内容从堆栈中弹出恢复原有内容,这就是出恢复原有内容,这就是现场恢复现场恢复。现场恢复现场恢复一定
34、要位于一定要位于中断处理的中断处理的后面后面。AT89S51的的堆栈操作指令堆栈操作指令:“PUSH direct”和和“POP direct”,是供现场保护和现场恢复使用的。要保护哪些内容,是供现场保护和现场恢复使用的。要保护哪些内容,应根据具体情况来定。应根据具体情况来定。43(2)关中断和开中断)关中断和开中断 现场保护前现场保护前和和现场恢复前现场恢复前关中断,是为防止此时有高一级关中断,是为防止此时有高一级的中断进入,避免现场被破坏。的中断进入,避免现场被破坏。在现场保护和现场恢复之后的开中断在现场保护和现场恢复之后的开中断是为下一次中断做准是为下一次中断做准备,也为了允许有更高级的
35、中断进入。这样,中断处理可以备,也为了允许有更高级的中断进入。这样,中断处理可以被打断,但原来的现场保护和现场恢复不允许更改,除了现被打断,但原来的现场保护和现场恢复不允许更改,除了现场保护和现场恢复的片刻外,仍然保持着中断嵌套的功能。场保护和现场恢复的片刻外,仍然保持着中断嵌套的功能。但有时候,一个重要的中断,必须执行完毕,不允许被其但有时候,一个重要的中断,必须执行完毕,不允许被其他的中断嵌套。他的中断嵌套。可在现场保护前先关闭总中断开关位,待中可在现场保护前先关闭总中断开关位,待中断处理完毕后再开总中断开关位。这样,需把图断处理完毕后再开总中断开关位。这样,需把图5-9中的中的“中断处理
36、中断处理”步骤前后的步骤前后的“开中断开中断”和和“关中断关中断”去掉。去掉。44(3)中断处理)中断处理 根据任务要求,来编写中断处理部分的程序。(4)中断返回)中断返回中断服务子程序最后一条指令必须是返回指令最后一条指令必须是返回指令RETI。执行该指令,把响应中断时所置把响应中断时所置“1”的不可寻址的优先级状的不可寻址的优先级状态触发器清态触发器清“0”,然后从堆栈中弹出栈顶上的两个字节的断点地址送到程序计数器PC,弹出的第一个字节送入PCH,弹出的第二个字节送入PCL,从断点处重新执行主程序。45【例例5-4】根据图5-9流程,编写中断服务程序。设现场保护只将PSW寄存器和累加器A的
37、内容压入堆栈中保护。一个典型的中断服务子程序如下:INT:CLREA;CPU关中断PUSH PSW;现场保护PUSH AccSETB EA;总中断允许中断处理段中断处理段 CLR EA;关中断;关中断POP Acc;现场恢复POP PSWSETBEA;总中断允许RETI;中断返回,恢复断点46程序几点说明几点说明:(1)现场保护假设仅仅涉及PSW和A的内容,如有其他需保护内容,只需在相应位置再加几条PUSH和POP指令。(2)“中断处理程序段”,根据中断任务的具体要求,编写中断处理程序。(3)如不允许被其他的中断所中断,可将“中断处理程序段”前后的“SETB EA”和“CLR EA”两条指令去
38、掉。(4)最后一条指令必须是返回指令最后一条指令必须是返回指令RETI,不可少,CPU该指令后,返回断点处,重新执行被中断的主程序。475.9 多外部中断源系统设计多外部中断源系统设计两个外部中断请求源往往不够用两个外部中断请求源往往不够用,需扩充,如图5-10。系统有5个外部中断请求源个外部中断请求源IR0IR4,高电平请求有效。最高级的IR0直接接到外部中断请求输入端INT0*,其余4个请求源IR1IR4通过各自OC门(集电极开路门)连到另一个外中断源输入端 INT1*,同时还连到P1口的P1.0P1.3脚,供AT89S51查询。除了IR0优先权级别最高优先权级别最高外,其余其余4个外部中
39、断源个外部中断源的中断优先权取决于查询顺序取决于查询顺序,中断优先权的高与低,取决查询顺序。48 图图5-10 5-10 中断和查询相结合的多外中断源系统中断和查询相结合的多外中断源系统49假设图图5-10的4个外设中有一外设提出高电平有效的中断请求信号,则通过4个OC门的输出公共端,即 INT1*脚电平会变低。究竟是哪个外设提出的请求,要通过程序查询通过程序查询P1.0P1.3引脚上的逻辑电平引脚上的逻辑电平来确定。本例假设某一时刻只有一个外设提出中断请求,并设IR1IR4这4个中断请求源的高电平可由相应的中断服务子程序清“0”,中断服务子程序如下:ORG0013H ;INT1*的中断入口的
40、中断入口LJMPINT1 ORG0100H50INT1:PUSH PSW ;保护现场 PUSH AccJB P1.0,IR1;如P1.0为高,则IR1有请求,跳IR1JB P1.1,IR2;如P1.1为高,则IR2有请求,跳IR2 JB P1.2,IR3 ;如P1.2为高,则IR3有请求,跳IR3 JB P1.3,IR4 ;如P1.3为高,则IR4有请求,跳IR4 INTIR:POP Acc ;恢复现场 POP PSW RETI ;中断返回51IR1:AJMPINTIR ;IR1处理完,跳INTIR处执行IR2:AJMP INTIR ;IR2处理完,跳INTIR处执行IR3:AJMP INTIR ;IR3处理完,跳INTIR处执行IR4:AJMP INTIR ;IR4处理完,跳INTIR处执行查询法扩展外部中断源比较简单,但是扩展的外部中断源个数较多时,查询时间稍长。52IR1的中断处理子程序IR2的中断处理子程序IR3的中断处理子程序IR4的中断处理子程序