3.中断服务子程序的流程 中断服务子程序的基本流程如图4-10所示。下面对有关中断 服务子程序执行过程中的一些问题进行说明。中断服务子程序入口 关中断 现场保护 开中断 中断处理 关中断 现场恢复 开中断 中断返回 图4-10 中断子服务程序的基本流程
6 3.中断服务子程序的流程 中断服务子程序的基本流程如图4-10所示。下面对有关中断 服务子程序执行过程中的一些问题进行说明
(1)现场保护和现场恢复 现场是指单片机中某些寄存器和存储器单元中的数据或状态。 为使中断服务子程序的执行不破坏这些数据或状态,因此要送 入堆栈保存起来,这就是现场保护。 现场保护一定要位于中断处理程序的前面。中断处理结束后, 在返回主程序前,则需要把保存的现场内容从堆栈中弹出恢复 原有内容,这就是现场恢复。 现场恢复一定要位于中断处理的后面。 堆栈操作指令:“PUSH direct”和“POP direct'”,是 供现场保护和现场恢复使用的。要保护哪些内容,应根据具体 情况来定
7 (1)现场保护和现场恢复 现场是指单片机中某些寄存器和存储器单元中的数据或状态。 为使中断服务子程序的执行不破坏这些数据或状态,因此要送 入堆栈保存起来,这就是现场保护。 现场保护一定要位于中断处理程序的前面。中断处理结束后, 在返回主程序前,则需要把保存的现场内容从堆栈中弹出恢复 原有内容,这就是现场恢复。 现场恢复一定要位于中断处理的后面。 堆栈操作指令:“PUSH direct”和“POP direct”,是 供现场保护和现场恢复使用的。要保护哪些内容,应根据具体 情况来定。 7
(2)关中断和开中断 现场保护前和现场恢复前关中断,是为防止此时有高一级的 中断进入,避免现场被破坏。 在现场保护和现场恢复之后的开中断是为下一次的中断做好 准备,也为了允许有更高级的中断进入。这样,中断处理可以 被打断,但原来的现场保护和现场恢复不允许更改,除了现场 保护和现场恢复的片刻外,仍然保持着中断嵌套的功能。 但有时候,一个重要的中断,必须执行完毕,不允许被其他 的中断嵌套。可在现场保护前先关闭总中断开关位,待中断处 理完毕后再开总中断开关位。这样,需把图4-10中的“中断处 理”步骤前后的“开中断”和“关中断”去掉
8 (2)关中断和开中断 现场保护前和现场恢复前关中断,是为防止此时有高一级的 中断进入,避免现场被破坏。 在现场保护和现场恢复之后的开中断是为下一次的中断做好 准备,也为了允许有更高级的中断进入。这样,中断处理可以 被打断,但原来的现场保护和现场恢复不允许更改,除了现场 保护和现场恢复的片刻外,仍然保持着中断嵌套的功能。 但有时候,一个重要的中断,必须执行完毕,不允许被其他 的中断嵌套。可在现场保护前先关闭总中断开关位,待中断处 理完毕后再开总中断开关位。这样,需把图4-10中的“中断处 理”步骤前后的“开中断”和“关中断” 去掉。 8
(3)中断处理 应用设计者根据任务的具体要求,来编写中断处理部分 的程序。 (4)中断返回 中断服务子程序最后一条指令必须是返回指令RET1。 CPU执行完这条指令后,把响应中断时所置1的不可寻址的 优先级状态触发器清0,然后从堆栈中弹出栈顶上的两个字 节的断点地址送到程序计数器PC,弹出的第一个字节送入 PCH,弹出的第二个字节送入PCL,从断点处重新执行主程 序
9 (3)中断处理 应用设计者根据任务的具体要求,来编写中断处理部分 的程序。 (4)中断返回 中断服务子程序最后一条指令必须是返回指令RETI。 CPU执行完这条指令后,把响应中断时所置1的不可寻址的 优先级状态触发器清0,然后从堆栈中弹出栈顶上的两个字 节的断点地址送到程序计数器PC,弹出的第一个字节送入 PCH,弹出的第二个字节送入PCL,从断点处重新执行主程 序。 9