1、第4章 中断系统,一般计算机和外设之间不能直接相连,而是通过不同的接口电路来达到彼此之间的信息传送。 这种通信方式通常可以分为同步传送、异步传送、中断传送和DMA(直接存储器存取)传送。但中断传送最为重要,也最为普遍。 中断需要解决两个主要问题: 如何从主程序转到中断服务程序; 如何从中断服务程序返回主程序。,中断最为显著的优点是: (1)速度匹配有效地解决了快速CPU与慢速外设之间的矛盾,可使CPU与外设并行工作,大大提高了工作效率。 (2)实时处理可以及时处理控制系统中许多随机产生的参数与信息,即计算机具有实时处理的能力,从而提高了控制系统的性能。 (3)故障诊断使系统具备了处理故障的能力
2、,提高了系统自身的可靠性。,相关概念,中断: 处理器暂停执行当前程序,转而处理随机发生的事件,处理完毕后再返回到断点处继续执行原来程序的过程。 中断源: 可以引起中断的事件称之为中断源。 中断由中断源产生,不同的中断源有不同的中断服务程序 中断请求: 中断源在需要时向CPU提出中断请求。 通常是以电信号形式通知CPU。,中断响应: CPU检测到外围设备的中断请求信号后,在CPU允许中断的情况下可以将程序自动转入该中断源的中断服务程序并执行。 中断服务: 为解决中断源产生中断的原因而编制的程序。 中断系统: 中断源、中断方式 、中断控制寄存器、中断响应、中断请求的撤除。,中断的优先级 如果正在执
3、行主程序时只有1个中断源请求中断,而这时CPU又是对中断开放的,那么这个中断立即得到响应。 然而由于中断是随机产生的,中断源一般又不止1个,因此往往会出现这样的情况: 几个中断源同时请求中断; 或者当某一个中断正在响应中(即正在执行该中断源的中断服务程序),又有其它的中断源请求中断 这时中断系统应如何处理?,在一般情况下,首先把各个中断源分成若干个优先级,然后再按如下原则进行处理: (1)不同级的中断源同时申请中断时先高后低; (2)同级的中断源同时申请中断时事先规定 (3)处理低级中断又收到高级中断请求时停低转高 (4)处理高级中断又收到低级中断请求时高不理低,中断嵌套 当CPU正在响应某一
4、中断源的请求,执行为其服务的中断服务程序时,如果有优先级更高的中断源发出请求,CPU将中止正在执行的中断服务程序而转入为新的中断源服务,等新的中断服务程序执行完后,再返回到被中止的中断服务程序,这一过程称为中断嵌套。 中断嵌套可以有多级,具体级数原则上不限,只取决于堆栈深度。,中断优先级3#2#1#,中断的优先级与中断嵌套,中断请求的撤除 CPU响应中断请求后,在中断返回(执行RETI指令)前,必须撤除请求,否则会错误地再一次引起中断过程。,中断系统的功能 实现中断屏蔽 进行中断优先权排队 实现中断嵌套 自动响应中断 实现中断服务 实现中断返回,MCS-51的中断系统,MCS-51系列单片机的
5、中断系统属于8位单片机中功能较强的中断系统 它可以提供5个中断源,每个中断源有两个中断优先级别可供选择,可实现两级中断服务程序嵌套。 此外,所有中断均可由软件设定为允许中断或禁止中断,也就是说,用户可以用关中断指令(或复位)来屏蔽所有的中断请求,也可以用开中断指令使CPU接受中断请求。,MCS-51的中断源,中断源有两种形式:可屏蔽中断源 内部中断源不可屏蔽中断源 外部中断源 MCS-51有5个固定的可屏蔽中断源: 2个外部中断源:外中断0即INT0外中断1即INT1 3个内部中断源:定时/计数器0即T0溢出中断TF0定时/计数器1即T1溢出中断TF1串口I/O中断请求TI/RI,MCS-51
6、的中断源,中断系统的结构,外部中断源 INT0由P3.2端口线引入,低电平或下降沿引起。 INT1由P3.3端口线引入,低电平或下降沿引起。 内部中断源 T0:定时/计数器0中断,由T0回零溢出引起。 T1:定时/计数器1中断,由T1回零溢出引起。 TI/RI:串行I/O中断,完成一帧字符发送/接收引起。,中断系统的结构框图,中断控制,各中断源的中断申请是否能被CPU响应,受CPU控制;CPU对各中断源的中断响应有优先级别的选择;这些都由单片机内部中断系统的控制寄存器来决定。 与中断控制有关的控制寄存器有四个: TCON:定时控制寄存器 SCON:串行口控制寄存器 IE:中断允许控制寄存器 I
7、P:中断优先级控制寄存器,1.定时控制寄存器TCON(特殊功能寄存器) 字节地址为88H 锁存4个中断源的中断请求信号: IT0、IT1为外部中断触发方式控制位,为0则对应的外部中断为低电平触发,为1则对应的中断为下降沿触发 IE0、IE1为对应的外部中断请求标志位。 IF0、IF1分别为T0和T1的溢出中断请求标志位。 在中断允许时,IE0、IE1、IF0、IF1当CPU响应中断时会自动清零。,2.串行口控制寄存器SCON(特殊功能寄存器) 字节地址为98H SCON的低2位锁存串行口的接收中断和发送中断标志,其格式如表所示。,SM2=0单机发送/接收工作方式 SM2=1允许多机通信,TI:
8、串行口发送中断标志 TI=1表示串行口发送器正在向CPU申请中断。 在串行口以方式0发送时,每当发送完8位数据后,由硬件置位TI; 若以方式1、2、3发送时,在发送停止位的开始时置位TI。 值得注意的是当CPU响应该中断后,转向中断服务程序时并不复位TI,TI必须由用户在中断服务程序中用软件清0(可用CLRTI或其它指令)。,RI:串行口接收中断标志 RI为1表示串行口接收器正向CPU申请中断 若串行口接收器允许接收并以方式0工作,则每当接收到第8位数据时置位RI; 若以方式1、2、3工作,且SM2=0时,则每当接收器接收到停止位的中间时置位RI; 当串行口以方式2或方式3工作,且SM2=1时
9、,仅当接收到的第9位数据RB8为1后,同时还要接收到停止位的中间时置位RI。 同样RI必须由用户在中断服务程序中清0。,3.中断允许寄存器IE(特殊功能寄存器) 字节地址A8H,位地址分别是A8HAFH。 IE控制CPU对中断源总的开放或禁止以及每个中断源是否允许中断。 其格式如图所示,4.中断优先寄存器IP(特殊功能寄存器) 字节地址为B8H,位地址分别是B8HBFH. IP用来锁存各中断源优先级的控制位 其格式如图所示:,MCS-51中断优先级,MCS-51单片机的中断系统对优先级的控制比较简单,只规定了两个中断优先级,对于每一个中断源均可编程为高优先级中断或低优先级中断。 在同1个优先级
10、中,对5个中断源的优先次序安排如下:,外部中断0(INT0) 定时器/计数器T0溢出中断(T0) 外部中断1(INT1) 定时器/计数器T1溢出中断(T1) 串行口中断(RI+TI),中断响应,中断响应可以分为以下几个步骤: 1、保护断点:即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。 2、寻找中断入口:根据5个不同的中断源所产生的中断,查找5个不同的入口地址。在这5个入口地址处存放有中断处理程序。 3、执行中断服务程序。 4、中断返回:执行完中断指令后,就从中断处返回到主程序,继续执行。,中断响应条件,单片机响应中断的条件为中断源有请求信号(中断允许寄存器IE相应位置1),且CPU
11、处于开中断状态(即EA=1)。这样,在每个机器周期内,单片机对所有中断源都进行顺序检测,并可在任1个周期的S6期间,找到所有有效的中断请求,还对其优先级进行排队。 但是,必须满足下列条件: (1)无同级或高级中断正在服务; (2)现行指令执行到最后1个机器周期且已结束; (3)若现行指令为RETI或需访问特殊功能寄存器IE或IP的指令时,执行完该指令且紧随其后的另1条指令也已执行完。 单片机便在紧接着的下1个机器周期的S1期间响应中断。否则,将丢弃中断查询的结果。,中断响应时间,所谓中断响应时间是指从查询中断请求标志位到转入中断服务程序入口地址所需的机器周期数(对单一中断源而言)。 响应中断最
12、短需要3个机器周期。若CPU查询中断请求标志的周期正好是执行1条指令的最后1个机器周期,则不需等待就可以响应。而响应中断执行1条长调用指令需要2个机器周期,加上查询的1个机器周期,一共需要3个机器周期才开始执行中断服务程序。,中断处理过程,1关中断:置位中断优先级有效触发器,即屏蔽/关闭其它同级和低级中断请求信号。 2保护断点:将断点地址压入堆栈保存,即当前PC值入栈。 3寻找中断源:调用中断服务程序入口地址PC,转入中断服务。 4保护现场:将中断服务程序使用的所有寄存器内容入栈。 5中断处理:执行中断源所要求的程序段。 6恢复现场:恢复被使用寄存器的原有内容。 7开中断:允许接受其它中断请求
13、信号。 8中断返回:执行RETI指令,栈顶内容PC,程序跳转回断点处。,中断响应和中断返回,中断响应周期时序 每个机器周期采样中断标志位,若有中断请求,将在下一个机器周期按优先级顺序进行中断查询。 中断响应阻断 1 . 当CPU未执行完一条指令。 2当有同级或高级中断服务。 3执行RETI指令或访问IE、IP的指令后,不能立即响应中断。 中断返回 中断返回指令: RETI=RET指令+通知CPU中断服务已结束。,断点,主程序,执行中断服务程序 对中断请求进行处理,有中断请求,继续执行,返回断点,根据中断源及 其中断入口地址 找到中断服务程序,响应中断请求,返回主程序,单片机的中断为固定入口式中
14、断,即一响应中断就转入固定入口地址执行中断服务程序。具体入口地址如下: 中断源 入口地址 INT0 0003 T0 000BH INT1 0013H T1 001BH RI/TI 0023H 在这些单元中往往是一些跳转指令,跳到真正的中断服务程序,这是因为给每个中断源安排的空间只有8个单元。,中断请求的撤除 对于定时器T0与T1的中断请求及边沿触发方式的外部中断0和1来说,CPU在响应中断后用硬件清除了相应的中断请求标志TF0、TF1、IE0与IE1,即自动撤除了中断请求。,外部中断源的扩展,51系列单片机只有2个外部中断源信号INT0和INT1,如果应用中有多个外部中断源要求单片机响应,通常
15、的做法是扩展中断控制芯片8259A。 一片8259A可以扩展8个外部中断源,通过级联方式还可以构成更多的中断源。 除此之外,在如果所要扩展的外部中断源不太多的情况下,还可以利用单片机的P1口来扩展。,ITS1ITS4是4个外部中断源; 当其中一个发出中断请求时,除了提供一个中断请求信号给INT0,还需要给P1口相应引脚一个高电平。 这4个外部中断源的优先级由软件确定,即由检测P1.x引脚电平的顺序决定。,中断程序举例,在中断服务程序编程时,首先要对中断系统进行初始化,也就是对几个特殊功能寄存器的有关控制位进行赋值。 具体来说,就是要完成下列工作: (1)打开全局中断允许位EA(在IE中); (
16、2)打开相应的中断源; (3)设置中断源的优先级别; (4)设置外部中断的触发方式(是电平触发还是边沿触发),例1:若规定外部中断0为电平触发方式,高优先级,试写出有关的初始化程序。 解:一般可采用位操作指令来实现: SETB EA ;开中断 SETB EX0 ;允许外中断0中断 SETB PX0 ;外中断0定为高优先级 CLR IT0 ;电平触发 还可采用字节型指令来实现: MOV IE, #81H ;EA=1,EX0=1 ORL IP, #01H ;PX0=1 ANL TCON, #0FEH ; IT0=0,例2:若规定外部中断1为边沿触发方式,低优先级,在中断服务程序中将寄存器B的内容左
17、环移一位,B的初值设为01H。试编写主程序与中断服务程序。 解:程序如下 ORG 0000H ;主程序 LJMP MAIN ;主程序转至MAIN处 ORG 0013H ;INT1中断服务程序入口地址 LJMP INT ;中断服务程序转至INT处,MAIN:SETB EA ;开中断SETB EX1 ;允许外中断1中断CLR PX1 ;设为低优先级SETB IT1 ;边沿触发MOV B,01H;设B的初值 HALT:SJMP HALT;暂停等待中断INT: MOV A,B ;ABRL A ;左环移一位MOV B,A ;回送RETI ;中断返回,例3:试编程实现MCS-51单片机单步工作。电路如图所
18、示,要求利用外部中断来实现每按一次按键执行一条指令。 解:主程序:CLR IT0SETB EX0SETB PX0SETB EA中断服务程序: PT0:JNB P3.2,PT0PT1:JB P3.2,PT1RETI,有以下几点需要说明: (1)由于从0003H到0023H之间分布了5个中断源的入口地址,因此在一般情况下,主程序与中断服务程序均用长转移指令移至其它区域。 (2)本例中未考虑保护现场与恢复现场的问题,是否需要,应视具体情况而定。 (3)本例是单级中断,若为多级中断,则情况要复杂得多。 (4)主程序处于暂停等待中断只是为了举例方便起见,在实际的单片机控制系统中一般是不会这样用的。,处理
19、外部中断举例,要求每次按动按键,使外接发光二极管LED改变一次亮灭状态。 设INT0输入按键信号,P1.0输出改变LED状态。 1.跳变(边沿)触发: 每次跳变引起一次中断请求。,ORG 0000H ;复位入口AJMP MAINORG 0003H ;INT0中断入口 AJMP PINT0ORG 0100H ;主程序 MAIN: MOV SP,#40H ;设栈底SETB EA ;开总允许开关SETB EX0 ;开INT0中断SETB PX0 ;外中断0定为高优先级SETB IT0 ;负跳变触发中断H: SJMP H ;执行其它任务ORG 0200H ;中断服务程序 PINT0:CPL P1.0
20、;P1.0状态取反,改变LEDRETI ;返回主程序,2.电平触发:避免一次按键引起多次中断响应。 1)软件等待按键释放。 2)硬件清除中断信号。,ORG 0000H ;复位入口 AJMP MAINORG 0003H ;中断入口 AJMP PINT0ORG 0100H ;主程序 MAIN: MOV SP,#40H ;设栈底SETB EA ;开总允许开关SETB EX0 ;开INT0中断SETB PX0 ;外中断0定为高优先级CLR IT0 ;低电平触发中断 H: SJMP H ;执行其它任务ORG 0200H ;中断服务程序 PINT0:CPL P1.0 ;改变LED WAIT:JNB P3.
21、2,WAIT;等按键释放RETI ;返回主程序,图为单片机数据传输示意图。 外设数据经P1口输入单片机,每准备好一个数据, 外设发出选通信号,经触发器和非门至INT0。,数据传送过程: 外设每准备好一个数据后,发出选通信号,使触发器输出1再经非门得0至INT0,向CPU发出中断请求; CPU 响应这个中断请求后,在中断处理程序中先撤除中断请求信号 (通过P3.0=0,使INT0=1) ,再由P1口输入数据到单片机内部。,ORG 0000H START:LJMP MAINORG 0003HLJMP PINT0ORG 0030H ;主程序 MAIN: CLR IT0 ;低电平触发SETB EASE
22、TB EX0 ;开中断MOV DPTR,#1000H.ORG 0100H PINT0:PUSH PSW;中断处理程序PUSH ACCCLR P3.0 ;撤除INT0,NOP NOP MOV A,P1 ;输入数据 MOVX DPTR,A ;保存数据 INC DPTR . POP ACC ;恢复现场 POP PSW RETI ;返回主程序,例:定时器中断的实现,要求:从P1.0端口线上输出周期为2ms的方波脉冲,设单片机晶振频率fosc=6MHz。 方法:利用定时器T0作1ms定时,达到定时值后引起中断,在中断服务程序中使P1.0的状态取一次反,并再次定时1ms;然后循环执行。 定时初值:MC=1
23、2/fosc=2s,定时1ms所需机器周期个数=500=01F4H,设T0为工作方式1,则定时初值为FE0CH。,ORG 0100H ;从0100H地址开始安排程序 START:MOV TMOD,#01H;T0为定时器状态,工作方式1MOV TL0,#0CH ;T0的低位定时初值MOV TH0,#0FEH ;T0的高位定时初值SETB EA ;1EA,亦即允许全局中断SETB ET0 ;1ET0,亦即允许T0中断MOV TCON,#10H ;打开T0AJMP $ ;动态暂停ORG 000BH ;T0中断服务程序入口地址MOV TL0,#0CH ;重置定时器初值MOV TH0,#0FEHCPL P1.0 ;P1.0取反RETI ;中断返回,