540 likes | 680 Views
第 5 章 AT89C51 单片机中断系统. 教学目标 5.1 中断概述 5.2 AT89C51 中断系统 5.3 中断系统的应用 本章小结 思考题与习题. 教学目标. 通过本章教学,要求达到以下目标: 1 .熟记 AT89C51 5 个中断源及其中断入口地址。 2 .熟悉 TCON 、 SCON 、 IE 、 IP 的结构、控制 作用和设置方法。 3 .理解 AT89C51 中断响应过程。 4 .了解中断响应等待时间。 5 .理解中断请求撤除情况和应对措施。 6 .熟悉中断优先控制的方法。
E N D
第5章 AT89C51单片机中断系统 教学目标 5.1 中断概述 5.2 AT89C51中断系统 5.3 中断系统的应用 本章小结 思考题与习题
教学目标 通过本章教学,要求达到以下目标: 1.熟记AT89C51 5个中断源及其中断入口地址。 2.熟悉TCON、SCON、IE、IP的结构、控制 作用和设置方法。 3.理解AT89C51中断响应过程。 4.了解中断响应等待时间。 5.理解中断请求撤除情况和应对措施。 6.熟悉中断优先控制的方法。 7.掌握中断应用程序的编制方法。
5.1 中断概述 1. 中断概念 CPU暂时中止其正在执行的程序,转去执行请求中断的那个外设或事件的服务程序,等处理完毕后再返回执行原来中止的程序,这一过程叫做中断。
中断概念类比 实际生活 计算机 看电视 主程序 电话铃响 事件发生 中断请求 接听电话 事件处理 中断处理 中断返回 看电视 主程序 图5.1 中断概念示意图
2.为什么要设中断 中断解决了快速主机与慢速I/O设备的数据传送,还具有如下优点: (1)分时操作。CPU可以分时为多个I/O设 备服务,提高了计算机的利用率; (2)实时响应。CPU能够及时处理应用系 统的随机事件,系统的实时性大大增强; (3)可靠性高。CPU具有处理设备故障及掉电等突发性事件能力,从而使系统可靠性提高。
3.中断源及其优先级 中断源是指能发出中断请求,引起中断的装置或事件。一个单片机系统通常有多个中断源,而单片机CPU在某一时刻只能响应一个中断源的中断请求,当多个中断源同时向CPU发出中断请求时,则必须按照“优先级别”进行排队,CPU首先选定其中中断级别最高的中断源为其服务,然后按由高到低的排队顺序逐一服务,完毕后返回断点地址,继续执行主程序。这就是“中断优先级”的概念。
4. 中断源的管理 单片机系统中有一个专门用来管理中断源的机构,它就是中断控制寄存器,我们可以通过对其编程来设置中断源的优先级别以及是否允许某个中断源的中断请求等。
5.2 AT89C51中断系统的结构 5.2.1 中断源及中断系统构成 1. 中断源: (1) INT0:外部中断0; (2) INT1:外部中断1; (3) T0:定时/计数器0溢出中断; (4) T1:定时/计数器1溢出中断; (5) 串行中断(包括串行接收中断RI和 串行发送中断TI)。
硬件查询 5.2.1 中断源及中断系统构成 TCON IE IP 高级中断请求 1 IT0 EX0 1 EA 1 PX0 IE0 INT0 1 0 0 1 1 中断入 口地址 ET0 1 PT0 T0 TF0 0 中断源 IT1 EX1 1 PX1 1 IE1 INT1 0 1 0 低级中断请求 1 ET1 1 PT1 T1 TF1 0 0 1 中断入 口地址 RX ES 1 PS RI ≥1 TX 0 TI 中断源 SCON 图5.3 AT89C51中断系统结构示意图
5.2.2 中断标志与中断控制 1.中断标志 (1) 定时器控制寄存器TCON TCON为8位特殊功能寄存器,其结构、 位名称、位地址及其功能如表5.1所示。
表5.1 TCON的结构、位名称、位地址和功能 TCON.7 TCON.6 TCON.5 TCON.4 TCON.3 TCON.2 TCON.1 TCON.0 T1中断标志位 T1启停控制位 T0中断标志位 T0启停控制位 /INT1中断 标志位 /INT1触发方式位 /INT0中断 标志位 /INT0触发方式位
表5.1 TCON的结构、位名称、位地址和功能 TCON.7 TCON.6 TCON.5 TCON.4 TCON.3 TCON.2 TCON.1 TCON.0 0 0 0 0 1 1 0 1 0 1 1 0 1 1 0 1 T1发出中断请求时 T0发出中断请求时 外部中断0发出中断请求时 外部中断1发出中断请求时 单片机复位或T0停止计数 启动T1开始计数 单片机复位时或无中断请求发生时,这些位均为0 单片机复位或T1停止计数 启动T0开始计数 外部中断1 采用边沿触发 外部中断 0 采用边沿触发 外部中断 0 采用电平触发 外部中断1 采用电平触发
(2)SCON的中断标志 串行控制寄存器SCON的结构、位名称、位地址及其功能如表5.2所示。其中只有TI和RI两位用来表示串行口中断标志位。
表 5.2 SCON的结构、位名称、位地址和功能 SCON.7 SCON.6 SCON.5 SCON.4 SCON.3 SCON.2 SCON.1 SCON.0 串行发送中断 标志位 串行接收 中断标志位
1) TI:为串行口发送中断标志位,位地址为99H。在串行口发送完一组数据时,TI由硬件自动置位(TI=1),请求中断,当CPU响应中断进入中断服务程序后,TI状态不能被硬件自动清除,而必须在中断程序中由软件来清除。 2) RI:为串行口接收中断标志位,位地址为98H。在串行口接收完一组串行数据时,RI由硬件自动置位(RI=1),请求中断,当CPU响应中断进入中断服务程序后,也必须由软件来清除RI标志。
2. 中断控制 1) 中断允许控制寄存器IE AT89C51设有专门的开中断和关中断指令,中断的开放和关闭是通过中断允许寄存器IE各位的状态进行两级控制的。所谓两级控制是指所有中断允许的总控制位和各中断源允许的单独控制位,每位状态靠软件来设定。中断允许控制寄存器IE各位的定义及其功能等如表5.3所示。
表 5.3 IE的结构、位名称、位地址和功能 中断总允许 控制位 外部中断0的 中断允许控制位 串行口中断 允许控制位 外部中断1的 中断允许控制位 定时器T2的溢出 中断允许控制位 定时器T0的溢出 中断允许控制位 定时器T1的溢出 中断允许控制位
表 5.3 IE的结构、位名称、位地址和功能 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0 禁止所有 中断 开通总 中断 所有中断仍被禁止 开通外部中断/INT0 禁止其他中断 开通所有中断 开通T0和串行口中断 禁止其他中断
(1) EA(IE.7):总允许控制位,位地址为AFH。EA状态可由软件设定,若EA=0,禁止AT89C51所有中断源的中断请求;若EA=1,则总控制被开放,但每个中断源是允许还是被禁止CPU响应,还受控于中断源的各自中断允许控制位的状态。 (2) ET2(IE.5):定时器T2溢出中断允许控制位,位地址是ADH。 (3) ES(IE.4):串行口中断允许控制位,位地址是ACH。
(4) ET1(IE.3):定时器T1的溢出中断允许控制位,位地址为ABH。 (5) EX1(IE.2):外部中断 的中断请求允许控制位,位地址是AAH。 (6) ET0(IE.1):定时器T0的溢出中断允许控制位,位地址是A9H。 (7) EX0(IE.0):外部中断 的中断请求允许控制位,位地址是A8H。
AT89C51的中断源优先级是由中断优先寄存器IP来进行控制的。其5个中断源划分为 两个中断优先级:高优先级和低优先级。每一个中断源都可以通过IP寄存器中的相应位设置成高(优先)级中断或低(优先)级中断。相应位置“1”,定义为高级中断,相应位清“0”,定义为低级中断,因此,CPU对所有中断请求只能实现两级中断嵌套。IP寄存器的结构、位名称和位地址如表5.4所示。 2)中断优先级控制寄存器IP
表 5.4 IP的结构、位名称、位地址和功能 0 0 0 0 0 0 1 1 1 1 1 1 定时器T1中断 优先级控制位 定时器T0中断 优先级控制位 定时器T2中断 优先级控制位 串行口中断 优先级控制位 /INT1中断 优先级控制位 /INT0中断 优先级控制位 高级中断(同为1时亦称其为同级中断) 低级中断(同为0时亦称其为同级中断)
如果同样优先级的请求同时接收到,则内部对中断源的查询次序决定先接受哪一个请求,表5.5列出了同(一优先)级中断源的内部查询顺序。如果同样优先级的请求同时接收到,则内部对中断源的查询次序决定先接受哪一个请求,表5.5列出了同(一优先)级中断源的内部查询顺序。 表5.5 中断源的内部查询顺序
中断优先级三条原则: (1)同时收到几个中断时,响应优先级 别最高的; (2)中断过程不能被同级、低优先级所 中断; (3)低优先级中断服务,能被高优先级 中断。
5.2.3 中断处理过程 中断处理过程大致可分为4步: 。 1. 中断请求 当中断源要求CPU为它服务时,必须发出一个中断请求信号。CPU将相应的中断请求标志位置“1”。为确保该中断得以实现,中断请求信号应保持到CPU响应该中断后才能取消。CPU会不断及时地查询这些中断请求标志位,一旦查询到某个中断请求标志置位,CPU就响应这个中断源的中断请求。 中断请求、 中断响应、 中断服务 和中断返回
2.中断响应 同时满足以下4个条件时,才可能响应中断。 (1)有中断请求; (2) 对应中断允许位为1; (3) 开中断(即EA=1)。 (4)正在执行的指令不是RETI或者是访问IE、 IP的指令,否则必须再执行另外一条指令后才 能响应。 AT89C51响应某一中断请求后要进行如下操作: (1) 完成当前指令的操作。 (2) 保护断点地址,将PC内容压入堆栈。
(3)屏蔽同级的中断请求。 (4)将中断源入口地址(固定的)送入PC寄存器,自动转入相应中断程序入口地址。中断源口地址如表5.6 所示。 表5.6 AT89C51中断入口地址表
中断响应(从标志置1到进入相应的中断服务),至少要3个完整的机器周期。如图5.4所示。 3. 中断响应时间 图5.4中断响应时间示意图
4. 中断请求的撤除 中断源发出中断请求后,相应的中断请求标志位置“1”,而CPU响应中断后,必须及时清除中断请求“1”标志。否则中断响应返回后,将再次进入该中断,引起死循环出错。有关中断请求标志撤除有如下 4 种情况: (1) 定时/计数器T0、T1中断,CPU响应中断时就用硬件自动清除了相应的中断请求标志TF0、TF1。
(2)对采用边沿触发方式的外部中断,CPU响应中断时, 硬件也会自动清除相应的中断请求标志IE0或IE1。 (3)对采用电平触发方式的外部中断,CPU响应中断 时,虽也用硬件自动清除相应的中断请求标志IE0或IE1,但 相应引脚(P3.2或P3.3)的低电平信号若继续保持下去中断请 求标志IE0或IE1就无法清零,也会发生上述重复响应中断的 情况。 (4) 对串行口中断(包括串发TI、串收RI),CPU响应中 断后并不能自动清除相应的中断请求标志TI或RI,因此在响 应串行口中断请求后,必须由用户在中断服务程序的相应位 置通过指令将其清除(复位)。
5.2.4 中断返回 AT89C51响应中断后,自动执行中断服务程序。在中断服务程序中,只要遇到RETI指令(不论在什么位置),单片机就结束本次中断服务,返回原程序。因此,在中断服务程序的最后必须有一条RETI指令,用于中断返回。 注意: (1)不能用RET指令代替RETI指令。 (2)中断服务程序中PUSH与POP须成对使用。
5.3 中断系统的应用 5.3.1 中断初始化设置 1.设置堆栈指针SP 设置适宜的堆栈深度。 (1) 深度要求不高且工作寄存器组1~3不用时, 可维持复位时状态:SP=07H,深度为 24B(20H~2FH为位寻址区)。 (2) 要求有一定深度时,可设SP=60H或50H, 这时深度分别为32B和48B。
2. 定义中断优先级 根据中断源的轻重缓急,划分高优先级和低优先级。 3. 定义外部中断触发方式 一般情况下,应定义边沿触发方式为宜。若外部中断必须采用电平触发方式时,应在硬件电路上和中断服务程序中采取撤除中断请求信号的措施。
4. 开放中断 由于AT89C51采用了二级中断控制方式,因此开放中断必须同时开放二级中断控制,即同时置位EA和需要开放中断的中断允许控制位。
5.3.2 中断服务主程序 (1) 在中断服务入口地址设置一条跳转指令, 以便转移到中断服务程序的实际入口处。 (2) 数据需要保护现场。通常是保护Acc、 PSW和DPTR等等特殊功能寄存器中的内容。 (3) 中断源请求中断服务要求的操作,这是 中断服务程序的主体。
(4) 若是外部中断电平触发方式,应有中断 标志撤除操作。若是串行收发中断,应 有对RI、TI清0指令。 (5) 恢复现场。与保护现场相对应,注意按 “先进后出、后进先出”的原则操作。 (6) 中断返回,最后一条指令必须是RETI。
5.3.3 中断系统应用举例 例5.1 单外部中断源应用示例 数据 P1 +5V 89C51 Vcc P3.0 CLR D INT0 Q CLK 选通信号 图5.5 外部中断源应用
主程序: ORG 0000H START:LJMP MAIN ;跳转到主程序 ORG 0003H LJMP INTO ;转中断服务程序 ORG 0030H ;主程序 MAIN: CLR IT0 ;设为电平触发方式 SETB EA ;CPU开放中断 SETB EX0 ;允许中断 MOV DPTR,#1000H ;设置数据区指针 … …
中断服务程序: ORG 0200H INT0: PUSH PSW ;保护现场 PUSH ACC CLR P3.0 ;由P3.0输出0 NOP NOP SETB P3.0 ;由P3.0输出1,撤除 MOV A,P1 ;输入数据 MOVX @DPTR,A ;存入数据存储器 INC DPTR ;修改指针,指向下一单元 … … POP ACC ;恢复现场 POP PSW RETI ;中断返回
例5.2利用定时器作外部中断源。 AT89C51内部有两个定时器/计数器,当它们选择为计数器工作方式时,T0(P3.4)或T1(P3.5)引脚上发生的负跳变将使T0或T1计数器加1计数。因此,可将P3.4、P3.5作为外部中断请求输入线,将T0或T1计数初值设定为满量程(#0FFH)。当T0、T1引脚上的电平发生负跳变时,计数器加1计数溢出,引起中断,因而可当作外中断使用,以计数器T0为例,初始化程序如下:
MOV TMOD,#06H ;置T0为工作方式2 MOV TL0 ,#0FFH ;置T0计数初值 MOV TH0 ,#0FFH SETB EA ;开CPU中断 SETB ET0 ;允许T0中断 SETB TR0 ;启动T0计数 … END
根据要求,四个故障相当四个中断源,可利用中断查询方法,将四个中断源归结为一个中断请求,同时四个故障信号引到P1口的四个输入端,然后在中断程序中查询P1口,确定是哪一个故障申请的中断。电路如图5.6所示。一旦发生故障,单片机必须响应中断,因此,该中断必须设置成最高级中断。在中断程序中可以显示故障信息。根据要求,四个故障相当四个中断源,可利用中断查询方法,将四个中断源归结为一个中断请求,同时四个故障信号引到P1口的四个输入端,然后在中断程序中查询P1口,确定是哪一个故障申请的中断。电路如图5.6所示。一旦发生故障,单片机必须响应中断,因此,该中断必须设置成最高级中断。在中断程序中可以显示故障信息。
1 INT0 +5V 1 OH INT1 1 UV 1 OV OC 1 AT89C51 P1.3 P1.2 P1.1 P1.0 图5.6 扩展4个外中断源电路
主程序和中断服务程序如下: ORG 0000 AJMP ZCX1 ;转主程序 NOP ORG 0013H AJMP INT1 ;转中断服务程序 NOP ORG 0100H ZCX1: MOV SP,#30H ;置堆栈指针 MOV IP,#04H ;设 INT1为最高级 CLR IT1 ;设 INT1为电平触发 SETB EA ;开中断 SETB EX1 ZCX2:其他处理程序 AJMP ZCX2 ORG 0200H
INT1:PUSH PSW ;保护现场 PUSH ACC MOV A,P1 ;读入P1口低4位状态 ANL A,#0FH JNB ACC0,X1 ;是OC中断吗?不是则转移 ACALL XY1 ;调OC处理子程序 X1: JNB ACC1,X2 ;是OV中断吗?不是则转移 ACALL XY2 ;调OV处理子程序 X2: JNB ACC2,X3 ;是UV中断吗?不是则转移 ACALL XY3 ;调UV处理子程序 X3: JNB ACC3,X4 ;是OH中断吗?不是则转移 ACALL XY4 ;调OH处理子程序 X4: POP ACC ;恢复现场 POP PSW RETI XY1: OC处理子程序(略) RET
本章小结 (1)中断与中断系统:CPU暂时中止其正在执行的程序,转去执行请求中断的那个外设 或事件的服务程序,等处理完毕后再返回执行原来中止的程序,这一过程叫做中断。中断是一种资源共享技术,单片机使用中断技术主要是为了进行实时控制,以便对随机发生的事件作出快速反应和及时处理;为完成中断任务的相关硬件电路和软件程序合称为中断系统。
(2)中断源及其入口地址:AT89C51单片机有5 个中断源:分别为:INT0、T0、INT1、T1及串行 口中断(包括串行接收中断RI和串行发送中断TI)。 5个中断源的中断入口地址分别为0003H、000BH、0013H、001BH、0023H。 (3)中断控制及寄存器:控制89C51中断的有3 个方面、4个特殊功能寄存器: ① 中断请求:定时和外部中断控制寄存器 TCON、串行控制寄存器SCON; ② 中断允许控制寄存器IE; ③ 中断优先级控制寄存器IP。
(4) 中断处理过程:大致可分为中断请求、中断 响应、中断服务和中断返回4个步骤。 (5) 中断响应等待时间:一般是3~4个机器周 期,最长为8个机器周期。 (6) 中断触发方式:通常有边沿触发和电平触 发两种。 (7) AT89C51的5个中断源可设置为两个中断优 先级:高优先级和低优先级。 (8) 编制中断应用程序主要包括中断初始化和中 断服务程序。