2.9 交通灯实例
定时器/计数器是单片机中最常用、最重要的功能模块之一,本节通过交通灯控制器实例来演示定时器的使用方法,并复习如何使用上节学习的散转程序。
本节首先介绍交通灯的基础知识以及定时器/计数器的基础知识,接着介绍本实例的硬件电路构成,然后逐步分析定时器的编程以及程序的全貌,最后将总结一下本实例的技巧与注意点。
2.9.1 基础知识
交通灯控制器实例主要使用了8051单片机的定时器/计数器,本实例的基础知识主要包括:交通灯的变化规律、定时器/计数器的概念、定时器/计数器的相关寄存器、定时器/计数器的4种工作方式以及定时器/计数器的编程。下面就从这几个方面进行 介绍。
1.交通灯的变化规律
本实例是交通灯控制器,所以先介绍交通灯的变化规律。
假设一个十字路口为东西南北走向。初始状态为状态1南北方向绿灯通车,东西方向红灯。经过过一段时间(20秒)转换到状态2,南北方向绿灯闪几次转亮黄灯,延时3秒,东西方向仍然红灯。再转换到状态3,东西方向绿灯通车,南北方向红灯。过一段时间(20秒)转换到状态4,东西方向绿灯闪几次转亮黄灯,延时3秒,南北方向仍然红灯。最后循环至状态1。
2.定时器/计数器的概念
8051单片机内有两个可编程的定时器/计数器T0、T1。
当定时器/计数器用作“定时器”功能时,每经过1个机器周期(12个时钟周期),计数器加1。
当定时器/计数器用作“计数器”功能时,计数器在对应的外部输入管脚(T0为P3.4引脚,T1为P3.5引脚)上每发生一次1到0的跳变时加1。使用“计数器”功能时,外部输入每个机器周期被采样一次。当某一周期管脚状态采样为高而下一周期采样为低时,计数器加1。由于检测下降沿跳变需要两个机器周期(24个时钟周期)的时间,所以计数频率最大值只能为时钟周期的1/24。计数器对外部输入信 的占空比并无限制,但为了保证给定的电平信 在其改变之前至少被采样一次,外部输入信 必须至少保持一个完整的机器周期。
3.定时器/计数器的相关寄存器
与定时器/计数器相关的寄存器有定时器/计数器工作方式寄存器(TMOD)、定时器/计数器控制寄存器(TCON)。TCON已经在2.5节受控输出实例中介绍过,在本例中主要介绍TMOD寄存器。
定时器/计数器工作方式寄存器(TMOD),字节地址89H,不可进行位寻址。TMOD的格式如图2-13所示。
定时器/计数器的4种工作方式下的逻辑结构如表2-12所示。
(1)方式0
定时器/计数器的工作方式0称为13位定时器/计数器。它是由TLx的低5位和THx的8位构成13位的计数器,此时TLx的高3位未使用。该工作方式是为了和48系列单片机兼容而设计的一种工作方式,一般情况下一般不使用方式0进行定时/计数。方式0的控制方式与方式1完全相同,下面重点介绍方式1的控制方式。
(2)方式1
定时器/计数器的工作方式1称为16位定时器/计数器。它由TLx和THx构成,TLx计数溢出向THx进位,THx计数溢出置位TCON中的溢出标志位TFx。
GATE位的状态决定定时器/计数器运行控制取决于TRx一个条件还是TRx和INTx引脚这两个条件。当GATE = 0时,则只要TRx被置为1,定时器/计数器即被允许计数(定时器/计数器的计数控制仅由TRx的状态确定,TRx = 1计数,TRx = 0停止计数)。当GATE = 1时,定时器/计数器是否计数由INTx输入的电平和TRx的状态共同确定:当TRx = 1,且INTx = 1时,才允许定时器/计数器计数(定时器/计数器的计数控制由TRx和INTx两个条件控制)。
(3)方式2
定时器/计数器的工作方式0和方式1在计数溢出后,计数器的值为0,需要通过程序重新装入计数初值。
定时器/计数器的工作方式1称为初值自动重装的8位定时器/计数器。在该工作方式下,TLx作为计数器,当TLx计数溢出时,在置1溢出标志TFx的同时,还自动地将THx中的常数送至TLx,使TLx从该常数开始重新计数。这种工作方式可以省去用户软件中重装常数的程序,简化定时常数的计算方法(确定计数初值),可以相当精确地确定定时时间。
(4)方式3
工作方式3仅对定时器/计数器0有效,在该工作方式下,定时器/计数器0被拆成2个独立的定时/计数器:TL0、TH0。TL0使用T0的状态控制位C/T、GATE、TR0、INT0,而TH0被固定为一个8位定时器(不能用作外部计数方式),并使用定时器/计数器1的状态控制位TR1和TF1,同时占用定时器T1的中断源。此时,定时器/计数器1可设定为方式0、方式1和方式2,作为串行口的波特率发生器。
注意:此时,定时器/计数器1也可作为定时器,用于不需要中断的场合。
5.定时器/计数器的编程
(1)初始化
定时器/计数器的初始化编程包括以下几个部分:
- 根据要求给定时器/计数器方式寄存器(TMOD)送一个方式控制字,以设定定时器/计数器的工作方式。
- 根据需要给TH和TL寄存器送初值,以确定需要的定时时间或计数的初值。
- 根据需要给中断允许寄存器(IE)送中断控制字,以开放相应的中断和设定中断优先级。
注意:也可用查询方式来响应定时器。
- 给TCON寄存器送命令字以启动或禁止定时/计数器的运行。
(2)定时器/计数器初值的计算
- 计数器初值:
设计数器的模值为M,所需的计数值为C,计数初值设定为TC,则
TC = M-C(M = 213、216或28)。 – 定时器初值:
设定时器的模值为M,需要的定时时间为T,定时器的初值设定为TC,则
TC = M-T/t 机器周期(M = 213、216或28)。
2.9.2 硬件电路图
本实例硬件电路如图2-14所示,使用6只LED模拟两组红绿灯:VD1、VD2、VD3分别模拟南北方向的红灯、黄灯、绿灯,VD4、VD5、VD6分别模拟东西方向的红灯、黄灯、绿灯。
本实例的程序流程图如图2-15所示。
4.程序全貌
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!