第4章 中断技术 一个完整的微机系统是由硬件和软件共同构成的。微机系统的硬件有CPU、存储器和I/O口,外设组成。CPU与存储器之间的信息交换比较简单,而CPU与外设之间进行信息交换之前必须确定外设是否准备好,即选择I/O传送方式。I/O传送方式有4种:无条件、查询、中断和DMA。本章学习中断传送方式的有关内容。 4.1 中断概述 4.2 MCS-51中断系统
4.1 中断概述 返回 通过指令引起的中断。 1、中断的定义: 4.1 中断概述 通过指令引起的中断。 1、中断的定义: 中断是指如下过程:CPU与外设同时工作,CPU执行主程序,外设做准备工作,当外设准备好时向CPU发中断请求信号,若条件满足,则CPU终止主程序的执行,转去执行中断服务程序,在中断服务程序中CPU与外设交换信息,待中断服务程序执行完后,CPU再返回刚才终止的主程序继续执行。 2、中断系统的定义: 中断系统是指为了实现中断传送过程在CPU内外设置的硬件和有关中断的指令。 3、中断源: ⑴中断源的定义:中断源是指引起中断请求的来源。 ⑵中断源的分类: ①软中断和 ②硬中断 4、中断处理的全过程 中断处理的全过程分成3个阶段:中断请求、中断响应和中断服务。 5、多重中断与中断优先级 ⑴ 当系统中有多个设备提出中断请求时,多个外设的中请信号要通过门电路送到CPU的中请输入端,使CPU能收到多个外设提出的中请。 ⑵ CPU在收到多个外设的请求后,按中断处理原则处理中断。 ⑶ 确定优先级的方法解决优先级的问题一般可有三种方法:软件查询法、简单硬件方法及专用硬件方法(采用可编程的中断控制器芯片,如Intel8259A)。 可以发中断请求信号的外设或过程。如打印机、驱动器、故障源和A/D转换器等。 返回
对于非屏蔽中请输入线上的中请,CPU无条件的响应。 中断请求 1.CPU都有中请输入线。 中请输入线有2类:非屏蔽中请输入线和可屏蔽中请输入线;有的CPU只有可屏蔽中请输入线,而有的CPU则2种都有。 2.CPU的开、关中断。 CPU内有1个中断请求触发器IFF,当IFF=1时,称CPU开中断,此时CPU可以处理收到的可屏蔽中请;当IFF=0时,称CPU关中断,虽然 CPU收到了可屏蔽中请,但不处理(响应)它。 3.CPU内有中断请求检测电路。 CPU每执行一条指令,其内的中断请求检测电路都要检测中断请求输入端的状态: ①先测NMI,若NMI有效,则CPU进入非屏蔽中响阶段。 ②若NMI无效,则检测INT的状态。 ③若INT有效且CPU开中断,则CPU进入可屏蔽中响阶段。 ④若INT有效但CPU关中断,则CPU执行下一条指令。 ⑤若INT无效,则CPU执行下一条指令。 返回
中断响应 1.中断响应定义 中断源向CPU发出中断请求,若其优先级别最高,CPU在满足一定的条件下,可以中断当前程序的运行,保护好被中断的主程序的断点及现场信息。然后,根据中断源提供的信息,找到中断服务子程序的入口地址,转去执行新的程序段,这就是中断响应。 2.中断响应条件 CPU响应中断是有条件的,如内部允许中断、中断未被屏蔽、当前指令执行完等。 3.任何CPU在中断响应阶段一定做如下工作: ①保护断点和②给出中断服务程序入口地址(将中断服务程序的首地址送给PC,为CPU执行装段服务程序创造条件);有的CPU还会做自动关中断等操作 4.给出中断服务程序入口地址的方法有2种: ⑴ 固定入口式(中断服务程序的首地址固定,直接将此规定地址送给PC) ⑵ 矢量式。 返回
中断服务 中断服务子程序是由用户根据自己的需要编制的,编制时要注意如下问题: 1.保护现场: 由一系列的PUSH指令完成。目的是为了保护那些与主程序中有冲突的寄存器,(如A,PSW,工作寄存器等),如果中断服务子程序中所使用的寄存器与主程序中所使用的寄存器等没有冲突的话,这一步骤可以省略。 2.开/关中断: 由SETB或CLR指令实现。目的是为了能控制中断。 3.中断服务: 与中断源实现信息交换。 4.恢复现场: 由一系列的POP指令完成。是与保护现场对应的,但要注意数据恢复的次序,以免混乱。 5.返回: 使用中断返回指令RETI。不能使用一般的子程序返回指令RET,因为RETI指令除了能恢复断点地址外,还能恢复中断响应时的标志寄存器的值,而这后一个动作是RET指令不能完成的。 中断服务子程序结构图 返回
中断服务子程序结构图 保护现场 开中断 与外设交换信息 恢复现场 中断返回 返回
中断处理原则 返回 1.当多个中断源同时提出中请时,CPU按优先级的高低有高到低依次为外设服务。
4.2.1 MCS-51中断系统结构 4.2.2 MCS-51中断处理过程 4.2.3 MCS-51中断系统应用 返回
4.2.1 MCS-51中断系统结构 MCS51系列单片机上集成有中断系统,从使用者的角度出发,MCS51的中断系统就是一些SFR,如IE、IP、TCON、SCON。 中断源 TCON IE IP 高 INT0 EA EX0 PX0 0003H 外设 1 000BH IE0 0013H 001BH EX1 PX1 1 0023H 定时器0 TF0 INT1 外设 ET0 PT0 PC 1 IE1 ET1 PT1 1 定时器1 TF1 0003H 000BH 0013H RI & ES PS 串行口 1 001BH TI 0023H 返回 SCON 低
MCS-51中断源 MCS51单片机有5个中断源。5个中断源分为2种:2个外中断(由P3.2和P3.3引入)和3个内中断(T0、T1和串口)。每个中断源对应一个中断标志位,当某个中断源有中请时,相应的中断标志位置1,各个中断源的中断标志位在TCON和SCON中。 中断源 TCON IE IP 高 INT0 EA EX0 PX0 0003H 外设 1 000BH IE0 0013H 001BH EX1 PX1 1 0023H 定时器0 TF0 INT1 外设 ET0 PT0 PC 1 IE1 ET1 PT1 1 定时器1 TF1 0003H 000BH 0013H RI & ES PS 串行口 1 001BH TI 0023H 返回 SCON 低
中断标志与TCON和SCON 1、MCS51单片机内部的中断检测电路检测到有中请后,将检测结果存于TCON、SCON中;每个中断源对应一个中断标志位,当某个中断源有中请时,相应的中断标志位置1,各个中断源的中断标志位在TCON和SCON中。 TCON:88H 可以按字节操作,也可以按位操作。 TCON:98H 可以按字节操作,也可以按位操作。 2、在每条指令结束时,CPU检测各个中断标志位,若中断标志位置1,则认为有中断请求。 3、外中断有2种触发方式:低电平和下降沿,由TCON中的TI0和 TI1决定。 ⑴ 当IT0=1,INT0为脉冲方式,后沿负跳变有效;当IT0=0,低电平有效。此位,可由软件置1或清0。 ⑵ 当IT1=1,INT1为脉冲方式,后沿负跳变有效;当IT1=0,低电平有效。此位可由软件置1或清0。 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 TI RI 返回
中断开放与中断允许控制寄存器 IE MCS-51单片机的5个中断源都是可屏蔽中断,也就是说用户可以通过软件方法来控制是否允许CPU去响应中断。CPU对中断源的中断开放(也称中断允许)或中断屏蔽(也称中断禁止)的控制是通过中断允许控制寄存器IE来实现的。 IE:A8H 可以按字节操作,也可以按位操作。 EA: 当EA=0时, 称CPU关中断。当EA=1时,称CPU开中断。 EX0:当EX0=0时,禁止INT0 申请中断;当EX0=1时,允许INT0 申请中断。 EX1:当EX1=0时,禁止INT1申请中断;当EX1=1时,允许INT1申请中断。 ET0:当ET0=0时, 禁止T0中断;当ET0=1时,允许T0中断。 ET1:当ET1=0时, 禁止T1中断;当ET1=1时,允许T1中断。 ES: 当ES=0时, 禁止串行口中断;当ES=1时,允许串行口中断 8051复位后IE=00H,说明CPU和各个中断源都关中断。 注意:单片机在响应中断后不会自动关中断,因此,如果在转入中断服务处理程序后,如果想禁止更高级的中断源的中断申请,可以用软件方式关闭中断。 例如:假定要开放外中断1和T1的溢出中断,屏蔽其他中断,则对应的中断允许控制寄存器内容应为10001100B,即中断允许控制字为8CH。 ①使用字节操作指令,可用一条指令MOV IE,#8CH完成。 ②使用位操作指令,则需三条指令SETB EX1;SETB ET1;SETB EA实现。 EA ES ET1 EX1 ET0 EX0 返回
返回 中断优先级与中断优先级寄存器 IP PS PT1 PX1 PT0 PX0 MCS-51单片机的中断系统对优先级的控制比较简单,只规定了两个中断优先级,对于每一个中断源均可编程为高优先级中断或低优先级中断,各中断源的优先级由中断优先级控制寄存器IP设定。 IP:B8H 可以按字节操作,也可以按位操作。 PX0:当PX0=0时,INT0 处于低级;当PX0=1时,INT0 处于高级。 PX1:当PX1=0时,INT1 处于低级;当PX1=1时,INT1 处于高级。 PT0:当PT0=0时,T0 处于低级;当PT0=1时,T0 处于高级。 PT1:当PT1=0时,T1 处于低级;当PT1=1时,T1处于高级 PS: 当PS=0时, 串行口处于低级;当PX0=1时,串行口处于高级。 8051复位后IP=00H,说明各个中断源都处于低级。 注意: 1、当五个中断源在同一个优先级的情况下INT0优先权最高,串行口优先权最低。在同一个优先级中,对五个中断源的优先次序安排如下: INT0→T0→INT1→T1→串口 (中断优先级从高到低) 2、对于外中断来说,可以用软件查询法和硬件排队电路法确定优先级。 3、通过对IP寄存器的编程,可以把五个中断源分别定义在两个优先级中,软件可以随时对IP的各位清0或置1。 例如 某软件中对寄存器IE、IP设置如下:MOV IE,#10001111B MOV IP,#00000110B 此时该系统中: ①CPU中断允许;允许外部中断0、外部中断1、定时/计数器0、定时/计数器1发出的中断申请。 ②允许中断源的中断优先次序为:定时/计数器0>外部中断1>外部中断0>定时/计数器1。 PS PT1 PX1 PT0 PX0 返回
返回 4.2.2 MCS-51中断处理全过程 1、中断请求 ⑴ MCS51单片机内部的中断检测电路随时检测各个中断源,检测到有每个中断源有中请后,将相应的中断标志位置1。 ⑵ CPU在每条指令结束时,检测各个中断标志位,若中断标志位置1,则认为有中断请求。 ⑶ CPU读取IE和IP的内容,若中断允许且满足如下条件,则在下一个机器周期进入中断响应阶段。 ① 没有同级或更高级的中断正在执行(否则必须等CPU为它们服务完之后,才能响应新中断请求。) ② 执行完的指令不是RETI或访问IE和IP的指令(否则必须另外执行一条指令后才能响应。) 2、中断响应 在中断响应阶段单片机做2件工作: ⑴ 断点地址压栈。 ⑵ 根据不同的中断源,将不同的固定地址送PC,从而转到不同的地方执行程序。 各个中断源的入口地址是:0003H、000BH、0013H、001BH、0023H。 INT0 T0 INT1 T1 串行口 注意:8051在响应了INT0、INT1、T0、T1的中断之后会自动清除它们的中断标志位,但不会清除串口的中断标志位。 3、中断服务 CPU响应中断后即转至中断服务程序的入口,执行中断服务程序。针对中断源的具体要求进行不同处理,不同的中断源其中断处理内容可能不同。中断服务(子)程序的最后一条指令是RETI,RETI指令使程序返回被中断的(主)程序继续执行。 CPU执行该指令,一方面清除中断响应时所置位的优先级有效触发器;另一方面从堆栈栈顶弹出断点地址送入程序计数器PC,从而返回主程序。
返回 4.2.3 MCS-51中断系统的应用 1、中断系统初始化 在使用MCS51单片机内部的中断系统时,需要对其初始化,89C51的中 断系统的初始化包括:开中断、确定优先级、若是外中断,应确定触发方式。 例 设引脚P3.2接有一个开关,当开关按下并抬起时,产生一次中断,试对中 断系统初始化。 MOV SP,#60H MOV IE,#81H SETB IT0 2、中断系统应用举例 例1 用中断实现如下功能:将30H—60H单元的内容送微型打印机打印。 例2 用中断实现如下功能: 2个开关K1和K2,1个数码管,当K1按下时数码管 加1,K2按下时数码管减1。 返回
ORG 0000H 返回 例1 用中断实现如下功能:将30H—60H单元的内容送微型打印机打印。 AINT0: INC R0 LJMP MAIN ORG 0003H LJMP AINT0 MAIN:MOV SP,#60H SETB EA SETB EX0 SETB IT0 MOV R0,#30H MOV P1,@R0 SETB P2.0 CLR P2.0 SJMP $ AINT0: INC R0 CJNE R0,#61H,AINT00 MOV P1,@R0 SETB P2.0 CLR P2.0 AINT00: RETI 89C51 微型打印机 P1.0 D0 P1.1 D1 P1.2 D2 P1.3 D3 P1.4 D4 P1.5 D5 P1.6 D6 P1.7 D7 STB P2.0 ACK BUSY 返回 P3.2
返回 例2:用中断实现如下功能: 2个开关K1和K2,1个数码管,当K1按下时数码管 加1,K2按下时数码管减1。 +5V 89C51 ORG 0000H LJMP MAIN ORG 0003H LJMP AINT0 ORG 0013H LJMP BINT1 MAIN:MOV SP,#60H MOV IE,#83H SETB IT0 SETB IT1 MOV R7,#0 UP: MOV A,R7 MOV DPTR,#TAB MOVC A,@A+DPTR MOV P1,A SJMP UP +5V 89C51 共阴极LED P1.0 a P1.1 b P1.2 c K1 P1.3 d COM P3.2 P1.4 e K2 P1.5 f P3.3 P1.6 g P1.7 BINT1: DEC R7 CJNE R7,#0FFH,BINT11 MOV R7,#9 BINT11:RETI AINT0: INC R7 CJNE R7,#10,AINT01 MOV R7,#0 AINT01:RETI TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH 返回