《第5章 8951中断系统.ppt》由会员分享,可在线阅读,更多相关《第5章 8951中断系统.ppt(79页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第5 5章章 AT89S51AT89S51的中断系统的中断系统5.1AT89S51中断技术概述中断技术概述5.2AT89S51中断系统结构中断系统结构5.3中断允许与中断优先级的控制中断允许与中断优先级的控制5.4响应中断请求的条件响应中断请求的条件5.5外部中断的响应时间外部中断的响应时间5.6外部中断的触发方式选择外部中断的触发方式选择5.7中断请求的撤销中断请求的撤销5.8中断服务子程序的设计中断服务子程序的设计5.9多外部中断源系统设计多外部中断源系统设计15.1AT89S51中断技术概述中断技术概述什么是中断什么是中断?在日常生活中:在日常生活中:中断即中途打断某一正在进行的中断即
2、中途打断某一正在进行的工作,而去处理另外的紧急事件,待处理完后,工作,而去处理另外的紧急事件,待处理完后,再继续原来的工作。再继续原来的工作。在计算机中:在计算机中:计算机在运行某个进程的过程中,计算机在运行某个进程的过程中,由于其他原因,有必要中止正在执行的进程,而由于其他原因,有必要中止正在执行的进程,而去执行引起中断的事件进程,待处理完毕后,再去执行引起中断的事件进程,待处理完毕后,再回到被中止进程的被打断的地方继续执行,这种回到被中止进程的被打断的地方继续执行,这种情况称为情况称为“中断中断”。2中断的定义简单说:简单说:中断中断是指计算机暂是指计算机暂时停止原程序的执时停止原程序的执
3、行转而执行中断服行转而执行中断服务程序,并在服务务程序,并在服务完成后自动返回原完成后自动返回原程序的程序的过程过程。执行主程序执行主程序主程序主程序继续执行继续执行主程序主程序断点断点中断中断请求请求中断中断响应响应执执行行中中断断处处理理程程序序中断中断返回返回3什么是中断什么是中断?中断是指计算机在执行主程序时,由于计算机系统以中断是指计算机在执行主程序时,由于计算机系统以外的原因,暂停主程序而转去执行外的原因,暂停主程序而转去执行中断源中断源中断源中断源要求服务程要求服务程序,处理完毕后又序,处理完毕后又返回主程序返回主程序返回主程序返回主程序的这样一个过程。的这样一个过程。中断技术主
4、要用于中断技术主要用于实时监测与控制实时监测与控制,要求单片机,要求单片机能及能及时地响应中断请求源提出的服务请求时地响应中断请求源提出的服务请求,并作出快速响,并作出快速响应、及时处理。这是由片内的中断系统来实现的。应、及时处理。这是由片内的中断系统来实现的。4利用中断技术可以使计算机具有更多的利用中断技术可以使计算机具有更多的功能功能功能功能:可可实实现现高高速速CPU与与慢慢速速外外围围设设备备之之间间的的配配合合,提提高高CPU的效率。的效率。可可实实现现实实时时处处理理,各各控控制制参参数数可可随随时时向向CPU发发出出中中断申请,断申请,CPU可作出快速响应、及时处理。可作出快速响
5、应、及时处理。可实现故障的紧急处理。可实现故障的紧急处理。便于人机联系,操作人员可用键盘、开关等实现人便于人机联系,操作人员可用键盘、开关等实现人机联系,完成人的干预控制。机联系,完成人的干预控制。55.2 AT89S515.2 AT89S51中断系统结构中断系统结构 中断系统有中断系统有5 5个个中断请求源(简称中断源),中断请求源(简称中断源),两个中断两个中断优先级优先级,可实现,可实现两级中断服务程序嵌套两级中断服务程序嵌套。每一中断源可用软件独立控制为每一中断源可用软件独立控制为允许中断允许中断或或关中断关中断状状态,态,中断优先级中断优先级均可用软件来设置。均可用软件来设置。五个中
6、断源:五个中断源:外部中断外部中断:请求:请求0(INT0由由P3.2输入)输入)请求请求1(INT1由由P3.3输入)输入)内部中断:内部中断:片内定时片内定时/计数器计数器T0片内定时片内定时/计数器计数器T1片内串行口中断请求片内串行口中断请求65.2.1中断请求源中断请求源75.2.2中断请求标志寄存器中断请求标志寄存器5个中断请求源的中断请求标志中断请求标志分别由TCON和SCON的相应位锁存。1.TCON寄存器寄存器为定时器/计数器的控制寄存器,字节地址为88H,可位寻址。特殊功能寄存器TCON的格式如图图5-3所示。8IT0:外部中断外部中断0触发类型控制位触发类型控制位 IT0
7、=0时:时:INT0低电平触发低电平触发 IT0=1时:时:INT0负边沿触发负边沿触发IT1:外部中断外部中断1触发类型控制位触发类型控制位 用法同用法同IT0 注:注:IT0,IT1可由软件置可由软件置“1”或清或清“0”。D7D6D5D4D3D2D1D0TF1 TR1 TF0 TR0 IE1IT1IE0IT0TCON9IE0:外部中断外部中断0请求标志请求标志.IE0=0外部中断外部中断0无无中断请求;中断请求;IE0=1外部中断外部中断0有有中断请求;中断请求;当当IT0=0即电平触发方式时,每个机器周期的即电平触发方式时,每个机器周期的S5P2采样采样INT0,若,若INT0为低电平
8、为低电平,将直接触发外部中断;将直接触发外部中断;当当IT0=1即边沿触发方式时即边沿触发方式时,当第一个机器周期采样到当第一个机器周期采样到INT0为高电平为高电平,第二个机器周期采样到第二个机器周期采样到INT0为低电平时为低电平时,由硬件置位由硬件置位IE0,并以此来向并以此来向CPU请求中断请求中断,当当CPU响应中断响应中断,转向中断服务转向中断服务程序时由硬件清程序时由硬件清“0”IE0。IE1:外部中断外部中断1请求标志,用法同请求标志,用法同IE0D7D6D5D4D3D2D1D0TF1 TR1 TF0 TR0 IE1IT1IE0IT010TR0:定时器定时器T0的启停控制位的启
9、停控制位,由软件置位由软件置位/清除来清除来控制其开启控制其开启/关闭。关闭。若使若使TR0=1,则定时器,则定时器T0开始开始计数;计数;若使若使TR0=0,则定时器,则定时器T0停止停止计数。计数。TR1:定时器定时器T1的启停控制位,的启停控制位,用法同用法同TR0。D7D6D5D4D3D2D1D0TF1 TR1 TF0 TR0 IE1IT1IE0IT0TCON11TF0:定时定时/计数器计数器0溢出中断请求标志位溢出中断请求标志位TF0=0定时定时/计数器计数器0无无溢出中断溢出中断TF0=1定时定时/计数器计数器0有有溢出中断溢出中断在启动在启动T0计数后,定时计数后,定时/计数器计
10、数器0从初值开始加从初值开始加1计数,当计数,当最高位产生溢出时,由硬件置位最高位产生溢出时,由硬件置位TF0,向,向CPU申请中断,申请中断,CPU响应响应TF0中断后清零该标志位,中断后清零该标志位,TF0也可用软件清零也可用软件清零(查询方式查询方式)。TF1:定时定时/计数器计数器1溢出中断请求标志位溢出中断请求标志位D7D6D5D4D3D2D1D0TF1 TR1 TF0 TR0 IE1IT1IE0IT0TCON122.SCON寄存器寄存器串行口控制寄存器,字节地址为98H,可位寻址可位寻址。低二位锁存串行口的发送中断和接收中断的中断请求标志TI和RI,格式如图图5-4所示所示。13串
11、行口中断分为两种:串行口中断分为两种:串行口发送中断串行口发送中断串行口接收中断串行口接收中断D7D6D5D4D3D2D1D0TIRI串行中断请求标志串行中断请求标志SCONTI=1:有发送中断有发送中断RI=1:有接收中断有接收中断145.3中断允许与中断优先级的控制中断允许与中断优先级的控制中断允许中断允许控制由中断允许寄存器控制由中断允许寄存器IE控制。控制。中断优先级中断优先级控制由中断优先级寄存器控制由中断优先级寄存器IP控制。控制。5.3.1中断允许寄存器中断允许寄存器IEAT89S51的对各中断源的开放或屏蔽,是由中断允许寄存的对各中断源的开放或屏蔽,是由中断允许寄存器器IE控制
12、的。控制的。IE字节地址为字节地址为A8H,可位寻址可位寻址,格式如,格式如图图5-5所示所示。15总的开关中断控制位总的开关中断控制位EA:EA=0:所有中断请求被屏蔽。:所有中断请求被屏蔽。EA=1:CPU开放中断,但五个中断源的开放中断,但五个中断源的中断请求是否允许,还要由中断请求是否允许,还要由IE中中的的5个中断请求允许控制位决定。个中断请求允许控制位决定。中断允许控制寄存器IED7D6D5D4D3D2D1D0EAESET1 EX1 ET0 EX0IE16(1)EA:中断允许总控制位中断允许总控制位0:CPU屏蔽所有的中断请求屏蔽所有的中断请求(CPU关中断关中断);1:CPU开放
13、所有中断开放所有中断(CPU开中断开中断)。(2)ES:串行口中断允许位串行口中断允许位0:禁止串行口中断;禁止串行口中断;1:允许串行口中断。允许串行口中断。(3)ET1:定时器定时器/计数器计数器T1的溢出中断允许位的溢出中断允许位0:禁止禁止T1溢出中断;溢出中断;1:允许允许T1溢出中断。溢出中断。D7D6D5D4D3D2D1D0EAESET1 EX1 ET0 EX0IE17(4)EX1:外部中断外部中断1中断允许位中断允许位0:禁止外部中断禁止外部中断1中断;中断;1:允许外部中断允许外部中断1中断。中断。(5)ET0:定时器定时器/计数器计数器T0的溢出中断允许位的溢出中断允许位0
14、:禁止禁止T0溢出中断;溢出中断;1:允许允许T0溢出中断。溢出中断。(6)EX0:外部中断外部中断0中断允许位。中断允许位。0:禁止外部中断禁止外部中断0中断;中断;1:允许外部中断允许外部中断0中断。中断。D7D6D5D4D3D2D1D0EAESET1 EX1 ET0 EX0IE18AT89S51复位以后,复位以后,IE被清被清“0”,所有中断请求被禁,所有中断请求被禁止。止。IE中与各个中断源相应的位可用指令置中与各个中断源相应的位可用指令置“1”或清或清“0”。若使某一个中断源被允许中断若使某一个中断源被允许中断,除了,除了IE相应的位被置相应的位被置“1”外,还必须使外,还必须使EA
15、位置位置“1”。改变改变IE的内容的内容,可由,可由位操作指令位操作指令来实现(即来实现(即SETBbit;CLRbit),也可用),也可用字节操作指令字节操作指令实现。实现。19【例例5-1】若允许片内2个定时器/计数器中断,并禁止其他中断源的中断请求,请编写设置IE的相应程序段。(1)用位操作指令)用位操作指令CLRES;禁止串行口中断;禁止串行口中断CLREX0;禁止外部中断;禁止外部中断0中断中断CLREX1;禁止外部中断;禁止外部中断1中断中断SETB ET0;允许定时器;允许定时器/计数器计数器T0中断中断SETB ET1;允许定时器;允许定时器/计数器计数器T1中断中断SETB
16、EA;总中断开关位开放;总中断开关位开放(2)用字节操作指令)用字节操作指令MOVIE,#8AH上述两段程序对IE的设置是相同的。205.3.2中断优先级寄存器中断优先级寄存器IPAT89S51的中断请求源有两个中断优先级两个中断优先级,由软件分别设置为高高优先级中断优先级中断或低低优先级中断优先级中断,可实现两级中两级中断嵌套断嵌套AT89S51正在执行低优先级中断的服务程序时,可被高优先级中断请求所中断,待高优先级中断处理完毕后,再返回低优先级中断服务程序。2122图5-6 两级中断嵌套的过程22各中断源的中断优先级关系,可归纳为两条基本规则两条基本规则:(1)低优先级可被高优先级中断,高
17、优先级不能低优)低优先级可被高优先级中断,高优先级不能低优先级中断。先级中断。如果某一中断源被设置为高优先级中断,则不能被任何其他的中断源的中断请求所中断。(2)任何一种中断中断一旦得到响应,不会再被它的同级不会再被它的同级中断源所中断中断源所中断。中断优先级寄存器IP,其字节地址为字节地址为B8H,可位寻址。只要用程序改变其内容,可进行各中断源中断优先级中断优先级的设置的设置,IP寄存器的格式如图5-7所示。23 1 1:高优先级中断高优先级中断 0 0:低优先级中断低优先级中断 (1)PS 串行口中断优先级控制位串行口中断优先级控制位(2)PT1定时器定时器T1中断优先级控制位中断优先级控
18、制位(3)PX1外部中断外部中断1中断优先级控制位中断优先级控制位(4)PT0定时器定时器T0中断优先级控制位中断优先级控制位(5)PX0外部中断外部中断0中断优先级控制位中断优先级控制位D7D6D5D4D3D2D1D0PSPT1PX1PT0PX0IP24中断优先级控制寄存器IP用位操作指令或字节操作指令可更新IP的内容,以改变中断优先级。AT89S51复位复位以后,IP的内容为0,各个中断源均为低均为低优先级优先级中断。在同时收到在同时收到几个同优先级的中断请求几个同优先级的中断请求时,哪一个中断时,哪一个中断请求能优先得到响应,请求能优先得到响应,取决于内部的查询顺序。取决于内部的查询顺序
19、。25表表5-1同级中断的查询次序同级中断的查询次序由此可见,各中断源在同一个优先级的条件下,外部外部中断中断0的中断优先权最高最高,串行口中断串行口中断优先权最低最低。26【例例5-25-2】IP寄存器初始化,AT89S51的两个外中断两个外中断请求为高优先级,其他中断请求为低优先级。(1)用位操作指令)用位操作指令SETB PX0SETB PX0;外中断;外中断0 0设置为高优先级设置为高优先级SETB PX1SETB PX1;外中断;外中断1 1设置为高优先级设置为高优先级CLR PSCLR PS;串行口设置为低优先级;串行口设置为低优先级CLR PT0CLR PT0;定时器;定时器/计
20、数器计数器T0T0为低优先级为低优先级CLR PT1CLR PT1;定时器;定时器/计数器计数器T1T1为低优先级为低优先级 (2)用字节操作指令)用字节操作指令MOV IPMOV IP,#05H#05H27练习:将外部中断1设为最高优先级;外部中断1为边沿触发方式,外部中断0为电平触发方式;除了2个外部中断源,其他中断都不允许相应。IP值为:值为:时,时,其优先级顺序为:其优先级顺序为:T0T0、INT0INT0、T1T1、INT1INT1、串行口、串行口、串行口、串行口00010285.4响应中断请求的条件响应中断请求的条件中断请求被响应,必须满足以下必要条件:必须满足以下必要条件:(1)
21、总中断允许总中断允许开关接通,即IE寄存器中的中断总允许位EA=1。(2)该中断源发出中断请求发出中断请求,即对应的中断请求标志对应的中断请求标志为为“1”。(3)该中断源的中断允许位中断允许位EA=1,即该中断被允许。(4)无同级无同级或更高级中断更高级中断正在被服务。当CPU查询到有效的中断请求时,在满足上述条件时,紧接着就进行中断响应。29中断响应的过程:中断响应的过程:首先由硬件自动生成一条长调用指令自动生成一条长调用指令“LCALLaddr16”。就是程序存储区中相应的中断入口地址相应的中断入口地址。例如,例如,对于外部中断1的响应,硬件自动生成的长调用指令为LCALL0013H首先
22、将程序计数器PC的内容的内容压入堆栈压入堆栈以保护断点,再将中断入口地址装入中断入口地址装入PC,使程序转向响应中断请求的中断入口地址。各中断源服务程序的入口地址入口地址,如表5-2所示。3030表表5-2 5-2 中断入口地址表中断入口地址表 两两个个中中断断入入口口间间只只相相隔隔8字字节节,难以安放一个完整的中断服务程序。因此,通通常常在在中中断断入入口口地地址址处处放放置置一一条条无无条条件转移指令件转移指令,使程序执行转向中断服务程序入口。3131中断响应是有条件的,当遇到下列三种情况三种情况之一时,中断响应被封锁:(1)CPU正在处理同级或更高优先级正在处理同级或更高优先级的中断。
23、(2)所查询的机器周期不是当前正在执行指令的最后不是当前正在执行指令的最后一个机器周期一个机器周期。只有在当前指令执行完毕后,才能进行中断响应,以确保当前指令执行的完整性指令执行的完整性。(3)正在执行的指令是RETI或是访问IE或IP的指令。因为按照AT89S51中断系统的规定,在执行完这些指令后,需要再执行完一条指令,才能响应新的中断请求。如果存在上述三种情况之一,CPU不能立即对中断进行响应。3232中断响应时间中断响应时间是指:是指:CPU检测到中断请求信号到检测到中断请求信号到转入中断服务程序入口所需要的机器周期数。转入中断服务程序入口所需要的机器周期数。MCS-51单片机响应中断的
24、最短时间为单片机响应中断的最短时间为3个机器周个机器周期,时间最长需要期,时间最长需要8个机器周期。个机器周期。(1)最短响应时间)最短响应时间以外部中断的电平触发为最快。以外部中断的电平触发为最快。从查询中断请求信号到中断服务程序需要从查询中断请求信号到中断服务程序需要3个机器周期:个机器周期:1个周期(查询)个周期(查询)2个周期(长调用个周期(长调用LCALL)335.5外部中断的响应时间外部中断的响应时间这个机器周期恰好处于指令的最后一个机器周期。在这个机器周期结束后中断即被响应33(2)最长时间)最长时间若当前指令是若当前指令是RET、RETI或访问或访问IP、IE指令,指令,需执行
25、完指令再继续执行一条指令后,才响应中断。若接着若接着下一条是乘除指令,则最长为下一条是乘除指令,则最长为8个周期:个周期:2个周期(执行当前指令,其中含有个周期(执行当前指令,其中含有1个周期查询)个周期查询)4个周期(乘个周期(乘/除指令)除指令)2个周期(长调用个周期(长调用LCALL)8个周期。个周期。如果已经在处理同级或更高级中断处理同级或更高级中断,外部中断请求的响应时间取决于正在执行的中断服务程序的处理时间,这种情况下,响应时间就无法计算。这样,在一个单一中断单一中断的系统里,AT89S51单片机对外部中断请求的响应时间总是在38个机器周期个机器周期之间。345.6外部中断的触发方
26、式选择外部中断的触发方式选择两种触发方式:电平触发方式和跳沿触发方式。5.6.1电平触发方式电平触发方式外部中断申请触发器的状态随着CPU在每个机器周期采样到的外部中断输入引脚的电平变化而变化。在中断服务程序返回之前中断服务程序返回之前,外中断请求输入必须无效外中断请求输入必须无效(即外部中断请求输入已由低电平变为高电平),否则会再次响应中断。所以本方式适合于适合于外部中断以低电平输入以低电平输入且中断服务程序能清除外部中断请求源清除外部中断请求源(即外中断输入电平又变为高电平)的情况。3535使用电平触发方式注意使用电平触发方式注意1、请求中断的低电平信号必须保持足够长的时间,一直到中断被响
27、应为止。否则会丢失中断信号,尤其在多级中断的情况。2、请求中断的低电平信号也不能太长,应保证在中断服务程序返回之前撤除该中断信号,否则会产生多余的中断动作。3、为了保证能被正确采样,INT端口中断请求有效信号(低电平)至少应保持2个机器周期。365.6.2跳沿触发方式跳沿触发方式外部中断申请触发器能锁存外部中断输入线上的锁存外部中断输入线上的负跳负跳变变。即使不能响应,中断请求标志不丢失。相继连续两次采样,一个机器周期为高,下一个机器周期采样为低,则中断申请触发器置1,直到CPU响应此中断时,才清0。输入的负脉冲宽度至少保持12个时钟周期,才能被采样到。适合于以负脉冲形式输入的外部中断请求。3
28、75.7中断请求的撤销中断请求的撤销1定时器定时器/计数器中断请求的撤销计数器中断请求的撤销硬件会自动把中断请求标志位(TF0或TF1)清0,自自动撤销动撤销。2外部中断请求的撤销外部中断请求的撤销(1)跳沿方式外部中断请求的撤销)跳沿方式外部中断请求的撤销包括两项:中断标志位清中断标志位清0和外中断信号的撤销外中断信号的撤销。中断标志位清中断标志位清0是在中断响应后由硬件自动完成的。外中断请求信号的撤销外中断请求信号的撤销,由于跳沿信号过后也就消失了,自动撤销。38(2)电平方式外部中断请求的撤销)电平方式外部中断请求的撤销电平方式外中断请求的撤销,其中中断请求标志自动电平方式外中断请求的撤
29、销,其中中断请求标志自动撤销,但中断请求信号的低电平可能继续存在,为此,撤销,但中断请求信号的低电平可能继续存在,为此,除了标志位清除了标志位清“0”之外,还需在中断响应后之外,还需在中断响应后把中断请把中断请求信号输入引脚从求信号输入引脚从低电平低电平强制改变为强制改变为高电平高电平。39用D触发器锁存触发器锁存外来的中断请求外来的中断请求低电平低电平,并通过D触发器的输出端Q接到(或)。所以,增加的D触发器不影响中断请求。中断响应后,利用D触发器的SD端接AT89S51的P1.0端。因此,只要P1.0端输出一个负脉冲就可以使端输出一个负脉冲就可以使D触发器置触发器置“1”,撤销低电平的中断
30、请求信号。负脉冲负脉冲可在中断服务程序中增加如下指令:ORLP1,#01H;P1.0为为“1”ANLP1,#0FEH;P1.0为为“0”ORLP1,#01H;P1.0为为“1”403串行口中断请求的撤销串行口中断请求的撤销响应串行口的中断后,CPU无法知道是接收中断还是发送中断,还需测试这两个中断标志位,以判定是接判定是接收操作还是发送操作收操作还是发送操作,然后才清除。所以串行口中断请求的撤销只能使用只能使用软件软件的方法的方法,在中断服务程序中进行,即用如下指令在中断服务程序中对串行口中断标志位进行清除:CLRTI;清;清TI标志位标志位CLRRI;清;清RI标志位标志位415.8中断服务
31、子程序的设计中断服务子程序的设计1中断服务子程序设计的任务中断服务子程序设计的任务任务有下列4条:(1)设置中断允许控制寄存器设置中断允许控制寄存器IE,允许相应的中断请求源中断。(2)设置中断优先级寄存器设置中断优先级寄存器IP,确定所使用的中断源的优先级。(3)若是外部中断源若是外部中断源,还要设置中断请求的触发方式触发方式决定采用电平触发方式还是跳沿触发方式。(4)编写中断服务子程序编写中断服务子程序,处理中断请求。前3条一般放在主程序的初始化程序段中。42【例例5-35-3】假设允许外部中断外部中断0中断中断,设定为高级高级中断,采用跳沿触发方式,其他中断源为低级中断。初始化程序如下:
32、SETBEA;EA位置1,总中断开关位开放SETBEX0;EX0位置1,允许外部中断0产生中断SETBPX0;PX0位置1,外部中断0为高优先级中断SETBIT0;IT0位置1,外部中断0为跳沿触发方式432采用中断时的主程序结构采用中断时的主程序结构程序必须先从主程序起始地址主程序起始地址0000H执行。所以,在在0000H起始地址的几个字节中,用无条件转移指令起始地址的几个字节中,用无条件转移指令,跳向主程序。另外,各中断入口地址之间依次相差8字节,中断服务子程序稍长就超过8字节,这样中断服务子程序就占用了其他的中断入口地址,影响其他中断源的中断处理。为此,一般在进入中断后,用一般在进入中
33、断后,用一条无条件转移指令一条无条件转移指令,把中断服务,把中断服务子程序子程序跳转到跳转到远离其他中断入口的入口地址处。远离其他中断入口的入口地址处。4444常用的主程序结构主程序结构如下:ORG0000HLJMPMAINORGX1X2X3X4H;X1X2X3X4H为某中断源的中断入口LJMPINT;INT为某中断源的中断入口标号ORGY1Y2Y3Y4H;Y1Y2Y3Y4H为主程序入口MAIN:主程序INT:中断服务子程序注意:注意:如果有多个中断源,就有多个“ORGX1X2X3X4H”的入口地址,多个“中断入口地址”必须依次由小到大排列必须依次由小到大排列。主程序MAIN的起始地址Y1Y2
34、Y3Y4H,根据具体情况来安排。45453中断服务子程序的流程中断服务子程序的流程中断服务子程序的基本流程如图5-9所示。下面对有关中断服务子程序执行过程中的一些问题进行说明。46图5-9 中断子服务程序的基本流程46(1)现场保护和现场恢复)现场保护和现场恢复现场是指单片机中某些寄存器和存储器单元中的数据或状态。为使中断服务子程序的执行不破坏这些数据或状态,因此要送入堆栈保存起来,这就是现场保护现场保护。现场保护现场保护一定要位于中断处理程序的位于中断处理程序的前面前面。中断处理结束后,在返回主程序前,则需要把保存的现场内容从堆栈中弹出恢复原有内容,这就是现场恢复现场恢复。现场恢复现场恢复一
35、定要位于中断处理的中断处理的后面后面。AT89S51的堆栈操作指令:“PUSHdirect”和“POPdirect”,是供现场保护和现场恢复使用的。要保护哪些内容,应根据具体情况来定。47(2)关中断和开中断)关中断和开中断现场保护前现场保护前和现场恢复前现场恢复前关中断,是为防止此时有高一级的中断进入,避免现场被破坏。在现场保护和现场恢复之后的开中断在现场保护和现场恢复之后的开中断是为下一次的中断做好准备,也为了允许有更高级的中断进入。这样,中断处理可以被打断,但原来的现场保护和现场恢复不允许更改,除了现场保护和现场恢复的片刻外,仍然保持着中断嵌套的功能。但有时候,一个重要的中断,必须执行完
36、毕,不允许被但有时候,一个重要的中断,必须执行完毕,不允许被其他的中断嵌套。其他的中断嵌套。可在现场保护前先关闭总中断开关位,待中断处理完毕后再开总中断开关位。这样,需把图5-9中的“中断处理”步骤前后的“开中断”和“关中断”去掉。4848(3)中断处理)中断处理应用设计者根据任务的具体要求,来编写中断处理部分的程序。(4)中断返回)中断返回中断服务子程序最后一条指令必须是返回指令最后一条指令必须是返回指令RETI。CPU执行完这条指令后,把响应中断时所置把响应中断时所置1的不可寻址的不可寻址的优先级状态触发器清的优先级状态触发器清0,然后从堆栈中弹出栈顶上的两个字节的断点地址送到程序计数器P
37、C,弹出的第一个字节送入PCH,弹出的第二个字节送入PCL,从断点处重新执行主程序。4949【例例5-4】根据图5-9流程,编写中断服务程序。设现场保护只将PSW寄存器和累加器A的内容压入堆栈中保护。一个典型的中断服务子程序如下:INT:CLREA;CPU关中断PUSHPSW;现场保护PUSHAccSETBEA;总中断允许中断处理段中断处理段CLREA;关中断POPAcc;现场恢复POPPSWSETBEA;总中断允许RETI;中断返回,恢复断点5050上述程序几点说明几点说明:(1)本例的现场保护假设仅仅涉及PSW和A的内容,如有其他需要保护的内容,只需在相应位置再加几条PUSH和POP指令即
38、可。注意,堆栈的操作是先进后出。(2)“中断处理程序段”,设计者应根据中断任务的具体要求,来编写中断处理程序。(3)如果不允许被其他的中断所中断,可将“中断处理程序段”前后的“SETBEA”和“CLREA”两条指令去掉。(4)最后一条指令必须是返回指令最后一条指令必须是返回指令RETI,不可缺少,CPU执行完这条指令后,返回断点处,重新执行被中断的主程序。5151注注:响应中断过程中的响应中断过程中的栈操作栈操作栈操作栈操作均由均由计算机自动完成计算机自动完成计算机自动完成计算机自动完成,注意必须,注意必须在程序中在程序中建立堆栈建立堆栈建立堆栈建立堆栈。在中断服务程序的开始应有保护现场在中断
39、服务程序的开始应有保护现场在中断服务程序的开始应有保护现场在中断服务程序的开始应有保护现场的指令的指令的指令的指令。将将中中断断服服务务程程序序中中用用到到的的各各各各寄寄寄寄存存存存器器器器的的内内容容压压入入堆堆栈栈保保存存,在在中中断断结结束束之之前前弹弹弹弹出出出出恢恢恢恢复复复复,然然后后返返回回。这这样样就就能能保保证证返返回回原原断断点点时时各各寄寄存存器器内内容容与与中中断断服服务务前前相相同同,使使原原程程序序能能正正正正确确确确运运运运行行行行。本本例例的的现现场场保保护护假假设设仅仅仅仅涉涉及及PSW和和A的的内内容容,如如有有其其他他需需要要保保护护的的内内容容,只只需
40、需在在相相应应位位置置再再加加几几条条PUSH和和POP指令即可。指令即可。中断与调用子程序的异同中断与调用子程序的异同中断与调用子程序的异同中断与调用子程序的异同中中断断过过程程中中由由主主程程序序转转向向中中断断服服务务程程序序的的请请求求是是由由外外部部设设备备提提出出的的,发发生生中中断断的的时时时时刻刻刻刻不不不不确确确确定定定定,而而在在何何处处调调用用子子程程序序则是由程序确定的;则是由程序确定的;中断和调用子程序均有栈操作中断和调用子程序均有栈操作中断和调用子程序均有栈操作中断和调用子程序均有栈操作。525.9多外部中断源系统设计多外部中断源系统设计实际的应用中,两个外部中断请
41、求源往往不够用两个外部中断请求源往往不够用,需对外部中断源进行扩充,如图5-10所示。系统有5个外部中断请求个外部中断请求源源IR0IR4,高电平有效。最高级的请求源IR0直接接到AT89S51的一个外部中断请求输入端,其余4个请求源IR1IR4通过各自的OC门(集电极开路门)连到AT89S51的另一个外中断源输入端,同时还连到P1口的P1.0P1.3脚,供AT89S51查询。图5-10所示所示电路,除了IR0优先权级别最高优先权级别最高外,其余其余4个外个外部中断源部中断源的中断优先权取决于查询顺序取决于查询顺序,中断优先权的高与低,取决于查询顺序。535354图图5-10 中断和查询相结合
42、的多外部中断请求源系统中断和查询相结合的多外部中断请求源系统54假设图图5-10中的4个外设中有一个外设提出高电平有效的中断请求信号,则中断请求通过4个集电极开路OC门的输出公共点,即脚的电平就会变低。究竟是哪个外设提出的请求,要通过程序查询通过程序查询P1.0P1.3引脚上的逻辑电引脚上的逻辑电平平来确定。本例假设某一时刻只能有一个外设提出中断请求,并设IR1IR4这4个中断请求源的高电平可由相应的中断服务子程序清“0”,则中断服务子程序如下:ORG0013H;INT1*的中断入口的中断入口LJMPINT1ORG0100H5555INT1:PUSH PSW;保护现场PUSH AccJBP1.
43、0,IR1;如P1.0为高,则IR1有请求,;跳IR1处理JBP1.1,IR2;如P1.1为高,则IR2有请求,;跳IR2处理JBP1.2,IR3;如P1.2为高,则IR3有请求,;跳IR3处理JBP1.3,IR4;如P1.3为高,则IR4有请求,;跳IR4处理INTIR:POPAcc;恢复现场POPPSWRETI;中断返回5656IR1:AJMPINTIR;IR1处理完,跳INTIR处执行IR2:AJMPINTIR;IR2处理完,跳INTIR处执行IR3:AJMP INTIR;IR3处理完,跳INTIR处执行IR4:AJMP INTIR;IR4处理完,跳INTIR处执行查询法扩展外部中断源比
44、较简单,但是扩展的外部中断源个数较多时,查询时间稍长。57IR1的中断处理子程序IR2的中断处理子程序IR3的中断处理子程序IR4的中断处理子程序57多中断源系统设计多中断源系统设计多中断源系统设计多中断源系统设计当两个外中断源不够用时,可采取不同方法增加外中断源。当两个外中断源不够用时,可采取不同方法增加外中断源。1 1 查询法查询法查询法查询法通过多中断源并联输入,之后逐个查询的方法。通过多中断源并联输入,之后逐个查询的方法。通过多中断源并联输入,之后逐个查询的方法。通过多中断源并联输入,之后逐个查询的方法。2 2 利用外部计数器方法利用外部计数器方法利用外部计数器方法利用外部计数器方法利
45、用计数器能够对外部事件计数的功能,将计数利用计数器能够对外部事件计数的功能,将计数器设置为计数一次就溢出产生中断的方法。器设置为计数一次就溢出产生中断的方法。583中断的软件设计中断的软件设计(1 1)设计举例设计举例设计举例设计举例某一系统使用中断源某一系统使用中断源INT0INT0、T1T1、串行口串行口串行口串行口,并设,并设T1T1为高优为高优先级,请写出有关中断的必要指令。先级,请写出有关中断的必要指令。SETBEA;允许;允许CPU接受中断接受中断SETBEX0;允许允许INT0中断中断SETBET1;允许允许T1中断中断SETBES;允许串行口中断允许串行口中断SETBPT1;设
46、;设T1位高优先级位高优先级以下指令与上述以下指令与上述以下指令与上述以下指令与上述5 5条指令等同条指令等同条指令等同条指令等同MOVIE,#99H10011001MOVIP,#08H0000100059(2 2)5151单片机中断程序设置单片机中断程序设置单片机中断程序设置单片机中断程序设置ORG0000HORG0000HAJMPSTARTAJMPSTARTORG0003HORG0003HLJMPWB0LJMPWB0ORG000BHORG000BHLJMPDS0LJMPDS0ORG0013HORG0013HLJMPWB1LJMPWB1ORG001BHORG001BHLJMPDS1LJMPD
47、S1ORG0023HORG0023HLJMPCKLJMPCKSTARTSTART:.SJMP$SJMP$WB0WB0:.RETIRETIDS0DS0:.RETIRETIWB1WB1:.RETIRETIDS1:DS1:.RETIRETICKCK:.RETIRETI60说明:说明:说明:说明:由于每个由于每个由于每个由于每个中断源中断源中断源中断源分配的中断子程序空间只有分配的中断子程序空间只有分配的中断子程序空间只有分配的中断子程序空间只有8 8字字字字节节节节,一般中断程序所需空间远远大于,一般中断程序所需空间远远大于,一般中断程序所需空间远远大于,一般中断程序所需空间远远大于8 8字节字节字
48、节字节,为,为,为,为了不影响各中断子程序的正常执行,通常在了不影响各中断子程序的正常执行,通常在了不影响各中断子程序的正常执行,通常在了不影响各中断子程序的正常执行,通常在中断中断中断中断入口地址单元入口地址单元入口地址单元入口地址单元存放一条长转移指令存放一条长转移指令存放一条长转移指令存放一条长转移指令LJMPLJMP,使中,使中,使中,使中断服务程序可在断服务程序可在断服务程序可在断服务程序可在64K64K的存储空间内任意安排,如的存储空间内任意安排,如的存储空间内任意安排,如的存储空间内任意安排,如上述设置程序;上述设置程序;上述设置程序;上述设置程序;对于没有设置中断子程序的中断源
49、,最好也进行对于没有设置中断子程序的中断源,最好也进行对于没有设置中断子程序的中断源,最好也进行对于没有设置中断子程序的中断源,最好也进行上述设置,防止干扰引起程序上述设置,防止干扰引起程序上述设置,防止干扰引起程序上述设置,防止干扰引起程序“飞车飞车飞车飞车”;中断子程序要尽量中断子程序要尽量中断子程序要尽量中断子程序要尽量精简(少)精简(少)精简(少)精简(少),提高处理器或者,提高处理器或者,提高处理器或者,提高处理器或者系统的效率和实时性。系统的效率和实时性。系统的效率和实时性。系统的效率和实时性。614 4 中断设计举例中断设计举例中断设计举例中断设计举例例例例例:如图所示:如图所示
50、:8051单片机单片机INT0引脚上接有一个按键,每按引脚上接有一个按键,每按一次,产生一次外部一次,产生一次外部0中断,在中断程序中中断,在中断程序中实现发光二级管实现发光二级管交替亮、灭功能,并将按键次数统计于交替亮、灭功能,并将按键次数统计于R1中,不考虑溢出。中,不考虑溢出。INT0INT0VCCVCCP1.0P1.0VCCVCCK1K1R2R2R1R1R3R362ORG0000HAJMPSTARTORG0003HLJMPWB0.ORG0030HSTART:MOVR1,#00HCLRIT0;电平触发方式SETBEASETBEX0HEREHERE:AJMPHEREAJMPHEREWB0: