在讨论单片机为什么中断之后又醒之前,我们需要先了解一下什么是中断。中断的本质是一种异步的事件,发生在单片机正在执行的指令流之外。当某个系统外部事件发生时,比如有一个IO口检测到一个电平变化,单片机就会暂停当前正在执行的指令,跳转到相应的中断服务程序中去执行中断服务程序,中断服务程序执行完之后,回到之前被打断的指令流中继续执行。
当中断发生时,单片机需要执行相应的中断服务程序才能完成中断请求。中断服务程序是一段预先定义好的特殊的程序,它不能被其它程序调用,在中断处理程序运行期间必须是唯一被运行的程序,因为此时中断请求源处于等待状态,如果不能及时响应就会导致系统异常。
中断服务程序的任务包括保存被中断前正在执行的现场,对中断事件进行处理以及恢复现场。
在单片机正常运行过程中,中断服务程序只有在特定的条件下才会被触发。当一个中断事件发生时,中断服务程序会暂停程序正在执行的代码,保存当前的上下文,并将控制权转交给中断服务程序。但在中断服务程序执行完毕后,CPU并没有结束其栈帧、函数调用等操作,而是根据之前的现场信息弹出堆栈恢复现场,并继续执行之前被暂停的指令流程。这就是为什么单片机在中断处理结束后又能继续执行正常流程的根本原因。
中断机制是单片机不可或缺的一个核心功能,它使得单片机能够在处理中断请求的同时维持着自己正常的运行状态,从而可以在多任务处理、嵌套程序调用等复杂场景下得以充分发挥自身优势。同时,中断机制也是实现实时控制的一个基础要素,它让系统可以在与外部世界交互的同时完成自身重要任务。