第 5 章 mcs-51 中断系统

26
第 5 第 MCS-51 第第第

Upload: khalil

Post on 18-Jan-2016

161 views

Category:

Documents


0 download

DESCRIPTION

第 5 章 MCS-51 中断系统. 第 5 章 MCS-51 中断系统:. 5.1 中断 的概念 5.2 MCS-51 单片机的 中断源 5.3 ~~~ 中断控制 5.4 ~~~ 中断处理过程 5.5 ~~~ 中断请求的撤销 5.6 ~~~ 外部中断的应用. 5.1 中断 的概念. 引起 CPU 中断的根源,称为 中断源 。 中断源向 CPU 提出的中断申请,称为 中断请求 。 CPU 暂时中断原来的事务 A ,转去处理事件 B 的过程称为 中断响应 。 CPU 处理事件 B 的过程称为 中断服务 或 中断处理 。 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 5 章  MCS-51  中断系统

第 5 章 MCS-51 中断系统

Page 2: 第 5 章  MCS-51  中断系统

第 5 章 MCS-51 中断系统:

5.1 中断的概念5.2 MCS-51 单片机的中断源5.3 ~~~ 中断控制5.4 ~~~ 中断处理过程5.5 ~~~ 中断请求的撤销5.6 ~~~ 外部中断的应用

Page 3: 第 5 章  MCS-51  中断系统

引起 CPU 中断的根源,称为中断源。中断源向 CPU 提出的中断申请,称为中断请求。CPU 暂时中断原来的事务 A ,转去处理事件 B 的过

程称为中断响应。CPU 处理事件 B 的过程称为中断服务或中断处理。对事件 B 处理完毕后 , 再回到原来被中断的地方 ( 断

点 ),称为中断返回。

整个过程称为中断 。

A主程序

响应返回

断点

RETI

……

B中断服务程序

5.1 中断的概念

实现中断功能而配置的软件与硬件称统为中断系统。

Page 4: 第 5 章  MCS-51  中断系统

5.2 MCS-51 单 片机 的中断源5.3 ~~~ 中断控制

•80C51 的中断系统有 5 个中断源, 2 个优先级,可实现二级中断嵌套 。

中断系统

PX0I E0

PT0TF0

PX1I E1

PT1TF1

PS

10

10

10

10

10

TI

RI

TCON I E I P

EX0

ET0

EX1

ET1

ES EA

I T0=0

I T0=1I NT0

I NT1I T1=0

I T1=1

T0

T1

TX

RX

自然优先级

矢量地址

自然优先级

矢量地址

高级中断请求PC

低级中断请求PC

源允许 总允许 优先级SCON中断标志

硬件查询

Page 5: 第 5 章  MCS-51  中断系统

CPU 同时接收到几个不同优先级的中断时, CPU 首先响应优先级别最高的中断请求。

CPU 同时接收到几个同一优先级的中断申请时,则 CPU 通过内部硬件查询逻辑按自然优先级顺序决定响应哪个中断请求。自然优先级顺序排列如下所示:

Page 6: 第 5 章  MCS-51  中断系统

•CPU 先后接收到几个不同优先级的中断时•正在进行的中断过程不能被新的同级或低优先级的中断请求所中断,但能被更高优先级中断请求所中断 -- 嵌套。

Page 7: 第 5 章  MCS-51  中断系统

5.4 ~~~ 中断处理过程5.4.1 中断采样 ----- 对外部中断源信号5.4.2 中断查询 ----- 对中断源标志位5.4.3 中断响应、处理5.4.4 中断返回

Page 8: 第 5 章  MCS-51  中断系统

5.4.1 中断采样在每个机器周期的 S5P2 期间,中断系统对各个外部中断源信号进行检测,根据检测结果,设置相应中断标志位 IE0 IE1 的状态。

电平触发方式的外部中断请求:由一次检测结果来决定 若为高电平,表明没有中断请求,将对应的标志位 IE0 IE1 清零。 若为低电平,表明有中断请求,将对应的标志位 IE0 IE1 置1。

边沿触发方式的外部中断请求:由相邻两次检测结果来决定若为先高后低电平,表明有中断请求,将对应的标志位 IE0 、

IE1 置1。否则,表明没有中断请求,不改变 IE0 、 IE1 的状态

Page 9: 第 5 章  MCS-51  中断系统

5.4.2 中断查询CPU 执行程序过程中,在每个机器周期的最后一个状态 S6 期间,按先后顺序对上一机器周期各个中断标志位的状态进行查询。

中断标志位为1:表明有中断请求在接下来的机器周期 S1 期间按优先级进行中断处理。

中断标志位为0:表明没有中断请求

中断查询由硬件自动完成,先后顺序为:IE0→TF0 →IE1 → TF1→RI 和 TI

Page 10: 第 5 章  MCS-51  中断系统

5.4.3 中断响应CPU 执行程序过程中,对中断源提出的中断请求进行的接受响应处理

1、中断响应的条件( 1 ) 有中断源请求信号,中断源标志位为 1 。( 2 ) 中断允许开放即 EA = 1 ,且中断源对应的中断

允许位置位 1 。( 3 ) 无同级或更高级中断正在服务。( 4 ) 当前的指令周期已经结束。( 5 ) 如果当前指令为 RETI 、 RET 或访问 IE 和 IP 的

指令,至少需要再执行完一条指令。当同时满足以上 5 个条件时 CPU 将对中断请求进行响应。

Page 11: 第 5 章  MCS-51  中断系统

5.4.3 中断响应2、中断响应

将相应的优先级状态触发器置 1

(以阻断后来的同级或低级的中断请求)。执行一条硬件 LCALL 指令:

硬件清零相应中断请求标志( TI 、 RI 除外)将当前 PC 内容压入堆栈——保护断点将中断服务子程序入口地址送 PC—— 转移

中断响应是由中断系统内部自动完成的。

Page 12: 第 5 章  MCS-51  中断系统

5.4.3 中断响应3 、中断的响应时间

是指从中断请求标志位置 1 ,到进入相应的中断服务程序开始执行第一条指令所持续的时间。

S1

保护断点,长调用至入口 中断服务

S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6 S1 S2 S3 S4 S5 S6

标志查询标志锁存

ε中断有效

M1 M2 M3 M4 M5

•若 M1 周期的 S5P2 前某中断生效,在 S5P2 期间其中断请求被锁存到相应的标志位中去;

•M2 恰逢指令的最后一个机器周期,且该指令不是 RETI 或访问 IE 、 IP 的指令。于是, M3 和 M4 便可以执行硬件 LCALL 指令, M5 周期将进入了中断服务程序。

•80C51 的中断响应时间,至少要 3 个完整的机器周期。

Page 13: 第 5 章  MCS-51  中断系统

5.4.3 中断响应4 、中断处理

中断处理就是执行中断服务子程序。从中断入口地址开始执行程序,直到返回指令 RETI 为止。

Page 14: 第 5 章  MCS-51  中断系统

5.4.4 中断返回中断返回是指中断服务程子序执行完后, CPU 返回原来断开的位置(断点),继续执行原来的程序的过程;

由 RETI 指令来完成,具体过程为: 将相应中断优先级状态触发器清 0 ,通知中断

系统,中断服务程序已执行完毕,可以响应其他同级或更低级的中断。

将断点地址从栈顶弹出送回 PC—— 恢复断点 ,CPU 从原来中断的地方继续执行程序;

注意,不能用 RET 指令代替 RETI 指令。在中断服务程序中 PUSH 指令与 POP 指令必须成对使用,否则不能正确返回断点 。

Page 15: 第 5 章  MCS-51  中断系统

5.5 中断请求的撤销CPU 响应某中断请求后,在中断返回之前,应撤除该中断请求标志,否则会再次中断。对定时计数器 T0 、 T1 的溢出中断, CPU 响应中断后,硬件自动清除中断请求标志 TF0 和 TF1 。用户对此不必考虑。

对于串行口中断, CPU 响应中断后,没有用硬件清除中断请求标志 TI 、 RI ,即这些中断标志不会自动清除,必须用软件清除 CLR RI ; CLR TI ,这是在编串行通信中断服务中应该注意的。

Page 16: 第 5 章  MCS-51  中断系统

5.5 中断请求的撤销

对电平触发的外部中断, CPU 在响应中断时硬件不会自动清除中断标志,也不能用软件清除中断标志,因此,在 CPU 响应中断后应立即撤除 INT1 或 INT0 的低电平信号,

需要外加硬件电路和软件配合才能实现。 P95

对边沿触发的外部中断 INT1 和 INT0 , CPU响应中断后硬件自动清除中断请求标志 IE0 和 IE1 。用户对此不必考虑。

Page 17: 第 5 章  MCS-51  中断系统

5.6 外部中断的应用

5.6.1 中断程序设计5.6.2 单外部中断源举例5.6.3 多外部中断源举例

Page 18: 第 5 章  MCS-51  中断系统

5.6.1 中断程序设计主、子程序结构

中断服务子程序的主程序设计中断初始化

用户对中断的控制和管理,实际是对 4 个与中断有关的寄存器 TCON 、 SCON 、 IE 、 IP 进行控制或管理。

在中断初始化编制中应注意:

开中断总控开关 EA ,置位中断源的中断允许位。对外部中断 INT0 、 INT1 应选择中断触发方式。多个中断源中断,应设定中断优先级,预置 IP 。

中断服务子程序设计入口地址固定

Page 19: 第 5 章  MCS-51  中断系统

中断服务程序的主程序设计框架 ORG 0000H; 0000H 为 PC 复位地址 LJMP MAIN ;MAIN 为主程序入口地址 ORG 0003H; 为外部中断 0 服务子程序硬件入口地址 LJMP INT_0 ;INT_0 为外部中断 0 服务程序真正入口地址 ORG 000BH; 为定时器 0 中断服务子程序硬件入口地址 LJMP T_0 ;T_0 为定时器 0 服务程序真正入口地址 ORG 0013H; 为外部中断 1 服务子程序硬件入口地址 LJMP INT_1 ;INT_1 为外部中断 1 服务程序真正入口地址 ….. ORG 0100H ;真正的主程序开始 MAIN:MOV SP, #60H ; 堆栈初始化 ; 中断初始化:对 TCON 、 SCON 、 IE 、 IP 的初始化 SETB IT0 ; 将外部中断 0 设置为下降沿触发方式 SETB EA ;CPU 开中断 SETB EX0 ; 外部中断 0 开中断 SJMP $ ;等待中断,此处也可以放置其他处理程序。

Page 20: 第 5 章  MCS-51  中断系统

中断服务子程序设计框架INT_0: ; INT_0 为外部中断 0 服务程序真正入口地址

CLR EA ;关中断PUSH PSW ;保护现场PUSH A…SETB EA ;开中断,允许 CPU 响应高级中断… ;中断服务子程序

… ;CLR EA ;关中断POP A ;恢复现场POP PSW…SETB EA ;开中断RETIRETI ;中断返回;中断返回

Page 21: 第 5 章  MCS-51  中断系统

P1.7

P1.6

P1.5

P1.4

P1.3

P1.2

P1.1

P1.0

INT1

MCS-51

K

+5V

5.6.2 单外部中断源举例【例 5-1】用一个按钮控制 8 个发光二极管,每按动一次按钮,使发光二级管按 L1→L2 →…. →L8 →L1 的顺序循环移动点亮一位。

ORG 0000HSETB P3.3 ; 将 P3.3 口设置为输入状态MOV A, #0FEH; 设置 L1~ L8 的初始状态

LOOP:MOV P1, AJB P3.3, $; 若按钮未动作,则原地等待JNB P3.3, $;等待按钮释放,保证按动一次

; 发光二极管只移动一位RL ASJMP LOOPEND

1 、采用查询方式实现

Page 22: 第 5 章  MCS-51  中断系统

5.6.2 单外部中断源举例【例 5-1】用一个按钮控制 8 个发光二极管,每按动一次按钮,使发光二级管按 L1→L2 →…. →L8 →L1 的顺序循环移动点亮一位。

P1.7

P1.6

P1.5

P1.4

P1.3

P1.2

P1.1

P1.0

INT1

MCS-51

K

+5V

ORG 0000H ;PC 复位地址AJMP MAIN ;MAIN 为主程序入口地址ORG 0013HAJMP INT_1 ;INT_1 为外部中断 1 服务程序入口地址ORG 0100H ;真正的主程序开始

MAIN: MOV SP, #60H; 堆栈初始化MOV A, #0FEH; 设置 L1~ L8 的初始状态MOV P1, A ; 点亮二极管 L1SETB IT1 ; 将外部中断 1 设置为下降沿触发方式SETB EA ;CPU 开中断SETB EX1 ; 外部中断 1 开中断SJMP $ ;等待中断,此处也可以放置其他处理程序。ORG 0200H ;真正的外部中断 1 服务程序

INT_1: RL A ;修改灯的状态MOV P1, ARETI ; 中断返回END

2 、采用中断方式实现

Page 23: 第 5 章  MCS-51  中断系统

5.6.2 单外部中断源举例 例 程序单步执行方式的外部中断实现,每按一次按钮产生一个正脉冲,只执行一条指令。 P34把一个外部中断(设为 INT0 )设置为高优先级和低电平触发方式。

ORG 0000H ; 0000H 为 PC 复位地址 LJMP MAIN ;MAIN 为主程序入口地址 ORG 0003H ; 外部中断 0 入口地址INT_0: JNB P3.2, $ ; 在 INT0 变高前 =0 原地等待 (死循环 ) ,不往下执行 JB P3.2, $ ; 在 INT0 变低前 =1 原地等待 (死循环 ) RETI ; INT0 =0 返回主程序,并执行下一条指令

ORG 0100H ;真正的主程序开始MAIN: MOV SP, #60H ; 堆栈初始化

SETB PX0 ;设置外部中断 0 为高优先级CLR IT0 ; 将外部中断 0 设置为低电平触发方式SETB EA ;CPU 开中断SETB EX0 ; 外部中断 0 开中断INC A

INC A ;需要单步执行的程序 。。。

SJMP $ ;等待中断,此处也可以放置其他处理程序。

Page 24: 第 5 章  MCS-51  中断系统

利用外中断 0 实时显示多个外部系统故障状态。要求: a 、当系统工作正常时,四个故障源输入全为低电平,显示灯全熄灭; b 、当某部分出现故障时,对应的输入线由低电平变为高电平,从而引起 8031 中断; c 、在中断服务程序中查询故障源,并对相应的发光二极管 LED输出低电平,进行相应的故障显示。

5.6.3 多外部中断源举例

INT0

P1.0P1.4P1.1P1.5P1.2P1.6P1.3P1.7

8031LED R

LED R

LED R

LED R

故障信号输入端

³1X4X3X2X1

Vcc

Page 25: 第 5 章  MCS-51  中断系统

• ORG 0000H• AJMP MAIN ;跳转主程序• ORG 0003H• AJMP PITO ;跳转外部中断 0 服务程序• ORG 0030HMAIN:ORL P1, #0FFH ; (主程序开始)灯全灭,准备好输入• SETB EA ; 开放总中断• SETB EX0 ; 开放外部中断 0• SETB IT0 ; 设外部中断 0 为边沿触发方式WAIT:SJMP WAIT ; 等待中断或其他程序PITO: ORL P1,#0F0H ; 关闭所有的灯• JNB P1.0,L1 ; (中断服务程序开始)• CLR P1.4 ; 若 X1 有故障 LED1亮• RETI ; 中断返回•L1: JNB P1.1, L2 ;• CLR P1.5 ; 若 X2 有故障 LED2亮• RETI ; 中断返回•L2: JNB P1.2, L3 ;• CLR P1.6 ; 若 X3 有故障 LED3亮• RETI ; 中断返回•L3: CLR P1.7 ; 若 X4 有故障 LED4亮• RETI ; 中断返回

Page 26: 第 5 章  MCS-51  中断系统

• ORG 0000H• AJMP MAIN ;跳转主程序• ORG 0003H• AJMP PITO ;跳转外部中断 0 服务程序• ORG 0030HMAIN:ORL P1, #0FFH ; (主程序开始)灯全灭,准备好输入• SETB EA ; 开放总中断• SETB EX0 ; 开放外部中断 0• SETB IT0 ; 设外部中断 0 为边沿触发方式WAIT:SJMP WAIT ;等待中断或其他程序PITO: ORL P1,#0F0H ; 关闭所有的灯 JNB P1.0,L1 ; (中断服务程序开始)• CLR P1.4 ; 若 X1 有故障 LED1亮•L1: JNB P1.1, L2 ;• CLR P1.5 ; 若 X2 有故障 LED2亮•L2: JNB P1.2, L3 ;• CLR P1.6 ; 若 X3 有故障 LED3亮•L3: JNB P1.3, L4 ;• CLR P1.7 ; 若 X4 有故障 LED4亮•L4: RETI ; 中断返回