1.4 外部中断、定时器/计数器及串口应用 |
|
使用C语言开发8051单片机程序时,除了要控制4个双向I/O端口外,还要掌握8051单片机外部中断、定时器/计数器及串口程序设计。对于定时器/计数器及串口功能模块,它们既可以工作于中断方式,也可以工作于非中断方式,本书针对不同的工作方式分别提供了相应案例。图1-4给出了8051单片机的中断系统结构图。
图1-4 8051单片机中断系统结构图
8051单片机的5个中断源如下:
① 外部中断请求0,由 (P3.2)输入,TCON的IT0位用于设置其触发方式。
② 外部中断请求1,由 (P3.3)输入,TCON的IT1位用于设置其触发方式。
③ 片内定时器/计数器0(简记为T0或T/C0)溢出中断请求。
④ 片内定时器/计数器1(简记为T1或T/C1)溢出中断请求。
⑤ 片内串口收/发中断请求。
这5个中断源的中断号分别是0、2、1、3、4,用C语言编写中断程序时,中断函数后要添加interrupt n,其中n为中断号。
8051单片机仅支持两级中断优先级,仅允许高优先级中断屏蔽低优先级中断,不允许新到达的中断屏蔽同级或低级中断,中断优先级由中断优先级寄存器IP(Interrupt Priority)管理。由图1-4所示中断系统结构图可知,通过将IP寄存器中的PS、PT1、PX1、PT0、PX0位设置为“1”或“0”,可分别将每一中断源配置为“高优先级”或“低优先级”。如果通过IP同时配置了几个高优先级和几个低优先级中断,那么同属于高优先级的若干中断与同属于低优先级的若干中断将分别按照内部“自然优先级顺序”查询逻辑确定执行顺序。8051单片机的自然优先级顺序为
有关外部中断、定时器/计数器及串口应用的多个特殊功能寄存器支持按位寻址,在程序设计中,既可以给这些特殊功能寄存器直接赋值,也可以对其中的相应位赋值,例如,某程序同时允许INT0和T0中断,可有如下代码:
或者写成
和1.3节中的PSW一样,reg51.h已经提供了它们的位定义,下面给出其中的部分内容:
这些位定义中的大多数会在全书大量案例中使用,其含义及用途要熟练掌握,更完整的定义可以在at89x52.h文件中找到,根据所选择的单片机型号,可选择reg51.h或at89x52.h。