中断是为了使单片机对外部或内部随机发生的事件具有实时(即时)处理能力而设置的。有了中断,使单片机处理外部或内部事件的能力大为提高,它是单片机的重要功能之一,是我们必须掌握的。
1.中断的基本概念
中断是CPU在执行现行程序(事件A)的过程中,发生了另外一个事件B,请求CPU迅速去处理(注:这就叫“中断请求”),使CPU暂时中止现行程序的执行(注:这叫“中断响应”),并设置断点,转去处理事件B(注:这叫“中断服务”),待将事件B处理完毕,再返回被中止的程序即事件A,从断点处继续执行(注:这叫“中断返回”的过程)。
图3-8 中断响应过程
中断的响应过程如图3-8所示。
生活中,中断的例子很多。例如,你正在看书(执行主程序),突然电话响了(中断请求),你停止看书(中断响应为在书上作记号,即设置断点),再去接听电话(中断服务),接听电话完毕,你再返回从断点处继续看书(中断返回)。
关于中断,还要理解以下两个概念:
①中断系统:实现中断的硬件逻辑和实现中断功能的指令统称为中断系统。
②中断源:引起中断的事件称为中断源,实现中断功能的处理程序称为中断服务程序。51系列的单片机一共有51个中断源,见表3-3。
表3-3 51系列的单片机的中断源
(续)
2.中断优先级
当单片机正在执行主程序时,如果同时发生了几个中断请求,单片机会响应哪个中断请求,或者,单片机正在执行某个中断服务程序的过程,又发生了另外一个中断请求,单片机是立即响应还是不响应,这取决于单片机内部的一个特殊功能寄存器——中断优先级寄存器的设置情况。我们通过设置中断优先级寄存器,可以告诉单片机,当两个中断同时产生时先执行哪个中断程序。如果没有人为地设置中断优先级寄存器,则单片机会按照默认的优先级进行处理(即优先级高的先执行)。如果设置了中断优先级寄存器,则按设置的优先级进行处理。52系列的单片机默认的中断优先级别详见表3-4。
表3-4 52系列的单片机默认的中断级别
3.中断嵌套
所谓中断嵌套,就是如果单片机正在处理一个中断程序,又有另一个级别较高的中断请求发生,则单片机会停止当前的中断程序,而转去执行级别较高的中断程序,执行完毕后再返回到刚才已经停止的中断程序的断点处继续执行,执行完毕后再返回到主程序的断点处继续执行。中断嵌套的流程图如图3-9所示。
图3-9 中断嵌套流程图
4.应用中断需要设置的4个寄存器(www.xing528.com)
(1)中断允许寄存器IE。CPU对中断源是开放(允许)或屏蔽(不允许),由片内的中断允许寄存器IE控制。IE在特殊功能寄存器中,字节地址为A8H,位地址从低位到高位分别为A8H~AFH,该寄存器进行位寻址,即编程时对寄存器的每一位都可以单独操作。单片机复位时IE的各个位全部被清0(即各个位都变为0)。
IE各个位的定义详见表3-5。
表3-5 中断允许寄存器IE各位的意义
(2)中断优先级寄存器IP。中断优先级寄存器IP在特殊功能寄存器中,字节地址为B8H,位地址从低位到高位分别为B8H~BFH,该寄存器可以进行位寻址,即编程时可以对寄存器的每一位都可以单独操作。IP寄存器用于设定各个中断源属于两级中断中的哪一级。单片机复位时,IP全部被清0。IP的各位定义详见表3-6。
表3-6 中断优先级寄存器IP各位的意义
注意:高优先级中断能够打断低优先级中断而形成中断嵌套,同优先级中断之间不能形成中断嵌套,低优先级中断不能打断高优先级中断。
一般情况下,中断优先级寄存器不需设置,而采用默认设置。
(3)定时器/计数器工作方式寄存器TMOD。TMOD在单片机内部的特殊功能寄存器中,字节地址为89H,不能位寻址(即编程时不能单独操作各个位,只能采用字节操作)。该寄存器用来设定定时器的工作方法及功能选择。单片机复位时,TMOD全部被清0,TMOD各位的定义详见表3-7。
表3-7 定时器/计数器工作方式寄存器TMOD各位的定义
(续)
(4)中断控制寄存器TCON。TCON在特殊功能寄存器,字节地址为88H,位地址从低到高为88H~8FH,TCON可以进行位寻址(每一位可单独操作)。该寄存器用于控制定时器/计数器的开启、停止,标志定时器/计数器的溢出和中断情况,还可对外中断、对行进行设置。单片机复位时TCON全部清0。TCON各位的定义详见表3-8。
表3-8 TCON各位的定义
5.中断服务程序的写法(格式)
C51中断函数的格式如下:
说明:中断函数不能返回任何值,所以前面需加voidꎻ函数名可以随便起,只要不和C语言关键词相同就行了ꎻ中断函数是不带参数的,所以()内为空ꎻinterrupt是固定的,必需的ꎻ中断号就是表3-4中的中断序号,需记住。
例如,定时器T1的中断服务可写为:voidT1_time()interrupt3。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。