单片机执行一次中断服务可分为中断请求、中断响应、中断处理和中断返回四个过程。 单片机执行中断处理程序流程如图3-36所示。
1.中断请求的产生。
外部中断请求信号通过采样获得,片内中断请求信号则是由置位产生的。
(1)采样与置位。
采样:针对外部中断请求信号,CPU通过对芯片引脚P3.2P3.3的采样结果设置TCON寄存器的中断响应标志位状态。
置位:对于片内的定时器中断请求和串行口中断请求,是通过直接向定时器控制寄存器TCON和串行口控制寄存器SCON相应的中断请求标志位置位实现的。
(2)中断查询。
单片机通过采样或置位,在TCON和SCON锁存了中断标志位后,由CPU在每个机器周期的最后状态S6对锁存器进行查询,以确定有无中断请求。
CPU按中断优先级的顺序对中断请求标志位进行查询,同级中断则按外0、定0、外1、定1、串行的顺序查询。当查询到有标志位为“1”时,则表明有中断请求发生,接着就从相邻的下一个机器周期的第1个状态S1开始进行中断响应。
2.中断响应。
(1)中断响应的条件。
)CPU开中断,即IE中的中断总允许位EA置“1”,且该中断源允许位置“1”。
2)没有响应同级别或更高级别的中断。
3)没有响应同级别或更高级别的中断。
4)如果正执行的指令是返回(RET)指令或访问P、IE寄存器的指令,则CPU将至少再执行一条指令才能响应中断。
(2)中断响应过程。
在满足中断条件的情况下,CPU即响应中断,过程如下1)将P中相应的优先级控制位置1,以阻断后面的同级和低级中断请求。
2)撤消该中断源的中断请求标志,以避免中断返回后重复响应该中断。
3)将断点地址保存后,程序转向执行中断服务子程序。
3.中断处理。
中断处理过程如图3-37所示。
(1)保护现场。
之前CPU只是保护了PC的值,如果中断服务子程序要用到公共存储空间(如PSW、DPTR等),则在执行中断服务程序前也要将这些公共存储空间存储的内容加以保护(压入堆栈)。
(2)执行中断服务程序。
如果中断服务子程序超出上述指定的空间,就需要安排LJMP指令将服务程序跳转到其他地址。
(3)恢复现场。
恢复现场与保护现场相对,在返回主程序前需要将保护现场过程中压入堆栈的相关数据弹出,以确保程序能正确返回断点。
4.中断返回。
中断返回由中断返回指令RET来实现。该指令的功能是把断点地址从堆栈中弹出,送回到程序计数器PC;通知中断系统已完成中断处理,并同时清除优先级状态中断返回的恢复断点地址、清除优先级状态通常是由CPU自动完成的。