本章内容: 中断的概念 MCS-51单片机中断系统 外部事件中断及应用
4.1 中断的概念 4.1.1 中断的概念 主程序 (一)中断 在计算机系统中,中断是指CPU在执行某段程序的过程中,由于某一事件发生时,要求CPU暂时停止正在执行的程序,而去执行相应的处理程序,待处理结束后,再返回到原来程序停止处继续执行。 中断处理程序 中断源 处理程序 断点
4.1 中断的概念 4.1.1 中断的概念 (二)中断处理与子程序调用的区别 4.1 中断的概念 4.1.1 中断的概念 (二)中断处理与子程序调用的区别 调用哪个子程序、完成什么任务是用户设计程序时事先安排好的,是采用子程序调用指令实现的; 中断事件发生是随机的,哪个事件发生、何时调用中断处理程序是事先无法确定的,在程序中无法事先安排调用指令,调用中断处理程序的过程是由硬件自动完成的。
中断处理与子程序调用的区别 主程序 主程序 中断处理程序 子程序 中断源 调用 CALL SUB 断点 断点
4.1 中断的概念 4.1.2 CPU响应和处理中断的机制 中断系统是指实现中断响应和处理的所有硬件和软件,它包括中断源的产生、中断判优、中断响应、中断查询、中断处理等过程。
4.1 中断的概念 4.1.2 CPU响应和处理中断的机制 中断源: 4.1 中断的概念 4.1.2 CPU响应和处理中断的机制 中断源: (1)计算机系统的外部设备某一事件发生,向CPU请求中断;被控设备某个参数超过限位阈值,向CPU请求中断等。 (2)计算机内部的某个事件发生,如定时/计数器溢出、串行口接收到或发送完一帧数据等。 (3)计算机发生了故障引起中断,如系统电源掉电、运算器运算溢出、系统出错等事件发生,向CPU申请中断。 (4)人为设置中断。用户在编程和调试时人为设置的中断事件,如单步执行、设置断点。
4.1 中断的概念 4.1.2 CPU响应和处理中断的机制 中断触发及中断请求登记: 4.1 中断的概念 4.1.2 CPU响应和处理中断的机制 中断触发及中断请求登记: 当一个事件发生了,该中断源触发了中断,中断系统通过硬件把这个中断源对应的中断触发器置1,以此向CPU发出请求,即中断登记。CPU通过检测中断触发器的状态来识别是哪一个中断源发出了请求。
4.1 中断的概念 4.1.2 CPU响应和处理中断的机制 中断优先级: 4.1 中断的概念 4.1.2 CPU响应和处理中断的机制 中断优先级: 在中断系统中,按照轻重缓急的原则给每一个中断源分配一个中断CPU的优先级。 当多个中断源同时向CPU发出请求,通过判断中断优先级——中断判优,优先响应中断优先级最高的中断源的请求,待CPU处理完优先级最高的中断请求后,再依次按优先级顺序响应其它中断源的中断请求。
4.1 中断的概念 4.1.2 CPU响应和处理中断的机制 满足条件时,CPU响应中断之前需要做的准备: (1)暂时屏蔽其他中断; 4.1 中断的概念 4.1.2 CPU响应和处理中断的机制 满足条件时,CPU响应中断之前需要做的准备: (1)暂时屏蔽其他中断; (2)保护断点; (3)取中断处理程序的入口地址,转入中断处理程序。 中断处理程序是用户为了处理中断事件而编写的程序(处理中断事件的预案)。
用户程序 4.1 中断的概念 4.1.2 CPU响应和处理中断的机制 CPU进行中断处理: (1)保护现场; (2)中断处理 4.1 中断的概念 4.1.2 CPU响应和处理中断的机制 中断处理程序的流程 CPU进行中断处理: 用户程序 (1)保护现场; (2)中断处理 (根据处理预案编写的程序); (3)恢复现场; (4)中断返回。
4.1 中断的概念 4.1.2 CPU响应和处理中断的机制 中断嵌套处理 中断嵌套的处理
4.1 中断的概念 低优先级中断处理程序 高优先级中断处理程序 中断嵌套时的低优先级中断处理程序
4.1 中断的概念 中断处理过程示意 该中断源 允许中断CPU? 检查优先级 中断处理程序 中断源 登记 中断标志 CPU 开放中断? 4.1 中断的概念 中断处理过程示意 中断源 登记 中断标志 CPU 开放中断? 该中断源 允许中断CPU? 开放 允许 检查优先级 CPU不会响应 未开放 CPU不会响应 不允许 不满足 满足响应条件 ? 中断处理程序 响应中断 响应中断 保护断点 关中断
4.1 中断的概念 4.1.3 中断技术的作用 (1)解决了快速CPU和低速外部设备之间的速度匹配问题,使CPU和外设同时工作; 4.1 中断的概念 4.1.3 中断技术的作用 (1)解决了快速CPU和低速外部设备之间的速度匹配问题,使CPU和外设同时工作; (2)可以实现实时处理; (3)可以实现突发故障的及时自动处理; (4)可以实现多任务资源共享。
4.2 MCS-51中断系统的结构 硬 件 查 中 询 中 中 断 断 断 优 控 标 先 制 志 级 硬 件 查 询
4.2 MCS-51中断系统的结构 4.2.1 MCS-51单片机的中断标志 MCS-51单片机中断标志位分别由2个特殊功能寄存器存储: (1)定时/计数器控制寄存器(TCON)。 (2)串行口控制寄存器(SCON)。
4.2 MCS-51中断系统的结构 4.2.1 MCS-51单片机的中断标志 (一 ) 定时器控制寄存器(TCON) 定时/计数器控制寄存器TCON锁存外部中断请求标志以及定时/计数器的计数溢出标志。TCON的地址88H,寄存器中各位的位地址为88H~8FH。 TIMER1 TIMER0 INT1 INT0
4.2 MCS-51中断系统的结构 4.2.1 MCS-51单片机的中断标志 (1)外部事件中断请求标志位 IE0为外部事件中断 的中断请求标志位 IE1为外部事件中断 的中断请求标志位。 外部事件中断可以由电平触发或跳变触发, 中断触发的方式取决于TCON寄存器中IT0和IT1的设定。 (2)定时/计数器溢出标志位 TF0为定时/计数器T0的计数溢出标志位, TF1定时/计数器T1的计数溢出标志位。
4.2 MCS-51中断系统的结构 4.2.1 MCS-51单片机的中断标志 (二)串行口控制寄存器(SCON) 串行口控制寄存器SCON锁存串行口发送缓冲器的发送结束标志和接收缓冲器的接收到数据标志,不论哪个中断标志有效,都会触发串行口中断。SCON的地址98H,各位的位地址位:98H~9FH。 发送完 接收到
4.2 MCS-51中断系统的结构 4.2.1 MCS-51单片机的中断标志 (1)TI串行口发送中断请求标志位 当串行口发送缓冲器发送完一帧数据后,由硬件自动把TI置1,以此向CPU请求中断。 (2)RI串行口接收中断请求标志位 当串行口接收缓冲器接收完一帧串行数据后,由硬件把RI置1;以此向CPU请求中断。 注意:在CPU响应中断时,标志位TI 和RI不被自动清0,必须由用户在中断处理程序中用软件清0,否则,CPU将会陷入响应中断和中断处理当中,造成数据帧的丢失。
4.2 MCS-51中断系统的结构 4.2 MCS-51中断系统的结构 4.2.1 MCS-51单片机的中断标志 由于串行口接收和发送共享一个中断源,无论是发送结束标志TI还是接收到数据标志RI被置1,都会产生串行口中断请求。 在双工通信时,为了辨别哪一个触发了中断,必须首先在中断处理程序中检测TI和RI的状态,然后清除标志位(TI或RI),再进行相应的中断处理。
4.2 MCS-51中断系统的结构 4.2.2 MCS-51单片机的中断控制 MCS-51单片机的中断控制分为2级 第一级通过5个中断允许控制位来确定屏蔽或者允许某个中断源的中断请求。 第二级通过1个控制位来确定CPU开放或禁止中断。中断允许寄存器IE(Interrupt Enable Register)用来保存这些中断允许控制位。 IE寄存器的地址为0A8H,寄存器中各位的位地址为0A8H ~0AFH。
4.2 MCS-51中断系统的结构 4.2.2 MCS-51单片机的中断控制 (1)CPU中断控制位:EA (2)外部中断允许控制位: EX0、 EX1 (3)定时/计数器溢出中断允许控制位: ET0、ET1 (4)串行中断允许控制位:ES 当该位设置为1时,允许,指令 SETB BIT 当该位设置为0时,禁止, 指令 CLR BIT
4.2 MCS-51中断系统的结构 1 1 1 1 MCS-51单片机的中断控制由用户通过设定中断允许寄存器IE来实现,如单片机开放中断,允许外部事件INT1中断、定时/计数器T0溢出中断和串行口中断。 设定程序: MOV IE, #10010110B 或: SETB EA; CPU开放中断 SETB EX1; 允许中断 SETB ET0; 允许定时/计数器溢出中断 SETB ES; 允许串行口中断
4.2 MCS-51中断系统的结构 4.2.3 MCS-51单片机的中断优先级 当多个中断源同时请求中断,或者CPU正在处理一个中断,又有了新的中断请求,怎么办? MCS-51单片机的处理原则是: (1)多个中断源同时向CPU请求中断时,首先响应高优先级中断源的中断请求; (2)高优先级中断请求可以中断低优先级的中断处理,从而实现中断嵌套。低优先级中断请求不能中断高优先级或相同优先级的中断处理。
4.2 MCS-51中断系统的结构 4.2.3 MCS-51单片机的中断优先级 中断优先级寄存器IP寄存器的地址0B8H,寄存器中各位的位地址为0BFH~0B8H。 (1)PX0为外部事件中断的优先级设定位; (2)PT0为定时/计数器T0的溢出中断优先级设定位; (3)PX1为外部事件中断的优先级设定位; (4)PT1为定时/计数器T1的溢出中断的优先级设定位; (5)PS为串行口中断的优先级设定位。
4.2 MCS-51中断系统的结构 4.2.3 MCS-51单片机的中断优先级 相同优先级时的中断优先级 High Low
4.2 MCS-51中断系统的结构 MCS-51中断系统的中断响应条件 4.2.4 MCS-51单片机的中断响应及处理过程 MCS-51单片机的CPU响应中断请求是有条件的,如果此时不存在下列3种情形: (1)CPU正在处理相同优先级或高级优先级的中断。 (2)当前的机器周期不是指令的最后一个机器周期。 (3)正在执行的指令是RETI、或者是访问特殊功能寄存器IE或IP的指令。 CPU响应中断请求,立即产生一个硬件调用,使程序转移到相应的中断处理程序入口地址处,调用中断处理程序。 MCS-51中断系统的中断响应条件
4.2 MCS-51中断系统的结构 4.2.4 MCS-51单片机的中断响应及处理过程 CPU响应中断请求时,根据中断源的优先级,中断系统把相应的高优先级触发器或低优先级触发器置1,以封锁相同优先级和低级优先级的中断请求; 然后由硬件调用把当前程序计数器PC的内容(即断点)压入堆栈保护,并且把相应的中断处理程序入口地址装入程序计数器PC,使程序转移到这个中断处理处。 MCS-51单片机各个中断源的中断处理程序入口地址是固定的。
MCS-51单片机各中断源的中断处理程序入口地址
CPU自动完成 4.2 MCS-51中断系统的结构 4.2.4 MCS-51单片机的中断响应及处理过程 MCS-51单片机CPU响应中断的过程
INT0 T0 INT1 TI 串行口 1 IE0=1 0003H 000BH 0013H 001BH 0023H 中断处理程序
4.2 MCS-51中断系统的结构 4.2.4 MCS-51单片机的中断响应及处理过程 中断处理过程
4.2 MCS-51中断系统的结构 4.2.4 MCS-51单片机的中断响应及处理过程 在使用MCS-51单片机中断技术时,应注意: (1)中断查询是在每个机器周期是重复进行的。当一个中断标志位置1,但没有被CPU响应,这个中断标志位是不会被保持的。每一个机器周期总是查询的是上一个机器周期新采样得到的中断标志位状态。
4.2 MCS-51中断系统的结构 4.2.4 MCS-51单片机的中断响应及处理过程 (2)由于2个中断入口地址之间只有8个单元,在实际应用时,通常在入口地址处安排一条无条件转移指令,把中断处理程序存放在程序存储器的其它区域。 另外,如果不使用中断处理,最好在中断入口地址所在单元放置RETI指令,以免由于干扰或其他因素意外触发中断导致程序“跑飞”的现象发生,使程序能够安全地返回到断点处继续运行。
4.2 MCS-51中断系统的结构 4.2.4 MCS-51单片机的中断响应及处理过程 (3)子程序返回RET指令也可以使中断处理程序返回到断点处,但是,它不能告知CPU中断处理已经结束。因此,CPU依然处于中断处理的状态。如果是处理高优先级中断,CPU只响应一次中断,而且屏蔽其它所有的中断请求。
4.2 MCS-51中断系统的结构 4.2.4 MCS-51单片机的中断响应及处理过程 (4)MCS-51单片机CPU响应中断时,自动进行了置位高或低优先级触发器、保护断点、装入中断入口地址到PC等操作,并没有关中断的操作。 为了防止高优先级中断响应干扰现场保护和恢复,中断嵌套处理时,低优先级中断处理程序应按下列顺序处理:关闭中断、保护现场、开中断、中断处理、关中断、恢复现场、开中断、中断返回。
4.2 MCS-51中断系统的结构 4.2.4 MCS-51单片机的中断响应及处理过程
4.3 外部事件中断及应用 (一)外部事件中断的触发方式 4.3 外部事件中断及应用 (一)外部事件中断的触发方式 MCS-51单片机提供2个外部事件中断源,外部事件中断的请求(触发)信号由INT0(或INT1 )引脚引入单片机的中断系统,中断触发方式既可以为电平触发方式,也可以为跳变触发方式,通过软件设置寄存器TCON中的触发方式控制位IT0和IT1实现。
4.3 外部事件中断及应用 (一)外部事件中断的触发方式 4.3 外部事件中断及应用 (一)外部事件中断的触发方式 若ITx(x=0,1)为0,则外部事件中断为电平触发方式,由INTx引脚上的低电平触发中断。 指令: CLR ITx 若ITx(x=0,1)为1,则外部事件中断为跳变触发方式,即在INTx引脚上出现负跳变时触发中断。 指令:SETB ITx 40
4.3 外部事件中断及应用 (一)外部事件中断的触发方式 4.3 外部事件中断及应用 (一)外部事件中断的触发方式 在使用外部事件中断源时,中断触发信号必须与触发方式协调一致,使产生中断触发信号的电路满足以下要求: (1)电平触发方式时,引脚上的中断请求信号必须保持足够长的时间,直到中断实际发生为止,否则,会丢失中断请求。 中断触发信号低电平的维持时间也不能太长,在CPU响应中断,进入子程序后,即可撤除本次中断请求信号。
4.3 外部事件中断及应用 (一)外部事件中断的触发方式 4.3 外部事件中断及应用 (一)外部事件中断的触发方式 在使用外部事件中断源时,中断触发信号必须与触发方式协调一致,使产生中断触发信号的电路满足以下要求: (2)跳变触发方式时,在中断引脚上的高电平和低电平保持时间必须不少于1个机器周期。 42
4.3 外部事件中断及应用 (二) 外部事件中断源的初始化 在主程序中断系统初始化时,完成以下设置 : 4.3 外部事件中断及应用 (二) 外部事件中断源的初始化 在主程序中断系统初始化时,完成以下设置 : (1)设置外部事件中断请求信号的触发方式: 电平触发:CLR ITx,跳变触发方式:SETB ITx (2)开放CPU中断:SETB EA (3)设置外部事件中断允许控制位:SETB EX0或SETB EX1 (4)如果有中断嵌套处理,设置中断源的优先级。 设置为高优先级:SETB PX0 或 SETB PX1
4.3 外部事件中断及应用 (二) 外部事件中断源的初始化 4.3 外部事件中断及应用 (二) 外部事件中断源的初始化 在主程序中,对中断系统初始化时,也可以采用下列形式设置中断允许控制位和中断源的优先级: MOV IE,#ENABLE MOV IP,# PRIORITY
4.3 外部事件中断及应用 (三)中断处理程序编程 4.3 外部事件中断及应用 (三)中断处理程序编程 中断处理是中断源请求中断CPU工作的目的, 中断处理程序是用户根据处理外部事件的具体要求而设计的程序。 (1)若只有1个中断优先级: 中断处理程序结构如图。
4.3 外部事件中断及应用 (三)中断处理程序编程(2)若有2个中断优先级: 低优先级中断源的中断处理程序结构图 4.3 外部事件中断及应用 (三)中断处理程序编程(2)若有2个中断优先级: 低优先级中断源的中断处理程序结构图 高优先级中断源的中断处理程序结构图 高优先级处理程序 低优先级处理程序 46
4.3 外部事件中断及应用 (四) 外部事件中断源的应用 4.3 外部事件中断及应用 (四) 外部事件中断源的应用 例1:P1口为输出口,外接8个指示灯L0~L7。系统工作时,指示灯L0~L7逐个被点亮。在逐个点亮L0~L7的过程中,当开关K被扳动时,则暂停逐个点亮的操作,L0~L7全部点亮并闪烁10次。闪烁完成后,从暂停前的灯位开始继续逐个点亮的操作。
4.3 外部事件中断及应用 应用 (1)主程序设计 任务:系统工作时,指示灯L0~L7逐个被点亮。 程序设计包括: 1)开辟栈区 4.3 外部事件中断及应用 (1)主程序设计 任务:系统工作时,指示灯L0~L7逐个被点亮。 程序设计包括: 1)开辟栈区 2)开放CPU中断、允许INT0触发中断,设置优先级等。 3)系统正常情况下的工作: 指示灯L0~L7逐个被点亮,控制P1口逐个引脚输出高电平。 应用
4.3 外部事件中断及应用 中断处理 (2)中断处理程序设计 中断处理的任务: L0~L7全部点亮并闪烁10次。 程序设计包括: 4.3 外部事件中断及应用 (2)中断处理程序设计 中断处理的任务: L0~L7全部点亮并闪烁10次。 程序设计包括: (1)保护现场 (2)设置闪烁次数 (3)闪烁10次:全亮/全灭 (4)恢复现场 (5)中断返回 中断处理
4.3 外部事件中断及应用 (3)程序 ORG 0000H LJMP MAIN ;转移到主程序 ORG 0003H 4.3 外部事件中断及应用 (3)程序 ORG 0000H LJMP MAIN ;转移到主程序 ORG 0003H LJMP INT_PRO; 中断处理程序入口 ORG 0030H MAIN: MOV SP, #70H ;开辟堆栈区 SETB IT0 ; 触发方式 SETB EA ;开放CPU中断 SETB EX0 ;允许INT0中断 CLR PX0 ;设置优先级
4.3 外部事件中断及应用 MOV A, #01H ;控制码初值, ROT_DIS: MOV P1, A ;输出显示 4.3 外部事件中断及应用 MOV A, #01H ;控制码初值, ROT_DIS: MOV P1, A ;输出显示 ACALL DLY ;延时 RL A ;产生显示控制码 AJMP ROT_DIS 51
4.3 外部事件中断及应用 ;延时子程序 DLY: MOV R7, #100 DEL1: MOV R6, #200 DEL0: NOP 4.3 外部事件中断及应用 ;延时子程序 DLY: MOV R7, #100 DEL1: MOV R6, #200 DEL0: NOP NOP DJNZ R6, DEL0 DJNZ R7, DEL1 RET
4.3 外部事件中断及应用 ORG 0300H INT_PRO: PUSH ACC ;保护现场 PUSH PSW 4.3 外部事件中断及应用 ORG 0300H INT_PRO: PUSH ACC ;保护现场 PUSH PSW MOV R5, #10;闪烁次数 CONT: MOV A, #0FFH ;全亮 MOV P1, A ACALL DLY MOV A, #00H ;全灭 MOV P1, A
4.3 外部事件中断及应用 ACALL DLY DJNZ R5, CONT; 10次完? POP PSW ;恢复现场 POP ACC 4.3 外部事件中断及应用 ACALL DLY DJNZ R5, CONT; 10次完? POP PSW ;恢复现场 POP ACC RETI END
4.3 外部事件中断及应用 (4)关于保护现场 中断处理部分与主程序公用的寄存器: 4.3 外部事件中断及应用 (4)关于保护现场 保护现场的目的:程序被中断执行后,再从中断处理程序返回后,希望一些单元或寄存器的内容能够保持原来的内容不变。也就是说:希望中断处理程序的执行不要改变一些寄存器和单元的内容。 中断处理部分与主程序公用的寄存器: MOV R5, #10;闪烁次数 CONT: MOV A, #0FFH ;全亮 MOV P1, A ACALL DLY MOV A, #00H ;全灭 MOV P1, A DJNZ R5, CONT; 10次? R6,R7 R6,R7
4.3 外部事件中断及应用 A,R6,R7的内容在中断处理之间需要保护 (4)关于保护现场 中断处理部分与主程序公用的寄存器: 4.3 外部事件中断及应用 (4)关于保护现场 中断处理部分与主程序公用的寄存器: MOV R5, #10;闪烁次数 CONT: MOV A, #0FFH ;全亮 MOV P1, A ACALL DLY MOV A, #00H ;全灭 MOV P1, A DJNZ R5, CONT; 10次? A内容变化会改变主程序中LED的显示位置 R6,R7 R6、R7内容变化会改变主程序中LED的显示时间 R6,R7 A,R6,R7的内容在中断处理之间需要保护
4.3 外部事件中断及应用 (4)关于保护现场 1)保护与恢复A的内容 保护:PUSH ACC 恢复:POP ACC
4.3 外部事件中断及应用 (4)关于保护现场 2)保护和恢复工作寄存器R6、R7的内容 保护: (a)保护主程序使用的工作寄存器区: 4.3 外部事件中断及应用 (4)关于保护现场 2)保护和恢复工作寄存器R6、R7的内容 保护: (a)保护主程序使用的工作寄存器区: PUSH PSW ;PSW中的RS1和RS1选择工作寄存器区 (b)设置中断处理程序所用的工作寄存器区: 如主程序工作寄存器区在0区,设置中断处理程序所用的工作寄存器区1:SETB RS0 恢复主程序使用的工作寄存器区: POP PSW
4.3 外部事件中断及应用 正确处理的中断处理程序: ORG 0300H INT_PRO: PUSH ACC ;保护现场 PUSH PSW 4.3 外部事件中断及应用 正确处理的中断处理程序: ORG 0300H INT_PRO: PUSH ACC ;保护现场 PUSH PSW SETB RS0 MOV R5, #10;闪烁次数 CONT: MOV A, #0FFH ;全亮 MOV P1, A ACALL DLY MOV A, #00H ;全灭 MOV P1, A
4.3 外部事件中断及应用 ACALL DLY DJNZ R5, CONT; 10次完? POP PSW ;恢复现场 POP ACC 4.3 外部事件中断及应用 ACALL DLY DJNZ R5, CONT; 10次完? POP PSW ;恢复现场 POP ACC RETI END
4.3 外部事件中断及应用 例2:P1.0~P1.3为输出,外接指示灯L0~L3,P1.7~P1.4为输入,外接开关K0~K3,欲采用外部中断控制方式实现按开关K0~K3闭合状态分别控制指示灯L0~L3的状态,按钮开关每闭合1次,使外部中断触发一次,程序改变1次指示灯的显示状态。
4.3 外部事件中断及应用 (1)主程序: ORG 0000H STAR: AJMP MAIN ORG 0003H ;外部事件0中断入口地址 4.3 外部事件中断及应用 (1)主程序: ORG 0000H STAR: AJMP MAIN ORG 0003H ;外部事件0中断入口地址 AJMP ExtInt ;转到中断处理程序 ORG 0030H MAIN: MOV SP,#70H ;设置堆栈区 CLR IT0 ;电平触发方式 SETB EX0 ;允许INT0中断源中断 SETB EA ;开放CPU中断 CLR PX0 ;设置中断优先级 HERE: AJMP HERE ;模拟执行很长的应用程序
4.3 外部事件中断及应用 (2)中断处理程序 任务:读取开关K0~K3的状态改变指示灯L0~L3状态 开关闭合,输入单片机接口低电平 4.3 外部事件中断及应用 (2)中断处理程序 任务:读取开关K0~K3的状态改变指示灯L0~L3状态 开关闭合,输入单片机接口低电平 LED亮,单片机输出高电平 控制:开关状态取反从输出口输出
4.3 外部事件中断及应用 (2)中断处理程序
4.3 外部事件中断及应用 (2)中断处理程序: ORG 0200H ExtInt: PUSH ACC ; 若在随后程序中修改了A的内容 4.3 外部事件中断及应用 (2)中断处理程序: ORG 0200H ExtInt: PUSH ACC ; 若在随后程序中修改了A的内容 CLR P3.1 ;置位D触发器,撤除中断请求 MOV A, #0F0H MOV P1, A ;置P1.4~P1.7为输入 MOV A, P1 ;读开关状态 ANL A, #0F0H ;提取开关K0~K3 的状态
4.3 外部事件中断及应用 (2)中断处理程序: CPL A SWAP A ; MOV P1, A ;输出控制信息, 4.3 外部事件中断及应用 (2)中断处理程序: CPL A SWAP A ; MOV P1, A ;输出控制信息, SETB P3.1 ;使触发器输出Q受CLK控制,新中断 请求可向单片机申请中断。 POP ACC ;恢复现场 RETI ;中断返回
4.3 外部事件中断及应用 例3:P1口为输出口,外接8个指示灯L0~L7。开关S1、S2 分别用于触发外部中断。
4.3 外部事件中断及应用 实现下面的功能: (1)系统工作时,指示灯L0~L7以3个指示灯为一组循环显示; 68
4.3 外部事件中断及应用 实现下面的功能: (2)当S1按下时,暂时中断3灯循环方式,熄灭全部指示灯,从指示灯L0开始逐个点亮并保持,直至全部L0~L7全部点亮,然后熄灭,重复上述过程5次后退出,继续3灯循环显示模式。 69
4.3 外部事件中断及应用 实现下面的功能: (3)当S2按下时,暂时中断3灯循环方式,全部指示灯L0~L7闪烁显示10次后退出,继续3灯循环显示模式。 70
4.3 外部事件中断及应用 根据题意,S1和S2触发的2个外部中断源具有相同的优先级。
4.3 外部事件中断及应用 (1)主程序 任务:中断系统初始化,指示灯L0~L7以3个指示灯为一组循环显示 程序设计包括: 1)开辟栈区 4.3 外部事件中断及应用 (1)主程序 任务:中断系统初始化,指示灯L0~L7以3个指示灯为一组循环显示 程序设计包括: 1)开辟栈区 2)中断系统初始化:开放CPU中断、允许INT0触发中断,设置优先级等。 3)系统正常情况下的工作:指示灯L0~L7以3个指示灯为一组循环显示。
4.3 外部事件中断及应用 (2)S1(INT0)中断处理程序 4.3 外部事件中断及应用 (2)S1(INT0)中断处理程序 任务:全部熄灭,从指示灯L0开始逐个点亮并保持,直至全部L0~L7全部点亮,然后熄灭,重复5次后退出. 程序设计包括: (1)保护现场 (2)设置循环次数 (3)移位/显示/保持/全亮/熄灭5次, (4)恢复现场 (5)中断返回
4.3 外部事件中断及应用 (3)S2(INT1)中断处理程序 任务:指示灯L0~L7闪烁10次. 程序设计包括: (1)保护现场 4.3 外部事件中断及应用 (3)S2(INT1)中断处理程序 任务:指示灯L0~L7闪烁10次. 程序设计包括: (1)保护现场 (2)设置闪烁次数 (3)闪烁10次:全亮/全灭 (4)恢复现场 (5)中断返回
4.3 外部事件中断及应用 主 程 序 ORG 0000H LJMP MAIN ORG 0003H 4.3 外部事件中断及应用 ORG 0000H LJMP MAIN ORG 0003H LJMP Pint0 ;S1(INT0) 中断处理程序入口 ORG 0013H LJMP Pint1 ; S2(INT1)中断处理程序入口 主 程 序
4.3 外部事件中断及应用 主 程 序 ORG 0030H MAIN: MOV SP,#60H SETB IT0; INT0跳变触发方式 4.3 外部事件中断及应用 ORG 0030H MAIN: MOV SP,#60H SETB IT0; INT0跳变触发方式 SETB IT1; INT1跳变触发方式 MOV IE, #85H ; 开放中断 MOV IP, #00H ;2个中断源为低优先级 MOV A,#07H ; 3个为1组控制码初值 CONT: MOV P1,A ;输出控制LED ACALL DELAY ;延时 RL A ;显示控制码移位 SJMP CONT 主 程 序
4.3 外部事件中断及应用 中 断 处 理 程 序 1 ; S1(INT0)中断处理程序: ACALL DELAY ;延时 ORG 0100 4.3 外部事件中断及应用 中 断 处 理 程 序 1 ; S1(INT0)中断处理程序: ORG 0100 Pint0: PUSH ACC ; ;保护现场 PUSH PSW SETB RS0 ;把工作寄存器区切换到1区 MOV R1, #05 ; 循环次数 CONT1: CLR A ; 显示控制码 MOV P1, A; ; LED全灭 ACALL DELAY ; MOV R2,#01H ;循环初值 MOV R3,#01H ; 控制码初值 CONT2: MOV A,R3 ;取显示控制码 MOV P1,A ;输出控制LED ACALL DELAY ;延时 MOV A,R2 ;取循环码 RL A ;循环码移位 MOV R2,A ;循环码暂存 ORL A, R3 ;产生新控制码 MOV R3,A ;暂存控制码 MOV A,R2 XRL A,#01; JNZ CONT2 ;8个显示完? DJNZ R1,CONT1 ;5次 完否? POP PSW ;恢复现场 POP ACC RETI ;中断返回
4.3 外部事件中断及应用 中 断 处 理 程 序 2 POP PSW ;恢复现场 POP ACC ; S2(INT1)中断处理程序: 4.3 外部事件中断及应用 POP PSW ;恢复现场 POP ACC RETI ;中断返回 中 断 处 理 程 序 2 ; S2(INT1)中断处理程序: ORG 0200H Pint1: PUSH ACC ; 保护现场 PUSH PSW SETB RS0 ; 寄存器区切到1区 MOV R1,#10 CONT3: CLR A ; 全熄灭控制码 MOV P1, A ;熄灭 ACALL DELAY ; MOV A,#0FFH ; 全亮控制码 MOV P1,A ;全亮 ACALL DELAY ;延时 DJNZ R1,CONT3 ;循环控制
4.3 外部事件中断及应用 例4:P1口为输出口,外接8个指示灯L0~L7。开关S1、S2 分别用于触发外部中断。 79
4.3 外部事件中断及应用 实现下面的功能: (1)系统工作时,指示灯L0~L7以3个指示灯为一组循环显示; 80
4.3 外部事件中断及应用 实现下面的功能: (2)当S1按下时,暂时中断3灯循环方式,熄灭全部指示灯,从指示灯L0开始逐个点亮并保持,直至全部L0~L7全部点亮,然后熄灭,重复上述过程5次后退出,继续3灯循环显示模式。 81
4.3 外部事件中断及应用 实现下面的功能: (3)不论在(1)和(2)哪种运行方式下,只要当S2按下时,暂时当前的显示方式,全部指示灯闪烁显示10次后退出,继续运行以前的显示方式。 82
4.3 外部事件中断及应用 根据题意,S2(INT1)触发的外部中断源比S1(INT0)触发的外部中断源的优先级高,因此,把 S2(INT1) 中断源设置为高优先级。
4.3 外部事件中断及应用 (1)主程序 任务:中断系统初始化,指示灯L0~L7以3个指示灯为一组循环显示 程序设计包括: 1)开辟栈区 4.3 外部事件中断及应用 (1)主程序 任务:中断系统初始化,指示灯L0~L7以3个指示灯为一组循环显示 程序设计包括: 1)开辟栈区 2)中断系统初始化:开放CPU中断、允许INT0触发中断,设置优先级等。 3)系统正常情况下的工作:指示灯L0~L7以3个指示灯为一组循环显示。
4.3 外部事件中断及应用 (2)S1(INT0)中断处理程序(低优先级) 4.3 外部事件中断及应用 (2)S1(INT0)中断处理程序(低优先级) 任务:全部熄灭,从指示灯L0开始逐个点亮并保持,直至全部L0~L7全部点亮,然后熄灭,重复5次后退出. 程序设计包括: (1)关中断/保护现场/开中断 (2)设置循环次数 (3)移位/显示/保持/全亮/熄灭5次, (4)关中断/恢复现场/开中断 (5)中断返回
4.3 外部事件中断及应用 (3)S2(INT1)中断处理程序(高优先级) 任务:指示灯L0~L7闪烁10次. 程序设计包括: 4.3 外部事件中断及应用 (3)S2(INT1)中断处理程序(高优先级) 任务:指示灯L0~L7闪烁10次. 程序设计包括: (1)保护现场 (2)设置闪烁次数 (3)闪烁10次:全亮/全灭 (4)恢复现场 (5)中断返回
4.3 外部事件中断及应用 主程序: ORG 0000H LJMP MAIN ORG 0003H LJMP Pint0 ORG 0013H 4.3 外部事件中断及应用 主程序: ORG 0000H LJMP MAIN ORG 0003H LJMP Pint0 ORG 0013H LJMP Pint1
4.3 外部事件中断及应用 ORG 0030H MAIN: MOV SP,#60H SETB IT0 ; 跳变触发方式; 4.3 外部事件中断及应用 ORG 0030H MAIN: MOV SP,#60H SETB IT0 ; 跳变触发方式; SETB IT1 ; 跳变触发方式 MOV IE, #85H ;CPU开放中断,允许 和 中断 MOV IP, #04H ;优先级: INT0为低,INT1为高 MOV A,#07H ; 3个1组显示控制码初值 CONT: MOV P1,A ;输出控制LED ACALL DELAY ;延时 RL A ;显示控制码移位 SJMP CONT
4.3 外部事件中断及应用 MOV P1,A ; ACALL DELAY ; MOV A,R2 ; RL A ;循环码移位 4.3 外部事件中断及应用 MOV P1,A ; ACALL DELAY ; MOV A,R2 ; RL A ;循环码移位 MOV R2,A ; 暂存 ORL A,R3 ; 新控制码 MOV R3,A ;暂存控制码 MOV A,R2 XRL A,#01 ; JNZ CONT2 ;8个显示完? DJNZ R1,CONT1 ; 5次完? CLR EA ; 关中断 POP PSW ;恢复现场 POP ACC SETB EA ;开中断 RETI ;中断返回 ORG 0100 ; S1(INT0)中断处理程序 Pint0: CLR EA ;关中断 PUSH ACC ; PUSH PSW SETB EA ;开中断 SETB RS0 ; 寄存器区切到1区 MOV R1,#05 ;循环次数 CONT1: CLR A ;熄灭控制码 MOV P1, A ; 全熄灭 ACALL DELAY ; MOV R2,#01H; ;循环初值 MOV R3,#01H ;控制码初值 CONT2: MOV A,R3 ;取控制码
4.3 外部事件中断及应用 ORG 0200H ; S2(INT1)中断处理程序 Pint1: PUSH ACC ;; 4.3 外部事件中断及应用 ORG 0200H ; S2(INT1)中断处理程序 Pint1: PUSH ACC ;; PUSH PSW SETB RS1 ; 寄存器区切2区 CLR RS0 ; MOV R1,#10 ; 循环次数 CONT3: CLR A ; 熄灭控制码 MOV P1, A ; ACALL DELAY; 延时; MOV A,#0FFH ; 全亮控制码 MOV P1, A ; ACALL DELAY; DJNZ R1,CONT3 ; POP PSW ;恢复现场 POP ACC RETI ;中断返回
4.3 外部事件中断及应用 4.3.3 外部事件中断源的扩展 如果系统中有多个外部事件,可以采用中断源共享的方法,使多个中断源共同使用MCS-51单片机的2个外部事件中断源。 中断源的扩展:多个中断源共同享1个或2个外部事件中断源,然后,再判断是哪个中断源触发了中断。
4.3 外部事件中断及应用 例5:在电梯运行过程中,有以下几种情况需要电梯控制系统立即处理: 4.3 外部事件中断及应用 例5:在电梯运行过程中,有以下几种情况需要电梯控制系统立即处理: (1)当测速传感器检测到电梯失速时,要求控制系统立即切断控制回路电源; (2)当电梯运行到接近底层和顶层时,安装在电梯轿箱上撞弓装置撞击到强迫减速开关时,控制系统应强制电梯强制减速运行。 (3)当电梯强制减速后仍然不能停车,当上限限位和下限限位开关有效时,应切断整个电梯系统的电源。
4.3 外部事件中断及应用 例5:在电梯运行过程中,有以下几种情况需要电梯控制系统立即处理: 4.3 外部事件中断及应用 例5:在电梯运行过程中,有以下几种情况需要电梯控制系统立即处理: (4)当发生意外情况时,按下紧急停止按钮,电梯紧急制动停车。 (5)当电路欠压时或电网电压波动时,为了避免控制回路误动作,应切断控制回路电源,电梯紧急制动停车。 (6)曳引电机过载时,应进行过载保护,应切断控制回路电源,电梯紧急制动停车。
4.3 外部事件中断及应用 外部事件中断源的扩展电路
4.3 外部事件中断及应用 主程序(中断处理初始化部分): ORG 0030H ORG 0000H 4.3 外部事件中断及应用 主程序(中断处理初始化部分): ORG 0030H MAIN: MOV SP, #60H ;开辟栈区 CLR IT0 ; 电平触发方式 CLR IT1 ; 电平触发方式 SETB EA ;开放CPU中断 SETB EX0 ;允许中断 SETB EX1 ;允许中断 SETB PX0 ; INT0高优先级 CLR PX1 ;INT1低优先级 LOOP: …… ;主处理程序 LJMP LOOP ORG 0000H LJMP MAIN ORG 0003H LJMP P_INT0 ORG 0013H LJMP P_INT1
4.3 外部事件中断及应用 中断处理程序 JNB P1.4, ForSwitch ;强制换速 JNB P1.3, SpdSwitch ;失速 4.3 外部事件中断及应用 中断处理程序 JNB P1.4, ForSwitch ;强制换速 JNB P1.3, SpdSwitch ;失速 JNB P1.2, VoltSwitch ;电源故障 JNB P1.1, OvLodSwitch ;电机过载 JNB P1.0, EmSwitch ;急停 RETURN: CLR EA ;关中断 POP PSW ;恢复现场 POP ACC SETB EA ;开中断 RETI ;中断返回 P_INT0: PUSH ACC PUSH PSW ;切断整个系统电源 POP PSW POP ACC RETI P_INT1: CLR EA;关中断 PUSH ACC ;保护现场 PUSH PSW SETB EA ;开中断
4.3 外部事件中断及应用 每次进入中断处理程序仅处理一种故障 中断处理程序 (续) ForSwitch: 强制换速处理 4.3 外部事件中断及应用 中断处理程序 (续) 每次进入中断处理程序仅处理一种故障 ForSwitch: 强制换速处理 AJMP RETURN SpdSwitch: 失速处理 VoltSwitch: 电源故障处理 OvLodSwitch: 电机过载处理 EmSwitch: 急停按钮处理
本章内容介绍完毕! 谢谢大家!