JD206 基于AT89C51的路灯控制系统设计

2026/1/27 12:53:54

3.2 计时程序的设计

计时程序的设计主要用到定时器的知识。下面我简述一下定时器的一些基础知识。

MCS-51单片机内部有两个16位可编程的定时器/计数器,即定时器T0和定时器T1。它们既可用作定时器方式,又可用作计数器方式。 (1)定时器/计数器结构

定时器/计数器的基本部件是两个8位的计数器(其中TH1,TL1是T1的计数器,TH0,TL0是T0的计数器)拼装而成。

在作定时器使用时,输入的时钟脉冲是由晶体振荡器的输出经12分频后得到的,所以定时器也可看作是对计算机机器周期的计数器(因为每个机器周期包含12个振荡周期,故每一个机器周期定时器加1,可以把输入的时钟脉冲看成机器周期信号)。故其频率为晶振频率的1/12。如果晶振频率为12MHZ,则定时器每接收一个输入脉冲的时间为1us。

定时器/计数器有四种工作方式,其工作方式的选择及控制都由两个特殊功能寄存器(TMOD和TCON)的内容来决定。用指令改变TMOD或TCON的内容后,则在下一条指令的第一个机器周期的S1P1时起作用。 (2)定时器/计数器的工作方式

MCS-51片内的定时器/计数器可以通过对特殊功能寄存器TMOD中的控制位C/T的设置来选择定时器方式或计数器方式;通过对M1M0两位的设置来选择四种工作方式,由于我采用了T0,所以就以T0来加以说明。

1、方式0

当M1M0设置为00时,定时器选定为方式0工作。在这种方式下,16位寄存器只用了13位,TL0的高三位未用。由TH0的8位和TL0的低5位组成一个13位计数器。

当GATE=0时,只要TCON中的TR0为1,TL0及TH0组成的13位计数器就开始计数;当GATE=1时,此时仅TR0=1仍不能使计数器计数,还需要INT0引脚为1才能使计数器工作。由此可知,当GATE=1和TR0=1时,TH0+TL0是否计数取决于INT0引脚的信号,当INT0由0变1时,开始计数;当INT0由1变

第 17 页 共 40页

0时,停止计数,这样就可以用来测量在INT0端出现的脉冲宽度。

当13位计数器从0或设定的初值,加1到全“1”以后,再加1就产生溢出。这时,置TCON的TF0位为1,同时把计数器变为全“0”。

2、方式1

方式1和方式0的工作相同,唯一的差别是TH0和TL0组成一个16位计数器。

3、方式2

方式2把TL0配置成一个可以自动恢复初值(初始常数自动重新装入)的8位计数器,TH0作为常数缓冲器, TH0由软件预置值。当TL0产生溢出时,一方面使溢出标志TF0置1,同时把TH0中的8位数据重新装入TL0中。 方式2常用于定时控制。例如希望每隔250μs产生一个定时控制脉冲,则可以采用12MHz的振荡器,把TH0预置为6,并使C/T=0就能实现。方式2不用作串行口波特率发生器。

4、方式3

方式3对定时器T0和定时器T1是不相同的。若T1设置为方式3,则停止工作(其效果与TR1=0相同)。所以方式3只适用于T0。

方式0和方式1的最大特点是计数溢出后,计数器全为0,因此循环定时或计数应用时就存在重新设置计数初值的问题,这不但影响定时精度,而且也给程序设计带来不便。方式2就是针对此问题而设置的,它具有自动重新加载功能,因此也可以说方式2是自动重新加载工作方式。在这种工作方式下,把16位计数器分为两部分,即以TL0作计数器,以TH0作预置寄存器,初始化时把计数初值分别装入TL0和TH0中。当计数溢出后,由预置寄存器以硬件方法自动加载。初始化时,8位计数初值同时装入TL0和TH0中。当TL0计数溢出时,置位TF0,同时把保存在TH0中的计数初值自动加载装入TL0中,然后TL0重新计数,如此重复不止,这不但省去了用户程序中的重装指令,而且有利于提高定时精度。但这种方式下计数值有限,最大只能到256。这种自动重新加载工作方式非常适用于连续定时或计数应用。

当为计数工作方式时,计数值的范围是:1~256(28)

当为定时工作方式时,定时时间计算公式为:(28-计数初值)x晶振周期x12

第 18 页 共 40页

或 (28-计数初值)x机器周期

通过上述四种方式的比较,由于方式2为自动恢复初值的8位定时器,根据本倒计时软件设计的要求,所以我们就采用了T0定时器的方式2。[2]

时间调整子程序流程图:

N判断秒按纽是否被按下?Y秒加1N是否加到六十?Y秒单元清零N判断分按纽是否被按下?Y分加1N是否加到六十?Y分单元清零N判断时按纽是否被按下?Y时加1N是否加到二十四?Y时单元清零返回 本次设计中用到了T0和T1进行中断控制,T0和T1用的都是方式一。在中断子程序中放进了显示程序,中断时间为2MS,可以实现数码管的动态扫描且无闪烁感。

第 19 页 共 40页

3.3 中断程序的设计

所谓中断,是指在计算机执行程序过程中,当出现某种情况,如发生停电和其他情况时,由服务对象向CPU发出中断请求信号,要求CPU暂时中断当前程序的执行,而转去执行相应的处理程序,待处理程序执行完毕后,再继续处理执行原来被中断的程序

中断子程序能实现时钟自动走时功能,从而实现倒计时的运行,在程序设计的过程中有着重要的作用,其流程图为:

中断入口重新赋计数初值调显示子程序N判断是否计数到1秒钟?Y1秒钟计数器清零秒加1N判断秒是否加到一分钟?Y分加1、秒清零N判断分是否加到一小时?Y时加1、分清零N判断时是否加到一天?Y时清零调转换BCD码子程序中断返回

第 20 页 共 40页


JD206 基于AT89C51的路灯控制系统设计.doc 将本文的Word文档下载到电脑
搜索更多关于: JD206 基于AT89C51的路灯控制系统设计 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219