在单片机中,中断是指在程序执行过程中,硬件或软件发送了中断请求信号,导致CPU暂停正在执行的程序,转而执行中断服务程序来响应外设的请求。
中断可以使CPU对多个输入源进行及时响应,增强了单片机的并发性和响应性。
单片机中断的来源主要分为两类:内部中断和外部中断。
内部中断包括算术溢出、定时器溢出、串口接收中断等。而外部中断则是来自于单片机的外设,比如按键中断、GPIO中断等。
当中断请求信号来临时,CPU会暂停当前执行的指令,并保存程序现场(包括PC、CPU寄存器等)到系统栈中,然后执行中断服务程序。
在单片机中,不同的中断请求可能同时发生,此时需要确定中断的优先级,让CPU能够及时响应最高优先级中断的请求。
一般情况下,单片机通过中断向量表来管理中断的优先级,具有最高优先级的中断请求会先得到被响应。
在特殊情况下,我们也可以通过设置中断嵌套来改变中断的优先级,即允许一个正在处理的中断被更高优先级的中断请求中断,保证最高优先级中断的及时响应。
当我们需要使用中断功能时,需要在代码中进行中断的开启,否则CPU就无法响应中断请求。
在单片机中,中断的开启和关闭可以通过执行特定的指令来实现。
开启中断的指令为EI(Enable Interrupt),其会将CPU的中断允许标志位置1,表示允许响应中断请求。
关闭中断的指令为DI(Disable Interrupt),其会将CPU的中断允许标志位清零,表示禁止响应中断请求。