中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置,中断功能的存在,很大程度上提高了单片机处理外部或内部事件的能力。
老版51单片机内部共有5个中断源(中断是处理器一种工作状态的描述。我们把引起中断的原因,或者能够发出中断请求信号的来源统称为中断源),也就是说,有5种情况发生时,会使单片机去处理中断程序。
为了让大家更容易理解中断的概念,我们先来举一个实例:你打开火,烧上一壶水,然后去洗衣服,在洗衣服的过程中,突然听到水壶发出水开的警报声,这时,你停止洗衣服动作,立即去关掉火,然后将开水灌入暖水瓶中,灌完开水后,你又回去继续洗衣服。这个过程中实际上就发生了一次中断。
对于单片机来讲,中断是指CPU在处理某一事件A时,发生了另一件事情B,请求CPU迅速去处理(中断发生);CPU暂时停止当前工作(中断响应),转去处理事件B(中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。
单片机结合实例:你的主任务是洗衣服,水开报警是中断请求,这一时刻相当于断点处,你响应中断去关火,然后将开水灌入暖水瓶中,这一动作实际就是处理中断程序,灌完水后再回去洗衣服,相当于处理完中断程序后在返回主程序继续执行主程序。
其中水开随时都有可能发生,中断也随时可能发生,但无论何时发生,只要一旦发生,单片机将立即暂停当前程序,处理中断程序,处理完之后接着暂停处继续执行原来程序。实现上述中断功能的部件称为中断系统。
中断的开启与关闭、设置启用哪一个中断等都是由单片机内部的一些特殊功能寄存器来决定,而我们就是来配置寄存器进而控制单片机中断。
与中断相关的知识点还有一个称之为中断嵌套,即单片机正在处理一个中断程序,此时又一个中断现象发生了,单片机将会停止当前中断的程序,而转去执行新的中断程序,新中断处理程序完毕后,返回刚才停止的中断程序处继续执行,执行完这个中断后再返回主程序执行主程序,就相当于前面你再水开后你关了火,突然电话又响了,你就会先停止灌水,去接电话,接完电话再灌水,灌完水再洗衣服。
在这里会设计一个很重要的关键词——中断优先级。就是再中断嵌套中会有个先后问题,单片机只能处理一件事情,那你该处理那件事情呢?对于我们肯定是去处理更重要的事情,对于单片机就是去处理优先级较高的事情,因此单片机内部有一个特殊功能寄存器——中断优先级寄存器,因此我们可以通过配置寄存器进而控制单片机中断同时出现时先执行哪个中断程序。如果没有人为操作优先寄存器,单片机会按照默认的一套程序优先级自动处理。
新版51单片机(52单片机)共有6个中断源,他们的符号、名称及产生条件分别解释如下:
INT0——外部中断0,由P3.2端口线引入,低电平或下降沿引起。
INT1——外部中断1,由P3.3端口线引入,低电平或下降沿引起。
T0——定时器0中断,由T0计数器计满引起。
T1——定时器1中断,由T1计数器计满引起。
T2——定时器2中断,由T2计数器计满引起。
TI/RI——串行口中断,串行端口完成一帧字符发送/接收后引起。
以上6个中断源中,T2使52单片机特有的。他们的默认级别如下:
单片机在使用中断功能时,通常需要设置两个与中断有关的寄存器:中断允许寄存器IE和中断优先级寄存器IP。
知识点
①中断允许寄存器IE用来设定各个中断源的打开与关闭,在该寄存器可进行位寻址,即可对该寄存器的每一位进行单独操作,单片机复位时IE被全部清零。
EA——全局中断允许位
EA = 1,打开全局中断控制,在此条件下,由各个中断控制位确定相应中断的打开与关闭。
EA = 0,关闭全部中断。
ET0——定时器0中断允许位。
ET0 = 1,打开T0中断。
ET0 = 0,关闭T0中断。
②中断优先级寄存器IP,该寄存器用来设定各个中断源属于两级中断的哪一级(高低),也是位寻址。
PS——串口中断优先级控制位
PS = 1,串口中断定义为高优先级中断。
PS = 0,串口中断定义为低优先级中断。
在51单片机系列中,只有高优先级能够打断低优先级中断以形成中断嵌套;若几个同级中断同时向CPU请求中断响应,在没有设置中断优先级情况下,按照默认中端级别响应中断,在设置中断优先级后,则按设置顺序确定响应的先后顺序。