使用C语言开发8051单片机程序时,除了要控制好各I/O端口外,还要掌握8051单片机的外部中断、定时/计数器及串口通信等程序设计。定时/计数器及串口功能模块既可以工作于中断方式,也可以工作于非中断方式。图1-13给出了8051单片机中断系统结构。
图1-13 8051单片机中断系统结构
8051单片机有以下5个中断源。
· 外部中断请求0:从 (P3.2)引脚输入,由TCON寄存器IT0位设置其触发方式。
· 外部中断请求1:从 (P3.3)引脚输入,由TCON寄存器IT1位设置其触发方式。
· 片内定时/计数器0(TIMER0,简记为T0或T/C0)溢出中断请求。
· 片内定时/计数器1(TIMER1,简记为T1或T/C1)溢出中断请求。
· 片内串口收/发中断请求。
这5个中断源的中断号分别是0、2、1、3、4,用C语言编写中断程序时,中断函数名后要添加“interrupt n”,其中n为中断号。
8051单片机仅支持两级中断优先级,允许高优先级中断屏蔽低优先级中断,不允许新到达的中断屏蔽同级或低级中断。中断优先级由中断优先级寄存器(Interrupt Priority,IP)管理。由图1-13可知,将IP寄存器中的PS、PT1、PX1、PT0、PX0位设置为“1”或“0”,就可将每个中断源设置为高优先级或低优先级。如果通过IP寄存器同时配置了几个高优先级和几个低优先级中断,那么同属于高优先级的若干中断与同属于低优先级的若干中断将分别按照内部“自然优先级顺序”查询逻辑确定执行顺序。8051单片机的自然优先级顺序为
有关外部中断、定时/计数器及串口应用的多个特殊功能寄存器支持按位寻址。在程序设计中,既可以给这些特殊功能寄存器直接赋值,也可以对其中的相应位赋值。例如,某程序同时允许INT0和T0中断,可有如下代码:
或者写成
标准8051单片机寄存器头文件reg51.h已提供了它们的位定义,例如:
这些位定义将在C语言程序设计中被大量使用,对其含义及用途要熟练掌握。
下面再来看一下STC15中断请求源类型。STC15中断源汇总如表1-5所示,中断系统结构如图1-14所示。本书重点应用的STC15W4K32S4单片机支持所有这21个中断源,除INT2、INT3、T2、T3、T4、串口3、串口4中断及比较器中断固定为最低优先级中断外,其他中断均具有两个中断优先级。
表1-5 STC15中断源汇总
注:√表示对应的系列有相应的中断源。
图1-14 STC15中断系统结构
STC15中断触发条件如表1-6所示。STC15中断设置信息如表1-7所示。
表1-6 STC15中断触发条件
表1-7 STC15中断设置信息