1 / 26

第 5 章 MCS-51 中断系统

第 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 的过程称为 中断服务 或 中断处理 。

khalil
Télécharger la présentation

第 5 章 MCS-51 中断系统

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第5章 MCS-51 中断系统

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

  3. 5.1中断的概念 • 引起CPU中断的根源,称为中断源。 • 中断源向CPU提出的中断申请,称为中断请求。 • CPU暂时中断原来的事务A,转去处理事件B的过程称为中断响应。 • CPU处理事件B的过程称为中断服务或中断处理。 • 对事件B处理完毕后,再回到原来被中断的地方(断点), 称为中断返回。 • 整个过程称为中断 。 • 实现中断功能而配置的软件与硬件称统为中断系统。

  4. 5.2 MCS-51 单 片机 的中断源5.3 ~~~中断控制 • 80C51的中断系统有5个中断源,2个优先级,可实现二级中断嵌套。

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

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

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

  8. 5.4.1 中断采样 在每个机器周期的S5P2期间,中断系统对各个外部中断源信号进行检测,根据检测结果,设置相应中断标志位IE0IE1的状态。 • 电平触发方式的外部中断请求:由一次检测结果来决定 • 若为高电平,表明没有中断请求,将对应的标志位IE0IE1清零。 • 若为低电平,表明有中断请求,将对应的标志位IE0IE1置1。 • 边沿触发方式的外部中断请求:由相邻两次检测结果来决定 • 若为先高后低电平,表明有中断请求,将对应的标志位IE0、IE1置1。 • 否则,表明没有中断请求,不改变IE0、IE1的状态

  9. 5.4.2 中断查询 CPU执行程序过程中,在每个机器周期的最后一个状态S6期间,按先后顺序对上一机器周期各个中断标志位的状态进行查询。 中断查询由硬件自动完成,先后顺序为: IE0→TF0 →IE1 → TF1→RI和TI • 中断标志位为1:表明有中断请求 • 在接下来的机器周期S1期间按优先级进行中断处理。 • 中断标志位为0:表明没有中断请求

  10. 5.4.3 中断响应 CPU执行程序过程中,对中断源提出的中断请求进行的接受响应处理 1、中断响应的条件 (1) 有中断源请求信号,中断源标志位为1。 (2) 中断允许开放即EA=1,且中断源对应的中断允许位置位1。 (3) 无同级或更高级中断正在服务。 (4) 当前的指令周期已经结束。 (5) 如果当前指令为RETI、RET或访问IE和IP的指令,至少需要再执行完一条指令。 当同时满足以上5个条件时CPU将对中断请求进行响应。

  11. 5.4.3 中断响应 2、中断响应 • 将相应的优先级状态触发器置1 (以阻断后来的同级或低级的中断请求)。 • 执行一条硬件LCALL指令: • 硬件清零相应中断请求标志(TI、RI除外) • 将当前PC内容压入堆栈——保护断点 • 将中断服务子程序入口地址送PC——转移 中断响应是由中断系统内部自动完成的。

  12. 5.4.3 中断响应 3、中断的响应时间 是指从中断请求标志位置1,到进入相应的中断服务程序开始执行第一条指令所持续的时间。 • 若M1周期的S5P2前某中断生效,在S5P2期间其中断请求被锁存到相应的标志位中去; • M2恰逢指令的最后一个机器周期,且该指令不是RETI或访问IE、IP的指令。于是,M3和M4便可以执行硬件LCALL指令,M5周期将进入了中断服务程序。 • 80C51的中断响应时间,至少要3个完整的机器周期。

  13. 5.4.3 中断响应 4、中断处理 中断处理就是执行中断服务子程序。 • 从中断入口地址开始执行程序,直到返回指令RETI为止。

  14. 5.4.4 中断返回 中断返回是指中断服务程子序执行完后,CPU返回原来断开的位置(断点),继续执行原来的程序的过程; 由RETI指令来完成,具体过程为: • 将相应中断优先级状态触发器清0,通知中断系统,中断服务程序已执行完毕,可以响应其他同级或更低级的中断。 • 将断点地址从栈顶弹出送回PC——恢复断点, • CPU从原来中断的地方继续执行程序; 注意,不能用RET指令代替RETI指令。在中断服务程序中PUSH指令与POP指令必须成对使用,否则不能正确返回断点 。

  15. 5.5 中断请求的撤销 CPU响应某中断请求后,在中断返回之前,应撤除该中断请求标志,否则会再次中断。 • 对定时计数器T0、T1的溢出中断,CPU响应中断后,硬件自动清除中断请求标志TF0和TF1。用户对此不必考虑。 • 对于串行口中断,CPU响应中断后,没有用硬件清除中断请求标志TI、RI,即这些中断标志不会自动清除,必须用软件清除 CLR RI;CLR TI,这是在编串行通信中断服务中应该注意的。

  16. 5.5 中断请求的撤销 • 对边沿触发的外部中断INT1和INT0,CPU响应中断后硬件自动清除中断请求标志IE0和IE1。用户对此不必考虑。 • 对电平触发的外部中断,CPU在响应中断时硬件不会自动清除中断标志,也不能用软件清除中断标志,因此,在CPU响应中断后应立即撤除INT1或INT0的低电平信号, • 需要外加硬件电路和软件配合才能实现。P95

  17. 5.6 外部中断的应用 5.6.1 中断程序设计 5.6.2 单外部中断源举例 5.6.3 多外部中断源举例

  18. 5.6.1 中断程序设计 • 主、子程序结构 • 中断服务子程序的主程序设计 • 中断初始化 • 用户对中断的控制和管理,实际是对4个与中断有关的寄存器TCON、SCON 、 IE、 IP进行控制或管理。 • 在中断初始化编制中应注意: • 开中断总控开关EA,置位中断源的中断允许位。 • 对外部中断INT0、INT1应选择中断触发方式。 • 多个中断源中断,应设定中断优先级,预置IP。 • 中断服务子程序设计 • 入口地址固定

  19. 中断服务程序的主程序设计框架 • 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 $ ;等待中断,此处也可以放置其他处理程序。

  20. 中断服务子程序设计框架 INT_0: ; INT_0为外部中断0服务程序真正入口地址 CLR EA ;关中断 PUSH PSW ;保护现场 PUSH A … SETB EA ;开中断,允许CPU响应高级中断 … ;中断服务子程序 … ; CLR EA ;关中断 POP A ;恢复现场 POP PSW … SETB EA ;开中断 RETI ;中断返回

  21. 5.6.2 单外部中断源举例 MCS-51 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 INT1 +5V K 【例5-1】用一个按钮控制8个发光二极管,每按动一次按钮,使发光二级管按L1→L2 →….→L8 →L1 的顺序循环移动点亮一位。 1、采用查询方式实现 ORG 0000H SETB P3.3 ;将P3.3口设置为输入状态 MOV A, #0FEH;设置L1~L8的初始状态 LOOP:MOV P1, A JB P3.3, $;若按钮未动作,则原地等待 JNB P3.3, $;等待按钮释放,保证按动一次 ;发光二极管只移动一位 RL A SJMP LOOP END

  22. 5.6.2 单外部中断源举例 MCS-51 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 INT1 +5V K 【例5-1】用一个按钮控制8个发光二极管,每按动一次按钮,使发光二级管按L1→L2 →….→L8 →L1 的顺序循环移动点亮一位。 2、采用中断方式实现 ORG 0000H ;PC复位地址 AJMP MAIN ;MAIN为主程序入口地址 ORG 0013H AJMP INT_1 ;INT_1为外部中断1服务程序入口地址 ORG 0100H ;真正的主程序开始 MAIN: MOV SP, #60H;堆栈初始化 MOV A, #0FEH;设置L1~L8的初始状态 MOV P1, A ;点亮二极管L1 SETB IT1 ;将外部中断1设置为下降沿触发方式 SETB EA ;CPU开中断 SETB EX1 ;外部中断1开中断 SJMP $ ;等待中断,此处也可以放置其他处理程序。 ORG 0200H ;真正的外部中断1服务程序 INT_1: RL A ;修改灯的状态 MOV P1, A RETI ;中断返回 END

  23. 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 $ ;等待中断,此处也可以放置其他处理程序。

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

  25. ORG 0000H • AJMP MAIN ;跳转主程序 • ORG 0003H • AJMP PITO ;跳转外部中断0服务程序 • ORG 0030H MAIN: 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 ;中断返回

  26. ORG 0000H • AJMP MAIN ;跳转主程序 • ORG 0003H • AJMP PITO ;跳转外部中断0服务程序 • ORG 0030H MAIN: 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 ;中断返回

More Related