中断程序后面通常接的是 中断服务程序(Interrupt Service Routine, ISR)。中断服务程序是当特定中断事件发生时,由CPU自动执行的一段程序。中断服务程序应当尽可能简短,以减少对主程序执行的影响。中断服务程序的最后一条指令必须是`IRET`(Interrupt Return)或`RETI`(Return from Interrupt),用于从中断服务程序返回到主程序继续执行。
中断服务程序的基本结构包括:
保存关键数据:
在处理中断前,需要将主程序中使用的关键数据保存到堆栈中,以防止中断处理过程中这些数据被修改。
中断处理逻辑:
根据中断事件的具体需求,执行相应的处理逻辑。
恢复数据:
在中断处理完毕后,需要将之前保存的关键数据从堆栈中恢复,以便主程序可以继续使用这些数据。
```c
pragma interrupt_handler INT_0:15
void INT_0(void) {
// 保存关键数据
PUSH M0
PUSH D0
// 中断处理逻辑
// 例如:检测到产品边缘发生偏移,立即停止传送带
RST Y0 // 关闭进料阀
SET Y1 // 打开溢流阀
SET M100 // 报警标志
// 恢复数据
POP D0
POP M0
// 中断返回
IRET
}
```
在这个示例中,`pragma interrupt_handler`指令用于声明中断服务程序,`INT_0:15`表示中断向量号为15的中断服务函数。中断服务程序首先保存关键数据,然后执行中断处理逻辑,最后恢复数据并返回主程序。
注意事项
中断程序要尽量简短,中断时间越长,主程序受影响越大。
避免在中断中修改主程序正在使用的数据。
中断服务程序的最后一条指令必须是`IRET`或`RETI`。