390 likes | 662 Views
第 5 章 单片机的中断系统. 本章的主要内容. MCS-51 单片机中断源的 种类及工作方式 中断控制寄存器 IE 、 中断优先级寄存器 IP 及定时器 / 计数器及外部中断控制寄存器 TCON 的使 用方法 MCS-51 型单片机 中断响应过程 外部中断 的结构及原理 熟练编制 中断服务程序. 5.1 中断系统的概述. 5.1.1 中断的概念. 主程序. 中断响应. 执行. 中断请求. 执行中断处理. 断点. 继续执行. 中断返回. 5.1.2 中断的功能. 1 .实现中断及返回 2 .能实现优先权排队
E N D
本章的主要内容 • MCS-51单片机中断源的种类及工作方式 • 中断控制寄存器IE、中断优先级寄存器IP 及定时器/计数器及外部中断控制寄存器TCON的使 用方法 • MCS-51型单片机中断响应过程 • 外部中断的结构及原理 • 熟练编制中断服务程序
5.1 中断系统的概述 5.1.1 中断的概念 主程序 中断响应 执行 中断请求 执行中断处理 断点 继续执行 中断返回
5.1.2 中断的功能 • 1.实现中断及返回 • 2.能实现优先权排队 • 3.能实现中断嵌套
5.2 中断请求 5.2.1 中断源 1.中断源分类 五个中断源,分别是 外部中断0: INT0,由P3.2提供, 外部中断1: INT1,由P3.3提供, 外部中断有两种信号方式,即电平方式和脉冲方式。 T0溢出中断; 由片内定时/计数器0提供 T1溢出中断; 由片内定时/计数器1提供 串行口中断RI/TI; 由片内串行口提供
3.中断源入口地址 中断源 入口地址 INT0 0003H T0 000BH INT1 0013H T1 001BH RI/TI 0023H
5.2.2中断寄存器 • 在中断请求被响应前,中断请求是由CPU锁存在特殊功能寄存器TCON和SCON相应中断标志位中。 与中断控制有关的控制寄存器有四个: TCON ---- 定时控制寄存器, IE ---- 中断允许控制寄存器, IP ---- 中断优先级控制寄存器, SCON ----及串行口控制寄存器。
1.中断允许控制寄存器IE 0 禁止,1允许
2.中断优先级的设定 • 基本原则是: (1)高优先级不能被低优先级中断; (2)低优先级可被高优先级中断。 (3)任何一种中断(不管是高级还是低级),一旦得到响应,不会再被它的同级中断所中断。 (4)两个同一级的中断源同时向CPU发出中断申请,CPU通过内部硬件查询,按自然优先级确定优先响应哪一个中断要求
中断优先级控制寄存器(IP) • PS: 串行口中断优先级控制位。 • PT1:定时计数器T1中断优先级控制位。 • PX1:外部中断1中断优先级控制位。 • PT0:定时计数器T0中断优先级控制位。 • PX0:外部中断0中断优先级控制位。 注意:单片机复位后,IP寄存器被清0,所有中断源为低级中断。
3. 定时控制寄存器TCON 1)TCON.7 TF1:T1溢出中断标志。T1被启动计数后,从初值开始加1计数,直至计满溢出由硬件使TF1=1,向CPU请求中断,此标志一直保持到CPU响应中断后,才由硬件自动清“0”。也可用软件查询该标志,并由软件清“0”。 2)TCON.5 TF0:T0溢出中断标志。其操作功能类似于TF1。 3)TCON.3 IE1:外部中断1标志。IE1=1表明外部中断1向CPU申请中断。 4)TCON.1 IE0:外部中断0标志。其操作功能与IE1类似。
说明:SCON.1 TI:串行发送中断标志。CPU将一个字节数据写入发送缓冲器SBUF后启动发送,每发送完一个串行帧,硬件置位TI。但CPU响应中断后,并不能自动清除TI标志,必须由软件清除。 4. 串行口控制寄存器SCON
应 响 断 中 中 断 返 回 5.3 中断处理过程 • 中断处理过程分为三个阶段:中断响应、中断处理和中断返回。 • 中断响应 • 中断处理(又称中断服务) • 中断返回 • 中断请求的撤除
5.3.1 中断处理过程 1.CPU的中断响应条件 ① 无同级或高级中断正在服务; ② 当前指令周期结束,如果查询中断请求的机器 周期不是当前指令的最后一个周期,则不行; ③ 若现行指令是RETI、RET或访问IE、IP指令, 则需要执行到当前指令及下一条指令响应。
2.响应过程 • ① 置位中断优先级有效触发器,即关闭同级和低级中断: • ② 调用入口地址,断点入栈,相当于LCALL指令; • ③ 进入中断服务程序。
响应时间--从查询中断请求标志位到转向中断服务入口地址所需的机器周期数。响应时间--从查询中断请求标志位到转向中断服务入口地址所需的机器周期数。 (1)最快响应时间 以外部中断的电平触发为最快。 从查询中断请求信号到中断服务程序需要三 机器周期: 1个周期(查询)+2个周期(长调用LCALL) (2)最长时间 若当前指令是RET、RETI和IP、IE指令,紧接 着下一条是乘除指令发生,则最长为8个周期。
5.3.2 中断处理 • 中断处理(又称中断服务),程序从入口地址开始执行,直到返回指令“RETI”为止,这个过程称为中断处理。 • 包括两部分内容: (1)保护现场, (2)处理中断源的请求。
中断处理过程示意图 中断源发中断请求 N 中断响应条件 是否满足? Y Y 由硬件 自动完成 中断是否受阻? N 把PC断点地址压入堆栈 相应中断源的中断入口地址送入PC,转向中断服务程序
保护现场和恢复现场的过程中不允许中断,以免现场遭到破坏。保护现场和恢复现场的过程中不允许中断,以免现场遭到破坏。 保护和恢复现场之后的开中断是为了允许有更高级中断打断此中断服务程序。 硬件自动完成 关中断 保护现场 中断服务程序 开中断 中断服务 关中断 恢复现场 开中断 中断返回 断点地址由堆栈弹入PC
中断处理 INTT0: PUSH ACC PUSH DPH PUSH DPL PUSH PSW 中断源服务 POP PSW POP DPL POP DPH POP ACC RETI 保护现场 恢复现场
应 响 断 中 中 断 返 回 5.3.2 中断返回 • 中断返回是指中断服务完后,计算机返回到原来暂停的位置(即断点),继续执行原来的程序。 • 中断返回由专门的中断返回指令RETI来实现。
5.4外部中断的触发方式 • 外部中断的方式选择是通过定时/计数器及外部中断控制寄存器TCON中的标志位选择的。 • 1)TCON.2 IT1:外部中断1触发方式控制位。当 IT1=0,外部中断1为电平触发方式。 • 若IT1=1,外部中断1控制为边沿触发方式。 • 2)TCON.0 IT0:外部中断0触发方式控制。
5.5 中断源的扩展 • 举例:利用单片机扩展5个外部中断源,中断的优先次序为X0~X4,其中X0接到外部中断上,X1~X4接到外部中断上;单片机的P1.4~P1.7接4个发光二极管用来作输出指示; (1) 当有X1~X4其中一个外部中断发生时,相应的发光二极管D1~D4点亮; (2) 当X0外部中断发生时,4个发光二极管全亮。
ORG 0000H • AJMP MAIN • ORG 0003H ;中断0服务程序入口地址 • AJMP ZHD0 • ORG 0013H ;中断1服务程序入口地址 • AJMP ZHD1 • ORG 0030H • MAIN:MOV SP,#70H ;设置堆栈指针 • SETB IT0 ; 外部中断0为边沿触发方式 • SETB IT1 ;外部中断1为边沿触发方式 • MOV IP,#00000001B ;外部中断0为 • MOV IE,#10000101B ;开放外部中断0,1 • MOV A,#0FFH ;关闭发光二极管
MOV P1,A • LOOP: AJMP LOOP • ZHD0: PUSH PSW ;保护现场 • PUSH A • MOV A,#0FH ;4个发光二极管全亮 • MOV P1,A • POP A ;恢复现场 • POP PSW • RETI ;中断返回 • ZHD1: PUSH PSW ;保护现场 • PUSH A • ORL P1,#0FH ;读取P1口的低4位 • JNB P1.0,IN1 ;中断源查询,并转向相应的中断服务程序
JNB P1.1,IN2 • JNB P1.2,IN3 • JNB P1.3,IN4 • FH1:POP A ;恢复现场 • POP PSW • RETI • IN1:MOV A,#11101111B ;中断服务程序1 • MOV P1,A ;D1发光二极管亮 • AJMP FH1 • IN2:MOV A,#11011111B ;中断服务程序2 • MOV P1,A ;D2发光二极管亮 • AJMP FH1 • IN3:MOV A,#10111111B ;中断服务程序3 • MOV P1,A ;D3发光二极管亮 • AJMP FH1
IN4:MOV A,#01111111B ;中断服务程序4 • MOV P1,A ;D4发光二极管亮 • AJMP FH1 • END
5.6 中断请求的撤除 CPU响应某中断请求后,在中断返回前,应该撤除该中断请求,否则会引起另一次中断。 定时器0或1溢出:CPU在响应中断后,硬件清除 了有关的中断请求标志TFO或TF1,即中断请求是 自动撤除的。 串行口中断:CPU响应中断后,没有用硬件清除 T1、R1,要靠软件来清除相应的标志。 边沿激活的外部中断:CPU在响应中断后,也是 用硬件自动清除有关的中断请求标志IE0或IE1。
电平激活的外部中断源中断标志撤除 电平触发外部中断撤除方法较复杂。 因为在电平触发方式中,CPU响应中断 时不会 自动清除IE1或IE0标志,所以在响应中断后应立即撤除INT0或INT1引脚上的低电平。 在硬件上,CPU对INT0和INT1引脚的信号不能控制,所以这个问题要硬件软件来配合解决。
撤除外部电平请求信号的方案( 参见P124 图5-7) ANL P1,#0FEH ORL P1,#01H CLR P1.0 MCS-51 INTX P1 .0 外部 设备 D型触发器 SETB P1.0 D Q CP SD 服务程序 主体 RETI 硬件电路部分 中断服务程序
由图可知,外部中断请求信号不直接加 或 引脚上,而是加在D触发器的CLK端。由于D端接地,当外部中断请求的正脉冲信号出现在CLK端时,Q端输出为0, 或 为低,外部中断向单片机发出中断请求。利用P1口的P1.0作为应答线,当CPU响应中断后,可在中断服务程序中采用两条指令: ANL P1,#0FEH ORL P1,#01H
来撤除外部中断请求。第一条指令使P1.0为0,因P1.0与D触发器的异步置1端SD相连,Q端输出为1,从而撤除中断请求。第二条指令使P1.0变为1,SD = 1,无效,Q继续受CLK控制,即新的外部中断请求信号又能向单片机申请中断。第二条指令是必不可少的,否则,将无法再次形成新的外部中断。 采用定时器(T0,T1)中断,其中断请求的撤除由硬件自动完成,无须采取其它措施。
5.7 中断初始化 • 中断系统初始化步骤如下: • ⑴ 开相应中断源的中断; • ⑵ 设定所用中断源的中断优先级; • ⑶ 若为外部中断,则应规定低电平还是负边沿的中断触发方式。
TF1 EA TR1 TF0 TR0 ES PS IE1 PT1 ET1 EX1 PX1 IT1 IE0 TI ET0 PT0 IT0 RI EX0 PX0 ①采用位操作指令 SETB EA SETB EX1 ;开外部中断1 SETB PX1 ;令外部中断1为高优先级 CLR IT1 ;令外部中断1为电平触发 ②采用字节型指令 MOV IE,#84H ;开外部中断1中断 ORL IP,#04H ;令为外部中断1高优先级 ANL TCON,#0FBH ;令外部中断1为电平触发 • 【例1】请写出 为低电平触发的中断系统初始 • 化程序。 IE ( A8H) IP ( B8H) SCON 98H TCON 88H
P1口 数据 P3.0 INT0 Q 1 CLR +5V D 8031 CLK 选通信号 举例:外设数据经P1口输入单片机,每准备好一个数据,外设发出选通信号,经触发器和非门至INT0。 • 5.8 外部中断的系统设计应用 • 数据传送过程: • 选通信号有效,发中断请求; • 执行中断读取数据,同时将中断请求撤除 • (P3.0=0,使INT0=1)
ORG 0000H START:LJMP MAIN ORG 0003H LJMP IINT0 ORG 0030H ;主程序 MAIN: CLR IT0 ;低电平触发 SETB EA SETB EX0 ;开中断 MOV DPTR,#1000H ...
IINT0: PUSH PSW ;中断处理程序 • PUSH ACC • CLR P3.0 • NOP • NOP • SETB P3.0 ;撤除INT0 • MOV A,P1 ;输入数据 • MOVX @DPTR,A ;保存数据 • INC DPTR • ... • POP ACC ;恢复现场 • POP PSW • RETI ;返回主程序