单片机不挂科-5-单片机中断系统.pdf
单片机中断系统 不挂科 单片机 第五讲 不挂科 3大模块2道题目 单片机 中断概念模块1 中断源和中断控制模块2 中断响应和中断服务模块3 单片机 中断系统 不挂科 单片机 5.单片机中断系统 不挂科 单片机 理解中断小节1 中断概念 1.中断概念5.单片机中断系统 中断的概念 不挂科 单片机 1.理解中断1.中断概念5.单片机中断系统 CPU在正常运行程序时,由于CPU以外某一事件的发生,引起CPU暂停正在运行的程序,而转到 为该事件的发生预先安排好的服务程序中去执行。 主 程 序 PC PC+X 继 续 执 行 主 程 序 返回 主程 序 中 断 响 应 中 断 服 务 程 序 PC中断入口地址 RET1 中断流程示意图 中断源和中断控制 中断源 中断控制 小节1 小节2 不挂科 单片机 2.中断源和中断控制5.单片机中断系统 中断源和中断控制 中断源 中断控制 小节1 小节2 不挂科 单片机 2.中断源和中断控制5.单片机中断系统 中断源 不挂科 单片机 2.中断源和中断控制5.单片机中断系统1.中断源 中断源(可由硬件或软件引起):引起中断的事件 80C51具有多个中断源,51子系列有5个中断源,包括2个外部中断,2个定时中断和1个串行中断。 中断源名称中断向量 外部中断00003H 定时器T0中断000BH 外部中断10013H 定时器T1中断001BH 串中断0023H 中断源 不挂科 单片机 2.中断源和中断控制5.单片机中断系统1.中断源 外中断:外部信号引起,共2个。1 即: 外部中断“0”,中断请求信号由引脚 (P3.2) 引入; 外部中断“1”,中断请求信号由引脚 (P3.3)引入。 外部中断请求有两种信号形式:低电平触发方式和负跳脉冲触发方式: INT0 INT1 低电平有效,只要CPU在每机器周期内从引入端 采样到低电平,就进入外中断。INTx 低电平触发方式 负跳信号有效,即CPU在连续两个周期对引入端 采样,如果前周期为高电平,后一周期 为低电平,则为有效的负跳脉冲触发方式的外中断申请。 INTx 负跳脉冲触发方式 中断源 不挂科 单片机 2.中断源和中断控制5.单片机中断系统1.中断源 2定时器/计数器中断: 信号来源:内部(定时)和外部(计数)。 串行中断:3 内部计数器计数溢出,溢出标志位TFX作为单片机接受中断请求标志。 由串行数据传送(发送和接收)的需要而设置。 中断源和中断控制 中断源 中断控制 小节1 小节2 不挂科 单片机 2.中断源和中断控制5.单片机中断系统 中断控制 不挂科 单片机 2.中断源和中断控制5.单片机中断系统2.中断控制 中断控制寄存器: 通过设置相关寄存器,达到控制中断工作的目的。 与中断控制有关的控制寄存器有四个: IE-中断允许控制寄存器 TCON-定时控制寄存器 SCON-串行口控制寄存器 IP-中断优先级控制寄存器 用户通过TCON、SCON、IE和IP四个控制寄存器来使用中断系统。 这四个控制寄存器都是既可进行字节寻址又可进行位寻址的。 如:字节操作指令:MOV IE,#81H ; EA, /, /, ES, ET1, EX1, ET0, EX0 位操作指令: SETB EA ; SETB EX0 因此对位状态的设置既可以使用字节操作指令又可以使用位操作指令。 中断控制相关寄存器:IE 不挂科 单片机 2.中断源和中断控制5.单片机中断系统2.中断控制 0AFH0AEH0ADH0ACH0ABH0AAH0A9H0A8H EA/ESET1EX1ET0EX0 EA:中断允许总控制位 EA0 中断总禁止,禁止所有中断,即不响应任何中断请求。 EA1 中断总允许,总允许后中断的禁止或允许由各中断源的中断允许控制位进行设置。 EX0(EX1):外部中断允许控制位(INT0、INT1) EX0(EX1)0 禁止外中断 EX0(EX1)1 允许外中断 中断允许控制寄存器IE:用户软件设置,寄存器地址为A8H。1 不挂科 单片机 2.中断源和中断控制5.单片机中断系统2.中断控制 0AFH0AEH0ADH0ACH0ABH0AAH0A9H0A8H EA/ESET1EX1ET0EX0 中断允许控制寄存器IE:用户软件设置,寄存器地址为A8H。1 ET0(ET1):定时计数中断允许控制位(T0、T1) ET0(ET1)0 禁止定时(或计数)中断 ET0(ETl)1 允许定时(或计数)中断 ES:串行中断允许控制位 ES0 禁止串行中断 ES1 允许串行中断 中断控制相关寄存器:IE 不挂科 单片机 2.中断源和中断控制5.单片机中断系统2.中断控制 0AFH0AEH0ADH0ACH0ABH0AAH0A9H0A8H EA/ESET1EX1ET0EX0 中断允许控制寄存器IE:用户软件设置,寄存器地址为A8H。1 结论: (1) 80C51通过中断允许控制寄存器对中断的允许实行两级控制。 (2) 80C51单片机复位后(IE)00H,因此中断系统处于禁止状态。 (3) 单片机在中断响应后不会自动关闭中断。因此在转中断服务程序后, 以EA位作为总控制位,以各中断源的中断允许位作为分控制位。 应使用有关指令禁止中断,即以软件方式关闭中断。 中断控制相关寄存器:IE 中断控制相关寄存器:TCON 不挂科 单片机 2.中断源和中断控制5.单片机中断系统2.中断控制 8FH8EH8DH8CH8BH8AH89H88H TF0TR1TF0TR0IE1IT1IE0IT0 IE0、IE1:外部中断请求标志。硬件自动设置 CPU采样到 端有效的中断请求后,IEx位由硬件自动置 “1”。在中断响应期间(要转向中 断服务程序时),由硬件自动清零。 INTx IT0、IT1:外中断请求触发方式控制位。用户软件设置 ITx0 低电平触发方式 ITx1 负跳脉冲触发方式 至少1个机器周期至少2个机器周期 定时器控制寄存器TCON:寄存器地址为88H2 不挂科 单片机 2.中断源和中断控制5.单片机中断系统2.中断控制 TF0、TF1:定时器溢出中断请求标志位,相应溢出标志位TFx由硬件置“1”。 a.软件查询时,作为溢出标志位,查询有效后,用户软件清零。 b.中断方式时,作为中断请求标志位,为“1”时,自动转向中断服务程序,再由硬件自动清零。 TR0、TR1: 下一章讲定时器/计数器时再讲 中断控制相关寄存器:TCON 8FH8EH8DH8CH8BH8AH89H88H TF0TR1TF0TR0IE1IT1IE0IT0 定时器控制寄存器TCON:寄存器地址为88H2 LOOP:JBC TF0,NEXT SJMP LOOP 例: 不挂科 单片机 2.中断源和中断控制5.单片机中断系统2.中断控制 中断控制相关寄存器 0AFH0AEH0ADH0ACH0ABH0AAH0A9H0A8H EA/ESET1EX1ET0EX0 中断允许控制寄存器IE:用户软件设置,寄存器地址为A8H。1 8FH8EH8DH8CH8BH8AH89H88H TF0TR1TF0TR0IE1IT1IE0IT0 定时器控制寄存器TCON:寄存器地址为88H2 不挂科 单片机 2.中断源和中断控制5.单片机中断系统2.中断控制 9FH9EH9DH9CH9BH9AH99H98H SM0SM1SM2RENTB8RB8TIRI TI:串行口发送中断标志位。当CPU将一个数据写入发送缓冲器时,就启动发送当最后一个 数据位发送完后,TI由硬件自动置位,并向CPU发中断申请。进行中断服务程序时, TI要由 软件清0。软件查询时, TI可作为状态位使用。 RI:串行口接收中断标志位。当CPU接收数据时,当接收到最后一个数据位后,RI由硬件自 动置位,并向CPU发中断申请。进行中断服务程序时, RI要由软件清0。软件查询时, RI可 作为状态位使用。 中断控制相关寄存器:SCON 串行口控制寄存器SCON3 不挂科 单片机 2.中断源和中断控制5.单片机中断系统2.中断控制 0BFH0BEH0BDH0BCH0BBH0BAH0B9H0B8H /PSPT1PX1PT0PX0 PX0:外部中断0优先级设定位 PX1: 外部中断1优先级设定位 PT0:定时中断0优先级设定位 PTl: 定时中断1优先级设定位 PS : 串行中断优先级设定位 对应位置1,优先级为高;置0,优先级为低。 中断控制相关寄存器:IP 中断优先级控制寄存器IP 4 不挂科 单片机 2.中断源和中断控制5.单片机中断系统2.中断控制 0BFH0BEH0BDH0BCH0BBH0BAH0B9H0B8H /PSPT1PX1PT0PX0 注意: 系统复位后,各位均为 0,或如果同级的多个中断请求同时出现,则按CPU查询 次序确定那个中断请求被响应。其查询次序为: 低优先级中断请求不能打断高优先级的中断服务;但高优先级中断请求可以打断低 优先级的中断服务,从而实现中断嵌套。 如果1个中断请求已被响应,则同级的其它中断响应将被禁止。 外部中断0、定时中断0、外部中断1、定时中断1、串行中断。 中断控制相关寄存器:IP 中断优先级控制寄存器IP 4 中断优先级 不挂科 单片机 2.中断源和中断控制5.单片机中断系统2.中断控制 中断嵌套流程图 主 程 序 继 续 执 行 主 程 序 返 回 中 断 响 应 低 级 中 断 程 序 RET1 中 断 响 应 返 回 高 级 中 断 程 序 RET1 优先级高,则CPU先响应 主 程 序 继 续 执 行 主 程 序 返 回 中 断 响 应 高 级 中 断 程 序 RET1 中 断 响 应 返 回 低 级 中 断 程 序 RET1 (平级)(平级) 优先级低,则CPU不影响高级中断 当多个中断源请求中断服务,那么CPU响应这些中断就有一个先后顺序,称之为中断优先级。 不挂科 单片机 中断响应和中断服务 中断响应 中断服务 小节1 小节2 3.中断响应和中断服务5.单片机中断系统 不挂科 单片机 中断响应和中断服务 中断响应 中断服务 小节1 小节2 3.中断响应和中断服务5.单片机中断系统 中断响应 不挂科 单片机 1.中断响应3.中断响应和中断服务5.单片机中断系统 中断响应:在满足CPU中断响应条件后,CPU对中断源中断请求的回答。 中断响应基本条件(来中断,开中断) 有中断源发出中断申请(中断采样S5P2、中断查询S6) 中断总允许位EA1 各个中断源相应的允许位置1,即ES、ET1、EX1、ET0、EX0。 中断响应可能会被阻止或被延迟: CPU正处在为一个同级或高级的中断服务中。 查询中断请求的机器周期不是当前指令的最后一个机器周期,即当前指令完成前,不会响 应任何中断请求。 当前指令是返回指令(RET,RETl)或访问IE、IP的指令。MCS5l中断系统规定,在执行完 这些指令之后,还应再继续执行一条指令,然后才能响应中断。 中断响应 不挂科 单片机 1.中断响应3.中断响应和中断服务5.单片机中断系统 中断响应过程: 如果满足中断响应条件且不存在中断封锁情况,则CPU进入中断响应周期,完成以下工作: 将响应的优先级状态触发器置1。 由硬件清除相应的中断请求标志位:TFx,IEx。 但串行中断标志位必须手动清除。 执行一条由硬件生成的长调用指令LCALL。其格式为LCALL addr16,这里的addr16就是 程序存储器中相应中断区的入口地址。该指令将自动把断点地址(当前PC值)压入堆栈 保护起来,然后将对应的中断入口地址装入PC,使程序转向该中断入口地址,去执行中 断服务程序。 中断源入口地址 外部中断0 定时器0中断 外部中断1 定时器1中断 串行口中断 0003H 000BH 0013H 001BH 0023H 注意:中断服务程序入口地址仅间隔8字节,因此通常在这些 入口地址处存放一条无条件转移指令,以控制程序转到用户安 排好的中断服务程序地址去执行。 中断响应时间 不挂科 单片机 1.中断响应3.中断响应和中断服务5.单片机中断系统 中断响应时间: 从中断请求产生到CPU转到相应的中断服务程序的入口地址所需的时间。 (1)基本响应时间(3个机器周期) 查询中断标志:1个机器周期; 转去执行中断服务程序:2个机器周期 (2)额外的处理时间(0 5 个机器周期) RETI指令:2个机器周期; MUL或DIV指令:4个机器周期。 结论: 一般的中断响应时间都是38个机器周期。但是如果出现同级或是高级中断正在响应或是服务 中,则响应时间无法计算。 一般应用中,中断响应时间无需计算,只有在精确定时的应用场合,才需要计入中断响应时 间,保证定时的精确。 不挂科 单片机 中断响应和中断服务 中断响应 中断服务 小节1 小节2 3.中断响应和中断服务5.单片机中断系统 中断服务 不挂科 单片机 2.中断服务3.中断响应和中断服务5.单片机中断系统 中断都是在运行主程序时发生的,是主程序的随机事件,是否允许发生以及如何发生,都应该在 主程序中预先设置,这就是中断初始化。 中断服务程序:从入口地址开始执行一直到返回指令RETI为止。 需注意的问题: 现场保护和现场恢复 所谓现场,指中断时刻,单片机存储单元中的数据或状态,一定是主程序和中断程序都用到 的且不能被修改的存储单元。 现场保护:位于中断处理程序首部,PUSH 操作数 现场恢复:位于中断处理程序尾部,POP 操作数 开中断和关中断 在中断处理程序中,关中断,禁止响应其他一切中断,无中断嵌套; 要保持中断嵌套,就要分别在现场保护和现场恢复前后,加上关中断和开中断,避免现场被 破坏。 中断返回 不挂科 单片机 2.中断服务3.中断响应和中断服务5.单片机中断系统 中断处理程序后最后一条指令必须是中断返回指令RETI。执行该指令时: 将“优先级状态触发器”复位为0; 从堆栈栈顶弹出断点地址,装入PC,从而返回主程序。 中断服务子程序返回指令RETI与子程序返回指令RET的区别: 中断服务子程序返回指令除了具有子程序返回指令的全部功能外,还可以自动清除中断响应时 被置位的优先级状态、开放较低等级中断和恢复中断等功能。 中断服务 不挂科 单片机 2.中断服务3.中断响应和中断服务5.单片机中断系统 ;中断返回 ;自动跳转到对应的中断入口地址 ;从这里跳转到中断服务程序 ORG0000H LJMP MAIN ORG0003H MAIN:. . SJMP $ LJMP SUB SUB:. RETI 中断服务程序的程序框架: 不挂科 单片机 2.中断服务3.中断响应和中断服务5.单片机中断系统 +5V P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 80C51 INT0 例题5-1硬件电路如图,通过8051单片机的P1口控制8个LED做左移和右移发光,当中断来时(按下/INT0),使 8个LED闪烁5次。 不挂科 单片机 2.中断服务3.中断响应和中断服务5.单片机中断系统 +5V P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 80C51 INT0 解析5-1问题分析:中断源为外部中断0,根据电路图可以看出,LED为共阳极,即P1输出0时灯亮。 例题5-1硬件电路如图,通过8051单片机的P1口控制8个LED做左移和右移发光,当中断来时(按下/INT0),使 8个LED闪烁5次。 不挂科 单片机 2.中断服务3.中断响应和中断服务5.单片机中断系统 ORG 0000H AJMP MAIN ORG 0003H AJMP EXT0 ORG 0030H SETB EX0 MAIN:SETB EA MOV SP,#70H MOV A,#0FFHLOOP: CLR C MOV R2,#08H RLC ALP1: MOV P1,A ACALL DELAY DJNZ R2,LP1 MOV R2,#07H ;设左移8次 ;打开中断总开关 ;重设堆栈指针 ;左移结束,设右移7次 ;延时0.2秒 ;输出至P1口 ;左移初值 RRC ALP2: MOV P1,A ACALL DELAY DJNZ R2,LP2 AJMP LOOP 例题5-1硬件电路如图,通过8051单片机的P1口控制8个LED做左移和右移发光,当中断来时(按下/INT0),使 8个LED闪烁5次。 ;等同于MOV IE, #81H ;打开外部中断0中断开关 ;外部中断0的中断入口地址 ;跳转到中断服务程序 ;重复循环,开始左移和右移 ;带进位标识位的左移 ;利用循环移位,CY作为低电平 ;左移继续,移动8次 ;带进位标识位的右移 ;输出 ;延时 解析5-1问题分析:中断源为外部中断0,根据电路图可以看出,LED为共阳极,即P1输出0时灯亮。 不挂科 单片机 2.中断服务3.中断响应和中断服务5.单片机中断系统 PUSH ACC EXT0: PUSH PSW SETB RS0 CLR RS1 MOV A,#00 MOV R2,#0AH MOV P1,A ACALL DELAY CPL A DJNZ R2,LP3 POP PSW POP ACC RETI MOV R5,#20 MOV R6,#20 DELAY: D1: MOV R7,#250D2: DJNZ R7,D3D3: DJNZ R6,D2 DJNZ R5,D1 RET END 例题5-1硬件电路如图,通过8051单片机的P1口控制8个LED做左移和右移发光,当中断来时(按下/INT0),使 8个LED闪烁5次。 ;保护现场 ;选工作寄存器组1 ;设LED灯全亮值 ;闪烁5次,亮灭10次 ;输出至P1口 ;A取反,灯灭/亮 ;循环,亮灭10次 ;恢复现场 ;延时0.2s子程序 LP3: 解析5-1;中断服务程序 ;延迟 不挂科 单片机 2.中断服务3.中断响应和中断服务5.单片机中断系统 例题5-2 解析5-2 编写程序,当接收到外部中断1的中断请求后,用P1口控制8个共阳极发光二极管发光,实现暗点 ORG 0030H MOV P1,#0FFH MAIN: MOV A,#01H RL A MOV P1,A DJNZ R1,LOOP END ;定时为1s的延迟程序 ;暗点引脚为高电平 ORG 0000H AJMP MAIN ORG 0013H AJMP EXT1 ;外部中断1的中断入口地址 主程序 EXT1: SETB EX1 SETB EA MOV SP,#70H ;打开中断总开关 ;重设堆栈指针 ;等同于MOV IE, #10000100B ;打开外部中断1中断开关 以大约 1Hz 频率由上到下循环移动30秒。 注意:共阳极的暗点,引脚输出为高电平。 ACALL DELAY1S MOV R1,#30 LOOP: RETI ;对P1初始化为全亮 ;循环左移 ;30秒计数初始值 ;30秒计数 ;中断返回 单片机中断系统 不挂科 单片机 第五讲