查看:
1543
|
回复:
0
|
单片机中断控制系统
|
|
发表于2018-12-29 16:32:27
|
只看该作者
1#
电梯直达
1 引言 单片机是把整个计算机和部分功能部件都集成到一块芯 片上的计算机,它体积小、性能稳定、价格便宜,被广泛使 用于多种现场控制领域。根据冯·诺伊曼关于计算机的组成的 理论,在这块芯片上应包含计算器、控制器、存储器和输入 输出设备这些计算机的基本结构组件。此外,8051 系列单片机芯片上还集成了中断控制器、定时器 / 计数器以及串行通信接口这些功能部件。所以,现在它不再被称为 SCM(Single Chip Micro-computer,单片机),而被称为 MCU(Micro- Controller Unit,微控制器)。在这些功能部件中,中断控制系统是非常重要的一个组成部分,它提高了 CPU 的工作效率, 实现了对整个系统的实时控制。 2 单片机中断控制机制当 CPU 接收到中断请求后停止正在执行的程序转而去执行相应的中断服务程序,在中断服务程序结束后返回原来的程序继续工作的这个过程就是中断。8051 系列单片机对 中断的管理是通过设置与中断有关的特殊功能寄存器来实现的。 在最基本的 8051 单片机中,能引发中断的中断源有 5 个, 分别是:2 个外部中断(INT0 和INT1)、2 个定时器中断(T0 和T1)和串口中断。每个中断源都有其对应的中断标志位(位 于特殊功能寄存器 TCON 和 SCON 中),当任一中断源有中断请求时其对应的中断标志位就会被自动置 1。 单片机的 CPU 通过定时查询(在每个机器周期的S5P2)中断标志位来检测是否有中断请求,当有中断请求并且其对应的中断允许位(由 IE 特殊功能寄存器控制)开放时就会进行中断响应,调用其中断服务程序。为了将中断源与其对应的中断服务程序建立联系,中断控制系统把每个中断源对应的中断服务程序在内存中的起始地址固定。当中断被响应时,CPU 会把当前的 PC(存放下一条指令的地址)推入堆栈保护起来,把中断源对应的固定的中断服务程序入口地址赋给 PC,这样中断源所对应的中断服务程序就会被调用执行。 中断嵌套是当 CPU 在执行中断服务时如果有级别更高的中断请求,CPU 会停止当前的中断服务转而去执行级别更高的中断服务程序的一种控制机制,只有当高级别的中断服 务程序完成后才会返回原来的低优先级继续中断服务程序。8051 单片机的中断控制系统支持中断嵌套,但只支持 2 级嵌套。其中中断优先级的设定由特殊功能寄存器 IP 来进行管理, 每个中断源在 IP 寄存器中对应一个控制位,这个控制位只有0、1 两种取值可能(所以单片机只能支持 2 级嵌套),其中 1 的优先级高于 0。 3 中断控制应用示例3.1 现象及硬件电路 本例采用了 51 单片机的两个外部中断 INT0 和 INT1, 通过不同的端口控制 3 个数码管显示数字来代表主程序(P0 端口)、低优先级中断服务程序(P2 端口,由 INT0 触发) 和高优先级中断服务程序(P1 端口,由 INT1 触发),硬件仿真电路图如图 1 所示。 本例良好展示了中断及中断嵌套现象。没有中断时,P0 端口所连数码管循环显示数字 1 ~ 9;当外部中断 INT0 所连开关按下,触发一个中断请求,则 P0 端口的数码管会停止在当前的数字,P2 端口所连数码管开始显示 1 ~ 9。在此过程中如果外部中断 INT1 所连开关按下,会触发一个高级别的中断请求,P2 端口所连数码管会停止递增显示数字,只保持显示当前数字,而 P1 端口连接的数码管会开始显示数字 1 ~ 9, 当 P1 端口显示结束后,数码管熄灭,P2 端口继续开始递增显示数字,当数字全部显示结束后,P2 端口熄灭。主程序控制的 P0 端口所连数码管从刚才停止的数字开始,继续循环递增显示数字。 3.2 程序设计 通常情况下,中断程序可以分成两部分:中断初始化和中断服务程序。 中断初始化是根据具体情况对中断系统进行控制,其重 点就是按要求对相关特殊功能寄存器进行写操作。在本例中, 需要设置的特殊功能寄存器有 TCON、IE 和 IP。 在 TCON 中,需要设置的是 IT0 和 IT1,它们选择外部中断 INT0 和 INT1 的触发方式。对于 51 单片机,可接收的外部中断请求信号是低电平和下降沿,而本例中两个外部中断请求信号都是下降沿有效,所以相关的 IT0 和 IT1 都应设置为 1。 要让中断被响应,对应的中断允许位必须开放,所以必 须设置 IE 寄存器。本例中 INT0 对应的 EX0、INT1 对应的 EX1 和中断总允许位 EA 都要被设置为 1。 最后,为了实现中断嵌套,必须设置 IP 特殊功能寄存器,虽然 INT0 的自然优先级高于 INT1 ,但自然优先级适用范围是在多个中断同时发出中断请求时谁先响应谁后响应的 问题,而要实现中断嵌套,则一定要求在 IP 寄存器中把高优先级的中断源对应控制位设为 1,低优先级中断源的对应控制位设为 0。本例为了让 INT1 中断源处于高优先级,则要把其对应的 PX1 设置为 1。 中断程序中除了中断控制的设置外,对应的中断服务程序的编写也是必不可少的部分。在不同的应用环境,中断服务程序有不同的内容,但它们的共同点是必须由中断源决定其在内存中存放的起始地址。如果采用 C 语言编写程序,中断服务程序由中断函数来实现。中断函数与普通函数的区别是函数头里有 interrupt 属性,interrupt 后面会跟一整数作为序号,通过序号的取值来设置中断号,匹配不同的中断源。对于 8051 单片机,只有 5 个中断源,序号的取值范围整数 为 0 ~ 4,分别对应 5 个不同的中断源。而本例中外部中断 INT0 的中断函数就应加上 interrupt 0。同理,外部中断 INT1 对应的中断函数应加上 interrupt 2。 4 结 语当今社会,单片机被广泛应用于生产与生活的各个领域, 而中断控制系统是集成在单片机芯片上的一个重要的功能部 件。本文介绍了 8051 系列单片机中断系统的中断源、中断响应的流程、中断控制机制和其相关的特殊功能寄存器。
参考文献[1] 周国运 . 单片机原理及应用 [M]. 北京 : 中国水利水电出版社 ,2014. [2] 江世明 . 单片机原理及应用 [M]. 上海 : 上海交通大学出版社 ,2013.
|
|