第七章 中断系统

31
第第第 第第第7.1 第第第 第第 7.2 MCS-51 第第第7.3 第第第 第第

Upload: ovid

Post on 04-Jan-2016

85 views

Category:

Documents


7 download

DESCRIPTION

第七章 中断系统. 7.1 中断系统概述 7.2 MCS-51 中断系统 7.3 中断系统应用. 1. 教学内容 : 中断的几个相关概念 MCS-51 单片机的中断系统的组成和工作过程 几个应用实例 2. 教学重难点 中断的工作过程 , 中断入口地址 3. 课时 4 4. 作业 习题 3 ,4 , 5 ,7 ,8 , 11. 7.1 中断系统概述. 7.1.1 中断概念 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第七章 中断系统

第七章 中断系统

7.1 中断系统概述7.2 MCS-51 中断系统7.3 中断系统应用

Page 2: 第七章 中断系统

1. 教学内容 :

中断的几个相关概念MCS-51 单片机的中断系统的组成和工作过程几个应用实例2. 教学重难点中断的工作过程 , 中断入口地址3. 课时 4

4. 作业习题 3 ,4 , 5 ,7 ,8 , 11

Page 3: 第七章 中断系统

7.1 中断系统概述 7.1.1 中断概念

中断是指计算机在执行某一程序的过程中 , 由于计算机系统内、 外的某种原因 , 而必须中止原程序的执行 , 转去执行相应的处理程序 , 待处理结束之后 , 再回来继续执行被中止的原程序的过程。

采用了中断技术后的计算机 , 可以解决 CPU 与外设之间速度匹配的问题 , 使计算机可以及时处理系统中许多随机的参数和信息 , 同时 , 它也提高了计算机处理故障与应变的能力。

• “ 中断”与“查询”相比: 执行效率↑实时性 ↑

Page 4: 第七章 中断系统

7.1.2 中断源

中断源是指在计算机系统中可以向 CPU 发出中断请求的来源。有内部中断和外部中断两类

中断响应后所执行的处理程序称为中断服务子程序

原来正常执行的程序为主程序

主程序被断开的位置为断点

中断服务子程序的调用不是事先安排的 , 由硬件自动完成

Page 5: 第七章 中断系统

7.1.3 中断系统的功能

1. 实现中断调用和返回

2. 实现中断优先权排队3. 实现中断嵌套

接到中断申请 , 并满足条件时 , 先压栈保护 ; 再转入中断服务程序的入口地址 ; 执行中断程序 , 并清除中断请求标志 ; 执行完后再恢复现场 , 返回断点

Page 6: 第七章 中断系统

中断优先级越高 , 则响应优先权就越高。当 C

PU 正在执行中断服务程序时 , 又有中断优先级更

高的中断申请产生 , 这时 CPU 就会暂停当前的中

断服务转而处理高级中断申请 , 待高级中断处理程

序完毕再返回原中断程序断点处继续执行 , 这一过

程称为“中断嵌套”。

Page 7: 第七章 中断系统

7.2 MCS-51 的中断系统

图 7.1 MCS - 51 中断系统结构框图

Page 8: 第七章 中断系统

7.2.1 中断源

表 7.1 8051 中 断 源

Page 9: 第七章 中断系统

表 7.2 中断服务程序入口地址表

Page 10: 第七章 中断系统

7.2.2 中断的控制与管理• MCS-51 的中断的控制与管理由 TCON 、 SCON 、 IE 、 IP

四个特殊功能寄存器完成。

• CPU 响应中断的前提是有中断源发出中断申请

• 中断源发出中断申请时,将由硬件置位相应的标志位• 这些标志位由 TCON 和 SCON 锁存

Page 11: 第七章 中断系统

1. 定时器 / 计数器控制寄存器 TCON ( 88H )

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

(MSB) (LSB)

IT0 :外部中断 0 触发方式选择位

0: 低电平触发 1: 负跳变触发

IE0 :外部中断 0 中断请求标志

IT1 、 IE1 类似 IT0 、 IE0

TR0 :定时 / 计数器 0 运行控制位 0: 停止 1: 运行

TF0 :定时 / 计数器 0 中断溢出标志位: T0 被允许计数后,计满溢出后,硬件将其置为 1 ,向 CPU 发中断申请

TR1 、 TF1 类似 TR0 、 TF0

Page 12: 第七章 中断系统

2. 串行口控制寄存器 SCON ( 98H )

SM0 和 SM1 :串行口工作方式选择位SM2 :多机通信使能位REN: 接收允许位TB8 :发送数据位 8RB8 :接收数据位 8TI: 串行口发送中断请求标志RI: 串行口接收中断请求标志

SM0

SM1

SM2

REN

TB0

RB0

TI RI

MSB LSB

Page 13: 第七章 中断系统

3. 中断允许寄存器

MCS - 51 单片机有 5 个( 8052 有 6 个)中断源 ,

为了使每个中断源都能独立地被允许或禁止 , 以便用户能灵活使用 , CPU 内部在每个中断信号的通道中设置了一个中断允许触发器 , 它控制 CPU 能否响应中断。只有对应的中断允许触发器被使能(置“ 1” ),相应的中断才能得到相应。

Page 14: 第七章 中断系统

EX0 :外部中断 0 允许位ET0 :定时器 / 计数器 0 中断允许位EX1 :外部中断 1 允许位ET1 :定时器 / 计数器 1 中断允许位ES : 串行口中断允许位EA :中断总允许位单片机复位后, IE 被清 0 ,由用户程序设置 IE 的相应位来控制中断的禁止与允许

EA - - ES ET1 EX1 ET0 EX0

(MSB) (LSB)

中断允许控制寄存器 IE ( 0A8H )

Page 15: 第七章 中断系统

4. 中断优先级控制寄存器 IP ( 0B8H )

- - - PS PT1 PX1 PT0 PX0

(MSB) (LSB)

PX0 :外部中断 0 ( 1- 高优先级, 0- 低优先级)

PT0 :定时器 / 计数器 0 中断优先级控制位( 1- 高优先级, 0-低优先级)

PX1 :外部中断 1 中断优先级控制位( 1- 高优先级, 0- 低优先级)

PT1 :定时器 / 计数器 1 中断优先级控制位( 1- 高优先级, 0-低优先级)

PS : 串行口中断中断优先级控制位( 1- 高优先级, 0- 低优先级)

Page 16: 第七章 中断系统

当两个以上的中断源同时提出申请时, CPU 到底相应哪个中断呢?

中断响应遵循两条规则:

( 1 )低优先级中断可以被高优先级中断所中断,反之不能;

( 2 )一种中断(不论哪个优先级)一旦得到响应,与它同级的中断不能再中断它。

Page 17: 第七章 中断系统

表 3.3 同级内第二优先级次序

当同时收到处于同一优先级的多个中断请求时,哪一个中断能得到响应,取决于“内部查询次序”,相当于在每个优先级中,还有一个“内部优先级”,如下表所示:

Page 18: 第七章 中断系统

例如 , 某软件中对寄存器 IE 、 IP 设置如下 :

MOV IE, # 8FH

MOV IP, # 06H

则此时该系统中 : · CPU 中断允许 ; · 允许外部中断 0 、 外部中断 1 、 定时器 / 计数器 0 、 定时器 / 计数器 1 提出的中断申请 ; · 允许中断源的中断优先次序为 : 定时器 / 计数器 0> 外部中断 1> 外部中断 0> 定时器 /计数器 1 。

Page 19: 第七章 中断系统

7.3 中断系统应用中断的过程1. CPU 响应中断的条件

• 1) 中断源发出中断申请 , 中断标志被锁存在 TCON 和 SCON 中

• 2)CPU 允许中断• 3)根据中断优先级排队 , 选出级别最高的准备响应• 4)若 CPU要响应一个中断 , 应没有同级或级别更高的中断

正在处理• 5) 当前指令处理完成,即执行的指令到了最后一个机器周期

时 ,才能响应中断• 6) 正在执行的指令不能与中断有关 ,如访问 IE 、 IP 、 RETI

的指令

Page 20: 第七章 中断系统

2. 响应中断的过程

单片机一旦响应中断请求 , 由硬件完成以下功能 :

(1 ) 根据响应的中断源的中断优先级 , 使相应的优先级状态触发器置 1;

(2 ) 通过硬件自动生成调用指令( LCALL ) , 并把当前程序计数器 PC 的内容压入堆栈 ;

(3 ) 清除相应的中断请求标志位(串行口中断请求标

志 RI 和 TI 除外) ;

(4 ) 把被响应的中断源所对应的中断服务程序的入口

地址(中断矢量)送入 PC, 再通过转移指令转入相应的中断服务程序。

Page 21: 第七章 中断系统

• 3. 中断处理过程中的问题• CPU 响应中断后 ,T0 和 T1 的中断申请会自动撤消

10 INTINT 和 和串行口的中断申请需要及时清除 , 以免被 CPU 再次查到误以为又有中断申请而再次响应

1) 外部中断的撤消 : 利用 D 触发器和指令共同完成 .收到外部中断请求信号时 , D 触发器的 CP脉冲有效 , D 触发器将中断请求信号锁存并送到 1INT

CPU 响应中断后 , 应使 Q端变高 ,撤消中断请求

Page 22: 第七章 中断系统

• ANL P1, #1111 1110B ;SD 有效 ,Q=1, 撤消中断• ORL P1, #0000 0001B ;SD无效 ,CP 控制 Q, 接受中

断• 申请

• 2) 串行口中断申请的撤消• CPU 响应中断后 ,要通过软件撤消中断申请• CLR TI• CLR RI

Page 23: 第七章 中断系统

1. 借用定时器扩展外部中断源

T0 和 T1 是两个内部中断源 ,若不作为定时器和计数器使用 , 可将其扩展为外部中断源

方法 : 将 T0 或 T1 设置为计数器工作方式 , 初值最大 ,来一个脉冲 ,加 1即产生溢出中断

Page 24: 第七章 中断系统

• 例如 : 将 T0 设置为方式 2 计数 ,TH1=TL1=0FFH• 初始化程序 : • MOV TMOD #60H• MOV TL0 , #0FFH• MOV TH0 , #0FFH• SETB EA• SETB ET0• SETB TR0• T1脚 (P3.5)上每来一个负跳变就会向 CPU 发出中断申请 ,

相当增加一个边沿触发的外部中断源•

Page 25: 第七章 中断系统

• 2. 中断和查询结合的方法• 在外部中断 1引脚上连接 4 个外设的中断源 , 通过 OC门产生中断请求信

号 ,无论哪个外设提出中断请求 , 都会使变低 , 并可通过查询 P1.0-P1.3得知是哪个外设提出中断申请 ( 将一个外部中断源变为 4 个中断源)

P1.3

P1.2

P1.1

P1.0

1INT

8031

WS1

WS2

WS3

WS4

+5V

Page 26: 第七章 中断系统

• ORG 0013H• LJMP ZDZ• ZDZ : PUSH PSW• PUSH A• JB P1.0, AWS1• JB P1.1, AWS2• JB P1.2, AWS3• JB P1.3, AWS4• INTR: POP A• POP PSW• RETI• AWS1:• ………

Page 27: 第七章 中断系统

• 3. 例 :规定外部中断 1 为边沿触发方式 , 低优先级 ,• 在中断服务程序中将寄存器 B 的内容右循环移一位 ,• B 的初值为 10H,试编写主程序和中断服务子程序 .• 先初始化• 再给定中断服务程序的入口地址 • 再写主程序和中断服务子程序

Page 28: 第七章 中断系统

• ORG 0000H• LJMP MAIN• ORG 0013H• LJMP INT• MAIN: SETB EA• SETB EX1• CLR PX1• SETB IT1• MOV B, #10H• LOOP: SJMP LOOP• INT: MOV A, B• RR A• MOV B, A• RETI

Page 29: 第七章 中断系统

例 : 在 INT0引脚外接脉冲信号 ,要求每送来一个脉冲 , 就把50H 单元的内容加 1,若 50H 单元计满 , 则进位 51H 单元 ,利用中断结构编制一个脉冲计数程序

ORG 0000H

AJMP MAIN

ORG 0003H

AJMP SUBG

ORG 2000H

MAIN: MOV A, #00H

MOV 50H, A ; 单元内容清零 MOV 51H, A ;单元内容清零 MOV SP, #70H

Page 30: 第七章 中断系统

• SETB IT0

• SETB EA• SETB EX0• AJMP $• ORG 3000H• SUBG: PUSH ACC• INC 50H• MOV A,50H• JNZ BACK• INC 51H• BACK: POP ACC• RETI

Page 31: 第七章 中断系统

4.用优先编码器扩展中断源