1、1第第4 4章章 AT89S52AT89S52单片机的单片机的 中断系统中断系统12第第4章章 AT89S52单片机的中断系统单片机的中断系统4.1 单片机中断技术概述单片机中断技术概述4.2 AT89S52的中断系统结构的中断系统结构 4.2.1 中断请求源中断请求源 4.2.2 中断请求标志寄存器中断请求标志寄存器4.3 中断允许与中断优先级的控制中断允许与中断优先级的控制 4.3.1 中断允许寄存器中断允许寄存器IE 4.3.2 中断优先级寄存器中断优先级寄存器IP4.4 响应中断请求的条件响应中断请求的条件4.5 外部中断的响应时间外部中断的响应时间 34.6 外部中断的触发方式选择外
2、部中断的触发方式选择 4.6.1 电平触发方式电平触发方式 4.6.2 跳沿触发方式跳沿触发方式4.7 中断请求的撤销中断请求的撤销4.8 中断服务子程序的应用设计中断服务子程序的应用设计4.9 多外部中断源系统设计多外部中断源系统设计 4.9.1 定时器定时器/计数器作为外部中断源的使用方法计数器作为外部中断源的使用方法 4.9.2 中断和查询结合的方法中断和查询结合的方法 4.9.3 用优先权编码器扩展外部中断源用优先权编码器扩展外部中断源4内容概要内容概要 本章介绍本章介绍AT89S52单片机片内功能部件中断系统的硬件结构单片机片内功能部件中断系统的硬件结构和工作原理。和工作原理。AT8
3、9S52的中断系统能够实时地响应片内功能部件和外围设的中断系统能够实时地响应片内功能部件和外围设备发出的中断请求并进入中断服务子程序进行处理。通过本章备发出的中断请求并进入中断服务子程序进行处理。通过本章学习,读者应重点掌握与中断系统有关的特殊功能寄存器及中学习,读者应重点掌握与中断系统有关的特殊功能寄存器及中断系统的应用特性,应能熟练地进行中断系统的初始化编程以断系统的应用特性,应能熟练地进行中断系统的初始化编程以及中断服务子程序的设计。及中断服务子程序的设计。54.1 4.1 中断技术概述中断技术概述 中断技术主要用于中断技术主要用于实时监测与控制实时监测与控制,要求单片机,要求单片机能及
4、时地响能及时地响应中断请求源提出的服务请求应中断请求源提出的服务请求,并作出快速响应、及时处理。,并作出快速响应、及时处理。这是由片内的中断系统来实现的。这是由片内的中断系统来实现的。当中断请求源当中断请求源发出中断请求发出中断请求时,如果中断请求被允许,单片时,如果中断请求被允许,单片机暂时中止当前正在执行的主程序,转到中断服务处理程序处机暂时中止当前正在执行的主程序,转到中断服务处理程序处理中断服务请求。理中断服务请求。中断服务处理程序处理完中断服务请求后,再回到原来被中中断服务处理程序处理完中断服务请求后,再回到原来被中止的程序之处(断点),继续执行被中断的主程序。止的程序之处(断点),
5、继续执行被中断的主程序。图图4-14-1为整个中断响应和处理过程。为整个中断响应和处理过程。56 6图图4-1 中断响应和处理过程中断响应和处理过程7 如果单片机没有中断系统如果单片机没有中断系统,单片机的大量时间可能会浪费,单片机的大量时间可能会浪费在查询是否有服务请求发生的定时查询操作上。在查询是否有服务请求发生的定时查询操作上。采用中断技术完全采用中断技术完全消除了单片机在查询方式中的等待现象消除了单片机在查询方式中的等待现象,大大地提高了单片机的大大地提高了单片机的工作效率工作效率和和实时性实时性。4.2 AT89S514.2 AT89S51中断系统结构中断系统结构 中断系统结构图如中
6、断系统结构图如图图4-24-2所示。所示。中断系统有中断系统有6 6个个中断请求源(简称中断源),中断请求源(简称中断源),两个中断优先两个中断优先级级,可实现,可实现两级中断服务程序嵌套两级中断服务程序嵌套。每一中断源可用软件独立控制为每一中断源可用软件独立控制为允许中断允许中断或或关中断关中断状态,状态,中断优先级中断优先级均可用软件来设置。均可用软件来设置。78图图4-2 AT89S52的中断系统结构的中断系统结构 94.2.1 4.2.1 中断请求源中断请求源由图由图4-24-2可见,可见,AT89S52AT89S52中断系统共有中断系统共有6 6个中断请求源:个中断请求源:(1 1)
7、INT0INT0*外部中断请求外部中断请求0 0,中断请求信号由,中断请求信号由INT0INT0*脚输入,脚输入,中断请求标志为中断请求标志为IE0IE0。(2 2)INT1INT1*外部中断请求外部中断请求1 1,中断请求信号由,中断请求信号由INT1INT1*脚脚输入,输入,中断请求标志为中断请求标志为IE1IE1。(3 3)定时器定时器/计数器计数器T0T0计数溢出发出的中断请求,中断请求标计数溢出发出的中断请求,中断请求标志为志为TF0TF0。(4 4)定时器定时器/计数器计数器T1T1计数溢出发出的中断请求,中断请求标计数溢出发出的中断请求,中断请求标志为志为TF1TF1。(5 5)
8、串行口串行口中断请求,中断请求标志为发送中断中断请求,中断请求标志为发送中断TITI或接收中断或接收中断RIRI。910 (6)T2的中断请求源,含有计数溢出(的中断请求源,含有计数溢出(TF2)和)和“捕捉捕捉”(EXF2)两种中断请求标志,经或门共用一个中断矢量。两种)两种中断请求标志,经或门共用一个中断矢量。两种中断触发是由中断触发是由T2的两种不同工作方式决定的。的两种不同工作方式决定的。4.2.2 中断请求标志寄存器中断请求标志寄存器 6个中断请求源的个中断请求源的中断请求标志中断请求标志分别由分别由TCON、SCON和和T2CON的相应位锁存(见图的相应位锁存(见图4-2)。)。1
9、.TCON寄存器寄存器 为定时器为定时器/计数器的控制寄存器,字节地址为计数器的控制寄存器,字节地址为88H,可位寻,可位寻址。特殊功能寄存器址。特殊功能寄存器TCON的格式如的格式如图图4-3所示。所示。10图图4-34-3 特殊功能寄存器特殊功能寄存器TCONTCON的格式的格式11TCONTCON各标志位功能如下:各标志位功能如下:(1 1)TF1TF1定时器定时器/计数器计数器T1T1的溢出中断请求标志位。的溢出中断请求标志位。当当T1T1计数产生溢出时,由硬件使计数产生溢出时,由硬件使TF1TF1置置“1 1”,向,向CPUCPU申请中断。申请中断。CPUCPU响应响应TF1TF1中
10、断时,中断时,TF1TF1标志标志由硬件自动清由硬件自动清“0 0”,TF1TF1也可由也可由软件清软件清“0 0”。(2 2)TF0TF0定时器定时器/计数器计数器T0T0的溢出中断请求标志位,功能的溢出中断请求标志位,功能与与TF1TF1类似。类似。(3 3)IE1IE1外部中断请求外部中断请求1 1的中断请求标志位。的中断请求标志位。(4 4)IE0IE0外部中断请求外部中断请求0 0中断请求标志位,功能与中断请求标志位,功能与IE1IE1类似。类似。(5 5)IT1IT1选择外部中断请求选择外部中断请求1 1为跳沿触发还是电平触发。为跳沿触发还是电平触发。1112 IT1=0 IT1=
11、0,电平触发,电平触发方式,引脚方式,引脚 上低电平有效,并把上低电平有效,并把IE1IE1置置“1 1”。转向中断服务程序时,由硬件。转向中断服务程序时,由硬件自动自动把把IE1IE1清清“0 0”。IT1=1 IT1=1,跳沿触发,跳沿触发方式,加到引脚方式,加到引脚 上的外部中断请求输入上的外部中断请求输入信号电平从高到低的信号电平从高到低的负跳变有效负跳变有效,并把,并把IE1IE1置置“1 1”。转向中。转向中断服务程序时,由硬件断服务程序时,由硬件自动自动把把IE1IE1清清“0 0”。(6 6)IT0IT0选择外部中断请求选择外部中断请求0 0为跳沿触发方式还是电平触发为跳沿触发
12、方式还是电平触发方式,其意义与方式,其意义与IT1IT1类似。类似。AT89S52 AT89S52复位复位后,后,TCONTCON被清被清“0 0”,6 6个中断源的中断请求个中断源的中断请求标志均为标志均为0 0。TR1 TR1(D6D6位)、位)、TR0TR0(D4D4位)位)这这2 2位位与中断系统无关与中断系统无关,将在,将在第第5 5章定时器章定时器/计数器计数器中介绍。中介绍。12132.SCON寄存器寄存器 串行口控制寄存器,字节地址为串行口控制寄存器,字节地址为98H,可位寻址可位寻址。低二位锁存串行口的发送中断和接收中断的中断请求标志低二位锁存串行口的发送中断和接收中断的中断
13、请求标志TI和和RI,格式如,格式如图图4-4所示所示。各标志位的功能:各标志位的功能:(1)TI串行口的发送中断请求标志位。每发送完一帧串串行口的发送中断请求标志位。每发送完一帧串行数据后,行数据后,TI自动置自动置“1”。TI标志标志必须由软件清必须由软件清“0”。图图4-4 SCON中的中断请求标志位中的中断请求标志位1314 (2 2)RIRI串行口接收中断请求标志位。串行口接收完一个串串行口接收中断请求标志位。串行口接收完一个串行数据帧,硬件自动使行数据帧,硬件自动使RIRI中断请求标志置中断请求标志置“1 1”。必须在中断服。必须在中断服务程序中用指令对务程序中用指令对RIRI清清
14、“0 0”。3 3定时器定时器2 2的控制寄存器的控制寄存器T2CONT2CON 特殊功能寄存器特殊功能寄存器T2CONT2CON的字节地址为的字节地址为C8HC8H,可位寻址,可位寻址,位地址位地址为为C8HC8HCFHCFH。格式见。格式见图图4-54-5。T2CON T2CON中的最高两位为定时器中的最高两位为定时器/计数器计数器T2T2的中断请求标志位的中断请求标志位TF2TF2和和EXF2EXF2。(1 1)TF2TF2(D7D7):):当当T2T2的计数器(的计数器(TL2TL2、TH2TH2)计数计满溢出回)计数计满溢出回0 0时,由内部硬件置位时,由内部硬件置位TF2TF2(寄
15、存器(寄存器T2CON.7T2CON.7),向),向CPUCPU发出中断请发出中断请求。但是当求。但是当RCLKRCLK位或位或TCLKTCLK位为位为1 1时将不予置位。本标志时将不予置位。本标志位必须由位必须由软件清软件清0。1415(2 2)EXF2EXF2(D6D6):):当由引脚当由引脚T2EXT2EX(P1.1P1.1脚)上的负跳变引起脚)上的负跳变引起“捕捉捕捉”或或“重新装载重新装载”且且EXEN2EXEN2位为位为1 1,则置位,则置位EXF2EXF2标志位标志位(寄存器(寄存器T2CON.6T2CON.6),向),向CPUCPU发出中断请求。发出中断请求。上述两种中断请求,
16、在满足中断响应条件时,上述两种中断请求,在满足中断响应条件时,CPUCPU都将响应都将响应其中断请求,转向同一个中断矢量地址进行中断处理。因此,其中断请求,转向同一个中断矢量地址进行中断处理。因此,必须在必须在T2T2的中断服务程序中对的中断服务程序中对TF2TF2和和EXF2EXF2两个中断请求标志位两个中断请求标志位进行查询,然后正确转入对应的中断处理程序。中断结束后,进行查询,然后正确转入对应的中断处理程序。中断结束后,中断请求标志位中断请求标志位TF2TF2或或EXF2EXF2必须由软件清必须由软件清0 0。图图4-5 T2CON格式格式 164.3 中断允许与中断优先级的控制中断允许
17、与中断优先级的控制 中断允许中断允许控制由中断允许寄存器控制由中断允许寄存器IE控制。控制。中断优先级中断优先级控制由中断优先级寄存器控制由中断优先级寄存器IP控制。控制。4.3.1 中断允许寄存器中断允许寄存器IE AT89S52的对各中断源的开放或屏蔽,是由中断允许寄存器的对各中断源的开放或屏蔽,是由中断允许寄存器IE控制的。控制的。IE字节地址为字节地址为A8H,可位寻址可位寻址,格式如,格式如图图4-6所示所示。图图4-6 中断允许寄存器中断允许寄存器IE的格式的格式17IE对中断的开放和关闭实现对中断的开放和关闭实现两级控制两级控制。有一个总的开关中断控制位有一个总的开关中断控制位E
18、A(IE.7位),位),EA=0时,所有的中断请求被屏蔽;时,所有的中断请求被屏蔽;EA=1时,开放中断,但时,开放中断,但6个中断源的中断请求是否允许,还个中断源的中断请求是否允许,还要由要由IE中的低中的低6位位所所对应的对应的6个中断请求允许控制位个中断请求允许控制位的状态来决的状态来决定(图定(图4-6)。)。IE中各位功能如下:中各位功能如下:(1)EA中断允许总开关控制位。中断允许总开关控制位。EA=0,所有的中断请求被屏蔽。,所有的中断请求被屏蔽。EA=1,所有的中断请求被开放。,所有的中断请求被开放。(2)ES串行口中断允许位。串行口中断允许位。ES=0,禁止串行口中断。,禁止
19、串行口中断。1718ES=1,允许串行口中断。,允许串行口中断。(3)ET1定时器定时器/计数器计数器T1的溢出中断允许位。的溢出中断允许位。ET1=0,禁止,禁止T1溢出中断。溢出中断。ET1=1,允许,允许T1溢出中断。溢出中断。(4)EX1外部中断外部中断1中断允许位。中断允许位。EX1=0,禁止外部中断,禁止外部中断1中断。中断。EX1=1,允许外部中断,允许外部中断1中断。中断。(5)ET0定时器定时器/计数器计数器T0的溢出中断允许位。的溢出中断允许位。ET0=0,禁止,禁止T0溢出中断。溢出中断。ET0=1,允许,允许T0溢出中断。溢出中断。1819(6)EX0外部中断外部中断0
20、中断允许位。中断允许位。EX0=0,禁止外部中断,禁止外部中断0中断。中断。EX0=1,允许外部中断,允许外部中断0中断。中断。(7)EX0外部中断外部中断0中断允许位。中断允许位。EX0=0,禁止外部中断,禁止外部中断0中断。中断。EX0=1,允许外部中断,允许外部中断0中断。中断。AT89S52复位以后,复位以后,IE被清被清“0”,所有的中断请求被禁止。,所有的中断请求被禁止。IE中与各个中断源相应的位可用指令置中与各个中断源相应的位可用指令置“1”或清或清“0”,即可允,即可允许或禁止各中断源的中断申请。若使某一个中断源被允许中许或禁止各中断源的中断申请。若使某一个中断源被允许中20断
21、,除了断,除了IE相应的位被置相应的位被置“1”外,还必须使外,还必须使EA位置位置“1”,即,即EA位置位置“1”为中断请求的必要条件。为中断请求的必要条件。改变改变IE的内容,可由位操作指令来实现(即的内容,可由位操作指令来实现(即SETB bit;CLR bit),也可用字节操作指令实现。),也可用字节操作指令实现。AT89S51复位以后,复位以后,IE被清被清“0”,所有中断请求被禁止。,所有中断请求被禁止。IE中与各个中断源相应中与各个中断源相应的位可用指令置的位可用指令置“1”或清或清“0”。2021 【例例4-1】若允许片内若允许片内2个定时器个定时器/计数器计数器T1、T0中断
22、,并禁中断,并禁止其他中断请求,请编写设置止其他中断请求,请编写设置IE的相应程序段。的相应程序段。(1)用位操作指令)用位操作指令CLRES;禁止串行口中断;禁止串行口中断 CLREX0;禁止外部中断;禁止外部中断0中断中断CLREX1;禁止外部中断;禁止外部中断1中断中断CLRET2;禁止定时器;禁止定时器/计数器计数器T2中断中断 SETBET0;允许定时器;允许定时器/计数器计数器T0中断中断SETBET1;允许定时器;允许定时器/计数器计数器T1中断中断SETBEA;总中断开关位开放;总中断开关位开放(2)用字节操作指令)用字节操作指令 MOV IE,#8AH上述两段程序对上述两段程
23、序对IE的设置是相同的。的设置是相同的。21224.3.2 中断优先级寄存器中断优先级寄存器IP AT89S52的中断请求源有的中断请求源有两个中断优先级两个中断优先级,由软件分别设置,由软件分别设置为为高高优先级中断优先级中断或或低低优先级中断优先级中断,可实现:,可实现:两级中断嵌套两级中断嵌套AT89S52正在执行低优先级中断的服务程序时,可被高优先级正在执行低优先级中断的服务程序时,可被高优先级中断请求所中断,待高优先级中断处理完毕后,再返回低优先级中断请求所中断,待高优先级中断处理完毕后,再返回低优先级中断服务程序。中断服务程序。两级中断嵌套两级中断嵌套的的过程过程如如图图4-7所示
24、。所示。222323图图4-7 两级中断嵌套的过程两级中断嵌套的过程24 各中断源的中断优先级关系,可归纳为各中断源的中断优先级关系,可归纳为两条基本规则两条基本规则:(1)低优先级可被高优先级中断,高优先级不能低优先)低优先级可被高优先级中断,高优先级不能低优先级中断。级中断。如果某一中断源被设置为高优先级中断,则不能被如果某一中断源被设置为高优先级中断,则不能被任何其他的中断源的中断请求所中断。任何其他的中断源的中断请求所中断。(2)任何一种任何一种中断中断一旦得到响应,一旦得到响应,不会再被它的同级中不会再被它的同级中断源所中断断源所中断。中断优先级寄存器中断优先级寄存器IP,其,其字节
25、地址为字节地址为B8H,可位寻址。,可位寻址。只要用程序改变其内容,可进行各中断源只要用程序改变其内容,可进行各中断源中断优先级的设置中断优先级的设置,IP寄存器的格式如寄存器的格式如图图4-8所示。所示。2425中断优先级寄存器中断优先级寄存器IP各位的含义各位的含义如下:如下:(1)PT2定时器定时器T2中断优先级控制位中断优先级控制位(2)PS串行口中断优先级控制位串行口中断优先级控制位(3)PT1定时器定时器T1中断优先级控制位中断优先级控制位(4)PX1外部中断外部中断1中断优先级控制位中断优先级控制位(5)PT0定时器定时器T0中断优先级控制位中断优先级控制位(6)PX0外部中断外
26、部中断0中断优先级控制位中断优先级控制位 25图图4-8 IP寄存器的格式寄存器的格式261:高优先级:高优先级0:低优先级:低优先级 中断优先级控制寄存器中断优先级控制寄存器IP用位操作指令或字节操作指令用位操作指令或字节操作指令可更新可更新IP的内容,以改变中断优先级。的内容,以改变中断优先级。AT89S52复位复位以后,以后,IP的内容为的内容为0,各个中断源,各个中断源均为低优均为低优先级先级中断。中断。AT89S52的中断系统有的中断系统有两个不可寻址的两个不可寻址的“优先级激活触优先级激活触发器。发器。一个指示某高优先级一个指示某高优先级的中断正在执行,所有后来的中断的中断正在执行
27、,所有后来的中断均被阻止;均被阻止;另一个触发器指示某低优先级另一个触发器指示某低优先级的中断正在执行,的中断正在执行,所有同级的中断都被阻止,但不阻断高优先级的中断请求。所有同级的中断都被阻止,但不阻断高优先级的中断请求。2627在同时收到在同时收到几个同优先级的中断请求几个同优先级的中断请求时,哪一个中断请求能时,哪一个中断请求能优先得到响应,优先得到响应,取决于内部的查询顺序。取决于内部的查询顺序。这相当于在同一个优这相当于在同一个优先级内,还同时存在另一个辅助优先级结构,其查询顺序见先级内,还同时存在另一个辅助优先级结构,其查询顺序见表表4-1。2728 由此可见,各中断源在相同优先级
28、的条件下,由此可见,各中断源在相同优先级的条件下,外部中断外部中断0的的中断优先权中断优先权最高最高,T2溢出中断或溢出中断或EXF2中断中断的中断优先权的中断优先权最低最低。2829【例例4-24-2】IP寄存器初始化,寄存器初始化,AT89S52的的两个外中断两个外中断请求请求为为高优先级高优先级,其他中断请求为低优先级其他中断请求为低优先级。(1)用位操作指令)用位操作指令SETB PX0SETB PX0;外中断;外中断0 0设置为高优先级设置为高优先级SETB PX1SETB PX1;外中断;外中断1 1设置为高优先级设置为高优先级CLR PSCLR PS;串行口设置为低优先级;串行口
29、设置为低优先级CLR PT0CLR PT0;定时器;定时器/计数器计数器T0T0为低优先级为低优先级CLR PT1CLR PT1;定时器;定时器/计数器计数器T1T1为低优先级为低优先级 CLR PT2CLR PT2;定时器;定时器/计数器计数器T2T2为低优先级为低优先级 (2)用字节操作指令)用字节操作指令MOV IPMOV IP,#05H#05H上述的两段程序对上述的两段程序对IP的设置是相同的。的设置是相同的。29304.4 响应中断请求的条件响应中断请求的条件 中断请求被响应,中断请求被响应,必须满足以下必要条件:必须满足以下必要条件:(1)总中断允许总中断允许开关接通,即开关接通,
30、即IE寄存器中的中断总允许位寄存器中的中断总允许位EA=1。(2)该中断源)该中断源发出中断请求发出中断请求,即,即对应的中断请求标志为对应的中断请求标志为“1”。(3)该中断源的)该中断源的中断允许位中断允许位EA=1,即该中断被允许。,即该中断被允许。(4)无同级无同级或或更高级中断更高级中断正在被服务。正在被服务。当当CPU查询到有效的中断请求时,在满足上述条件时,紧查询到有效的中断请求时,在满足上述条件时,紧接着就进行中断响应。接着就进行中断响应。3031中断响应的过程:中断响应的过程:首先由硬件首先由硬件自动生成一条长调用指令自动生成一条长调用指令“LCALL addr16”。就是程
31、序存储区中就是程序存储区中相应的中断入口地址相应的中断入口地址。例如,例如,对于外部中断对于外部中断1的响应,硬件自动生成的长调用指的响应,硬件自动生成的长调用指令为令为LCALL 0013H 首先将程序计数器首先将程序计数器PC的内容的内容压入堆栈压入堆栈以保护断点,再将以保护断点,再将中断入口地址装入中断入口地址装入PC,使程序转向响应中断请求的中断入,使程序转向响应中断请求的中断入口地址。口地址。各中断源服务程序的各中断源服务程序的入口地址入口地址(也称中断矢量)是固定(也称中断矢量)是固定的的,如表,如表4-2所示。所示。3132 两个中断入口间只相隔两个中断入口间只相隔8字节字节,难
32、以安放一个完整的中断,难以安放一个完整的中断服务程序。因此,服务程序。因此,通常在中断入口地址处放置一条无条件转通常在中断入口地址处放置一条无条件转移指令移指令,使程序执行转向中断服务程序入口。,使程序执行转向中断服务程序入口。3233 中断响应是有条件的,当遇到下列中断响应是有条件的,当遇到下列三种情况三种情况之一时,中断之一时,中断响应被封锁:响应被封锁:(1)CPU正在处理同级或更高优先级正在处理同级或更高优先级的中断。的中断。(2)所查询的机器周期)所查询的机器周期不是当前正在执行指令的最后一个机不是当前正在执行指令的最后一个机器周期器周期。只有在当前指令执行完毕后,才能进行中断响应,
33、。只有在当前指令执行完毕后,才能进行中断响应,以确保当前以确保当前指令执行的完整性指令执行的完整性。(3)正在执行的指令是)正在执行的指令是RETI或是访问或是访问IE或或IP的指令。因为按的指令。因为按照照AT89S52中断系统的规定,在执行完这些指令后,需要再中断系统的规定,在执行完这些指令后,需要再执行完一条指令,才能响应新的中断请求。执行完一条指令,才能响应新的中断请求。如果存在上述三种情况之一,如果存在上述三种情况之一,CPU将丢弃中断查询结果,将丢弃中断查询结果,不能对中断进行响应。不能对中断进行响应。33344.5 外部中断的响应时间外部中断的响应时间 使用使用外部中断外部中断时
34、,需考虑从时,需考虑从外部中断请求到转向中断入口地外部中断请求到转向中断入口地址所需的时间址所需的时间。外部中断的外部中断的最短最短响应时间为响应时间为3个机器周期个机器周期。其中中断请求。其中中断请求标标志位查询占志位查询占1个机器周期个机器周期,而这个机器周期,而这个机器周期恰好处于指令的最恰好处于指令的最后一个机器周期。后一个机器周期。在这个机器周期结束后,中断即被响应,在这个机器周期结束后,中断即被响应,CPU接着执行一条接着执行一条硬件子程序调用指令硬件子程序调用指令LCALL到相应中断服到相应中断服务程序入口,务程序入口,需要需要2个机器周期个机器周期。外部中断响应的外部中断响应的
35、最长最长时间为时间为8个机器周期。个机器周期。在在CPU进行中断进行中断标志查询时,刚好才开始执行标志查询时,刚好才开始执行RETI或访问或访问IE或或IP的指令,需的指令,需执行完指令再继续执行一条指令后,才响应中断。执行完指令再继续执行一条指令后,才响应中断。3435 执行执行RETI或访问或访问IE或或IP的指令,最长需要的指令,最长需要2个机器周期个机器周期。接着再执行一条指令,最长指令(乘法指令接着再执行一条指令,最长指令(乘法指令MUL和除法指令和除法指令DIV)来算,也只有)来算,也只有4个个机器周期机器周期。再加上硬件子程序调用指。再加上硬件子程序调用指令令LCALL的执行,需
36、要的执行,需要2个个机器周期机器周期,所以,外部中断响应,所以,外部中断响应的最长时间为的最长时间为8个机器周期。个机器周期。如果已经在如果已经在处理同级或更高级中断处理同级或更高级中断,外部中断请求的响,外部中断请求的响应时间取决于正在执行的中断服务程序的处理时间,这种情应时间取决于正在执行的中断服务程序的处理时间,这种情况下,响应时间就无法计算了。况下,响应时间就无法计算了。这样,在一个这样,在一个单一中断单一中断的系统里,的系统里,AT89S52单片机对外单片机对外部中断请求的响应时间总是在部中断请求的响应时间总是在38个机器周期个机器周期之间。之间。35364.6 外部中断的触发方式选
37、择外部中断的触发方式选择 两种触发方式:两种触发方式:电平触发电平触发方式和方式和跳沿触发跳沿触发方式。方式。4.6.1 电平触发方式电平触发方式 外部中断申请触发器的状态随着外部中断申请触发器的状态随着CPU在每个机器周期采样在每个机器周期采样到的外部中断输入引脚的电平变化而变化。到的外部中断输入引脚的电平变化而变化。在在中断服务程序返回之前中断服务程序返回之前,外部中断请求输入必须无效外部中断请求输入必须无效(即外(即外部中断请求输入已由低电平变为高电平),否则会再次响应中部中断请求输入已由低电平变为高电平),否则会再次响应中断。断。所以本方式所以本方式适合于适合于外部中断外部中断以低电平
38、输入以低电平输入且中断服务程序且中断服务程序能能清除外部中断请求源清除外部中断请求源(即外中断输入电平又变为高电平)的(即外中断输入电平又变为高电平)的情况。情况。36374.6.2 跳沿触发方式跳沿触发方式 外部中断申请触发器能外部中断申请触发器能锁存外部中断输入线上的锁存外部中断输入线上的负跳变负跳变。即使不能响应,中断请求标志不丢失。即使不能响应,中断请求标志不丢失。相继连续两次采样,一个机器周期为高,下一个机器周相继连续两次采样,一个机器周期为高,下一个机器周期采样为低,则中断申请触发器置期采样为低,则中断申请触发器置1,直到,直到CPU响应此中断响应此中断时,才清时,才清0。输入的负
39、脉冲宽度至少保持输入的负脉冲宽度至少保持12个时钟周期,才能被采样个时钟周期,才能被采样到。适合于以负脉冲形式输入的外部中断请求。到。适合于以负脉冲形式输入的外部中断请求。4.7 中断请求的撤销中断请求的撤销 某个中断请求被响应后,就存在着一个中断请求的撤销某个中断请求被响应后,就存在着一个中断请求的撤销问题。问题。37381定时器定时器/计数器计数器T0、T1中断请求的撤销中断请求的撤销 硬件会自动把中断请求标志位(硬件会自动把中断请求标志位(TF0或或TF1)清)清0,自动撤自动撤销销。2外部中断请求的撤销外部中断请求的撤销 (1)跳沿方式外部中断请求的撤销)跳沿方式外部中断请求的撤销 包
40、括两项:包括两项:中断标志位清中断标志位清0和和外中断信号的撤销。外中断信号的撤销。中断标志位清中断标志位清0是在中断响应后由硬件自动完成的。是在中断响应后由硬件自动完成的。外中断请求信号的撤销外中断请求信号的撤销,由于跳沿信号过后也就消失了,由于跳沿信号过后也就消失了,自动撤销。自动撤销。3839 (2)电平方式外部中断请求的撤销)电平方式外部中断请求的撤销 电平方式外中断请求的撤销,其中中断请求标志自动撤销,电平方式外中断请求的撤销,其中中断请求标志自动撤销,但中断请求信号的低电平可能继续存在,为此,除了标志位清但中断请求信号的低电平可能继续存在,为此,除了标志位清“0”之外,还需在中断响
41、应后之外,还需在中断响应后把中断请求信号输入引脚从把中断请求信号输入引脚从低低电平电平强制改变为强制改变为高电平高电平,如,如图图4-9所示。所示。39图图4-9 电平方式的外部中断请求的撤销电路电平方式的外部中断请求的撤销电路40 由图由图4-9,用,用D触发器锁存触发器锁存外来的中断请求外来的中断请求低电平低电平,并通,并通过过D触发器的输出端触发器的输出端Q接到接到INT0*(或(或 INT1*)。所以,增加)。所以,增加的的D触发器不影响中断请求。触发器不影响中断请求。中断响应后,利用中断响应后,利用D触发器的触发器的SD端接端接AT89S51的的P1.0端。端。因此,只要因此,只要P
42、1.0端输出一个负脉冲就可以使端输出一个负脉冲就可以使D触发器置触发器置“1”,撤销低电平的中断请求信号。撤销低电平的中断请求信号。负脉冲负脉冲可在中断服务程序中增加如下指令:可在中断服务程序中增加如下指令:ORL P1,#01H;P1.0为为“1”ANL P1,#0FEH;P1.0为为“0”ORL P1,#01H;P1.0为为“1”40413 3串行口中断请求的撤销串行口中断请求的撤销 响应串行口的中断后,响应串行口的中断后,CPUCPU无法知道是接收中断还是发送无法知道是接收中断还是发送中断,还需测试这两个中断标志位,以中断,还需测试这两个中断标志位,以判定是接收操作还是判定是接收操作还是
43、发送操作发送操作,然后才清除。所以串行口中断请求的撤销,然后才清除。所以串行口中断请求的撤销只能使只能使用用软件软件的方法的方法,在中断服务程序中进行,即用如下指令在中,在中断服务程序中进行,即用如下指令在中断服务程序中对串行口中断标志位进行清除:断服务程序中对串行口中断标志位进行清除:CLR TI CLR TI ;清;清TITI标志位标志位CLR RI CLR RI ;清;清RIRI标志位标志位4 4定时器定时器/计数器计数器T2T2中断请求的撤销中断请求的撤销 定时器定时器/计数器计数器T2T2的中断请求包括两种:的中断请求包括两种:TF2TF2和和EXF2EXF2。上述两种中断请求,在满
44、足中断响应条件时,上述两种中断请求,在满足中断响应条件时,CPUCPU都将响应都将响应其中断请求,转向同一个中断矢量地址。因此,必须在其中断请求,转向同一个中断矢量地址。因此,必须在T2T2的的4142中断服务程序中对中断服务程序中对TF2TF2和和EXF2EXF2两个中断请求标志位进行两个中断请求标志位进行查询,查询,然后正确转入对应的中断处理程序。然后正确转入对应的中断处理程序。中断结束后,中断请求标志位中断结束后,中断请求标志位TF2或或EXF2必须由软件清必须由软件清0。所以定时器所以定时器/计数器计数器T2中断请求的撤销只能使用软件的方法,中断请求的撤销只能使用软件的方法,在中断服务
45、程序返回前完成。在中断服务程序返回前完成。4.8 4.8 中断服务子程序的设计中断服务子程序的设计 中断系统的运行必须与中断服务子程序配合才能正确使中断系统的运行必须与中断服务子程序配合才能正确使用。设计中断服务子程序需要首先明确以下几个问题。用。设计中断服务子程序需要首先明确以下几个问题。431中断服务子程序设计的任务中断服务子程序设计的任务任务有下列任务有下列4条:条:(1)设置中断允许控制寄存器设置中断允许控制寄存器IE,允许相应的中断请求源,允许相应的中断请求源中断。中断。(2)设置中断优先级寄存器设置中断优先级寄存器IP,确定所使用的中断源的优,确定所使用的中断源的优先级。先级。(3
46、)若是外部中断源若是外部中断源,还要设置中断请求的,还要设置中断请求的触发方式触发方式决定决定采用电平触发方式还是跳沿触发方式。采用电平触发方式还是跳沿触发方式。(4)编写中断服务子程序编写中断服务子程序,处理中断请求。,处理中断请求。4344前前3条一般放在主程序的初始化程序段中。条一般放在主程序的初始化程序段中。【例例5-35-3】假设允许假设允许外部中断外部中断0中断中断,设定为,设定为高级高级中断,采中断,采用跳沿触发方式,用跳沿触发方式,其他中断源为低级中断其他中断源为低级中断。初始化程序如下:。初始化程序如下:SETB EA;EA 位置位置1,总中断开关位开放,总中断开关位开放SE
47、TB EX0;EX0位置位置1,允许外部中断,允许外部中断0产生中断产生中断SETB PX0;PX0位置位置1,外部中断,外部中断0为高优先级中断为高优先级中断SETB IT0;IT0位置位置1,外部中断,外部中断0为跳沿触发方式为跳沿触发方式44452 2采用中断时的主程序结构采用中断时的主程序结构 程序必须先从程序必须先从主程序起始地址主程序起始地址0000H0000H执行。所以,执行。所以,在在0000H0000H起始地址的几个字节中,用无条件转移指令起始地址的几个字节中,用无条件转移指令,跳向主,跳向主程序。程序。另外,各中断入口地址之间依次相差另外,各中断入口地址之间依次相差8 8字
48、节,中断服务子字节,中断服务子程序稍长就超过程序稍长就超过8 8字节,这样中断服务子程序就占用了其他字节,这样中断服务子程序就占用了其他的中断入口地址,影响其他中断源的中断处理。为此,的中断入口地址,影响其他中断源的中断处理。为此,一般一般在进入中断后,用在进入中断后,用一条无条件转移指令一条无条件转移指令,把中断服务子程序,把中断服务子程序跳转到跳转到远离其他中断入口的入口地址处。远离其他中断入口的入口地址处。常用的常用的主程序结构主程序结构如下:如下:4546 注意:注意:如果有多个中断源,就有多个如果有多个中断源,就有多个“ORG X1X2X3X4H”的入口地址,多个的入口地址,多个“中
49、断入口地址中断入口地址”必须依次由小到大排列必须依次由小到大排列。主程序主程序MAIN的起始地址的起始地址Y1Y2Y3Y4H,根据具体情况来安排,根据具体情况来安排。4647473中断服务子程序的流程中断服务子程序的流程 中断服务子程序的基本流程如中断服务子程序的基本流程如图图4-10所示所示。下面对有关中断。下面对有关中断服务子程序执行过程中的一些问题进行说明。服务子程序执行过程中的一些问题进行说明。48图图4-10 中断子服务程序的基本流程中断子服务程序的基本流程49(1)现场保护和现场恢复)现场保护和现场恢复 现场是指单片机中某些寄存器和存储器单元中的数据或状态。现场是指单片机中某些寄存
50、器和存储器单元中的数据或状态。为使中断服务子程序的执行不破坏这些数据或状态,因此要送为使中断服务子程序的执行不破坏这些数据或状态,因此要送入堆栈保存起来,这就是入堆栈保存起来,这就是现场保护现场保护。现场保护现场保护一定要一定要位于中断处理程序的位于中断处理程序的前面前面。中断处理结束后,。中断处理结束后,在返回主程序前,则需要把保存的现场内容从堆栈中弹出恢复在返回主程序前,则需要把保存的现场内容从堆栈中弹出恢复原有内容,这就是原有内容,这就是现场恢复现场恢复。现场恢复现场恢复一定要位于一定要位于中断处理的中断处理的后面后面。堆栈操作指令:堆栈操作指令:“PUSH direct”和和“POP