310 likes | 544 Views
第七章 中断系统. 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 中断概念
E N D
第七章 中断系统 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中断概念 中断是指计算机在执行某一程序的过程中, 由于计算机系统内、 外的某种原因, 而必须中止原程序的执行, 转去执行相应的处理程序, 待处理结束之后, 再回来继续执行被中止的原程序的过程。 采用了中断技术后的计算机, 可以解决CPU与外设之间速度匹配的问题, 使计算机可以及时处理系统中许多随机的参数和信息, 同时, 它也提高了计算机处理故障与应变的能力。 “中断”与“查询”相比: 执行效率↑实时性 ↑
7.1.2 中断源 中断源是指在计算机系统中可以向CPU发出中断请求的来源。有内部中断和外部中断两类 中断响应后所执行的处理程序称为中断服务子程序 原来正常执行的程序为主程序 主程序被断开的位置为断点 中断服务子程序的调用不是事先安排的,由硬件自动完成
7.1.3 中断系统的功能 • 实现中断调用和返回 • 实现中断优先权排队 • 实现中断嵌套 接到中断申请,并满足条件时,先压栈保护;再转入中断服务程序的入口地址;执行中断程序,并清除中断请求标志;执行完后再恢复现场,返回断点
中断优先级越高, 则响应优先权就越高。当CPU正在执行中断服务程序时, 又有中断优先级更高的中断申请产生, 这时CPU就会暂停当前的中断服务转而处理高级中断申请, 待高级中断处理程序完毕再返回原中断程序断点处继续执行, 这一过程称为“中断嵌套”。
7.2 MCS-51的中断系统 图7.1 MCS - 51中断系统结构框图
7.2.1 中断源 表 7.1 8051 中 断 源
7.2.2 中断的控制与管理 • MCS-51的中断的控制与管理由TCON、SCON、IE、IP四个特殊功能寄存器完成。 • CPU响应中断的前提是有中断源发出中断申请 • 中断源发出中断申请时,将由硬件置位相应的标志位 • 这些标志位由TCON和SCON锁存
1. 定时器/计数器控制寄存器TCON(88H ) (LSB) (MSB) IT0:外部中断0触发方式选择位 0:低电平触发 1: 负跳变触发 IE0:外部中断0中断请求标志 IT1、IE1 类似 IT0、IE0 TR0:定时/计数器0运行控制位 0:停止 1:运行 TF0:定时/计数器0中断溢出标志位:T0被允许计数后,计满溢出后,硬件将其置为1,向CPU发中断申请 TR1、TF1 类似 TR0、TF0
2. 串行口控制寄存器SCON(98H) MSB LSB SM0和SM1:串行口工作方式选择位 SM2:多机通信使能位 REN: 接收允许位 TB8:发送数据位8 RB8:接收数据位8 TI: 串行口发送中断请求标志 RI: 串行口接收中断请求标志
3. 中断允许寄存器 MCS - 51单片机有 5个(8052有 6个)中断源, 为了使每个中断源都能独立地被允许或禁止, 以便用户能灵活使用, CPU内部在每个中断信号的通道中设置了一个中断允许触发器, 它控制CPU能否响应中断。只有对应的中断允许触发器被使能(置“1”),相应的中断才能得到相应。
中断允许控制寄存器IE (0A8H) (MSB) (LSB) EX0:外部中断0允许位 ET0:定时器/计数器0中断允许位 EX1:外部中断1允许位 ET1:定时器/计数器1中断允许位 ES : 串行口中断允许位 EA :中断总允许位 单片机复位后,IE被清0,由用户程序设置IE的相应位来控制中断的禁止与允许
4. 中断优先级控制寄存器IP(0B8H) (MSB) (LSB) PX0:外部中断0(1-高优先级,0-低优先级) PT0:定时器/计数器0中断优先级控制位(1-高优先级,0-低优先级) PX1:外部中断1中断优先级控制位(1-高优先级,0-低优先级) PT1:定时器/计数器1中断优先级控制位(1-高优先级,0-低优先级) PS : 串行口中断中断优先级控制位(1-高优先级,0-低优先级)
当两个以上的中断源同时提出申请时,CPU到底相应哪个中断呢?当两个以上的中断源同时提出申请时,CPU到底相应哪个中断呢? 中断响应遵循两条规则: (1)低优先级中断可以被高优先级中断所中断,反之不能; (2)一种中断(不论哪个优先级)一旦得到响应,与它同级的中断不能再中断它。
当同时收到处于同一优先级的多个中断请求时,哪一个中断能得到响应,取决于“内部查询次序”,相当于在每个优先级中,还有一个“内部优先级”,如下表所示:当同时收到处于同一优先级的多个中断请求时,哪一个中断能得到响应,取决于“内部查询次序”,相当于在每个优先级中,还有一个“内部优先级”,如下表所示: 表 3.3 同级内第二优先级次序
例如, 某软件中对寄存器IE、 IP设置如下: MOV IE, # 8FH MOV IP, # 06H 则此时该系统中: · CPU中断允许; · 允许外部中断 0、 外部中断 1、 定时器 /计数器 0、 定时器 /计数器1提出的中断申请; · 允许中断源的中断优先次序为: 定时器 /计数器 0>外部中断 1>外部中断 0>定时器/计数器 1。
7.3 中断系统应用 中断的过程 1. CPU响应中断的条件 • 1) 中断源发出中断申请,中断标志被锁存在TCON和SCON中 • 2)CPU允许中断 • 3)根据中断优先级排队,选出级别最高的准备响应 • 4)若CPU要响应一个中断,应没有同级或级别更高的中断正在处理 • 5)当前指令处理完成,即执行的指令到了最后一个机器周期时,才能响应中断 • 6)正在执行的指令不能与中断有关,如访问IE、IP、RETI的指令
2. 响应中断的过程 单片机一旦响应中断请求, 由硬件完成以下功能: (1) 根据响应的中断源的中断优先级, 使相应的优先级状态触发器置 1; (2) 通过硬件自动生成调用指令(LCALL), 并把当前程序计数器PC的内容压入堆栈; (3) 清除相应的中断请求标志位(串行口中断请求标 志 RI和 TI除外); (4) 把被响应的中断源所对应的中断服务程序的入口 地址(中断矢量)送入PC, 再通过转移指令转入相应的中断服务程序。
3. 中断处理过程中的问题 • CPU响应中断后,T0和T1的中断申请会自动撤消 和串行口的中断申请需要及时清除,以免被CPU再次查到误以为又有中断申请而再次响应 1) 外部中断的撤消: 利用D触发器和指令共同完成. 收到外部中断请求信号时, D触发器的CP脉冲有效, D触发器将中断请求信号锁存并送到 CPU响应中断后,应使Q端变高,撤消中断请求
ANL P1, #1111 1110B ;SD有效,Q=1, 撤消中断 • ORL P1, #0000 0001B ;SD无效,CP控制Q,接受中断 • 申请 • 2) 串行口中断申请的撤消 • CPU响应中断后,要通过软件撤消中断申请 • CLR TI • CLR RI
1. 借用定时器扩展外部中断源 T0和T1是两个内部中断源,若不作为定时器和计数器使用,可将其扩展为外部中断源 方法: 将T0或T1设置为计数器工作方式, 初值最大,来一个脉冲,加1即产生溢出中断
例如: 将T0设置为方式2计数,TH1=TL1=0FFH • 初始化程序: • MOV TMOD #60H • MOV TL0 , #0FFH • MOV TH0 , #0FFH • SETB EA • SETB ET0 • SETB TR0 • T1脚(P3.5)上每来一个负跳变就会向CPU发出中断申请,相当增加一个边沿触发的外部中断源
+5V • 2. 中断和查询结合的方法 • 在外部中断1引脚上连接4个外设的中断源,通过OC门产生中断请求信号,无论哪个外设提出中断请求,都会使变低,并可通过查询P1.0-P1.3得知是哪个外设提出中断申请 (将一个外部中断源变为4个中断源) WS1 WS2 WS3 8031 WS4 P1.0 P1.1 P1.2 P1.3
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: • ………
3. 例:规定外部中断1为边沿触发方式,低优先级, • 在中断服务程序中将寄存器B的内容右循环移一位, • B的初值为10H,试编写主程序和中断服务子程序. • 先初始化 • 再给定中断服务程序的入口地址 • 再写主程序和中断服务子程序
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
例: 在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
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