定时器在工作时应给计数器发送初值,这个值被发送给TH和TL中。它以加法来记数的,并且能从全1到全0的时侯来自动的发出溢出中断的请求。因此,我们把计数器记至满为零的时候所需要的计数值来设为C,把计数的初值设为TC,从中可以得到以下的计算通式:TC=M-C 式中,M是计数器的模值,M的值和计数器工作的方式有关系。当方式0的时侯M的值是213;当方式1的时侯M的值是216;当方式2和3的时侯M是28。
算法公式:
T=(M-TC)T计数 或TC=MT/T计数
T计数它是单片机的时钟周期的12倍;而TC代表定时的初值。
如果单片机主脉冲的频率为12MHZ,通过12分频
方式0 TMAX=213 × 1 微秒=8.19毫秒
方式1 TMAX=216 × 1 微秒=65.53毫秒
显然,1秒已超过计数器本身最大的定时时间,因此我们只能用定时器跟软件两者相结合这个办法来解决问题。
实现1秒方法如下:
在主程序里面设定了初值是20的计数器,并且使T1定时为50毫秒。这样一来每当T1到50毫秒的时侯CPU就会来响应它的溢出中断的请求,并进入它的中断时服务的子程序中。在中断服务的子程序里,CPU使得软件的计数器先减掉1,然后再来判断是否已为零。如果为0了则表示1秒时间已到,可以返回至输出时间的显示程序中[5]。
5. 系统调试
5.1 软件调试
进行软件调试时,首先编写程序,检查程序编写是否正确,当程序编写无误后再将程序写入AT89S51芯片,观察电路有效果出来。如无法正常显示,可能是程序编写错误,继续改正。如果检查程序无误,但是结果显示还是不正确,则有可能是原件损坏。将程序进行编译后,打开AT89S51单片机的元件属性编辑对话框,在PROGRAM FILE中,单击文件夹图标,选择“程序RB.hex”文件后,即可对系统进行仿真。
5.2 Proteus软件仿真
Proteus7.2是目前最好的模拟单片机外围器件的工具,可以仿真51系列、AVR,PIC等常用的MCU及其外围电路。因此在进行仿真和程序调试的时候,直接从工程的角度来看程序运行和电路工作的过程和结果。这样的仿真实验弥补了实验和工程应用间脱节的矛盾和现象。
仿真的结果如下:
(1)南北绿,东西红时如图9所示。
图9 南北绿,东西红
此时的结果显示为南北方向为绿灯通行,而东西方向为红灯禁行。
(2)东西绿,南北红时如图10所示。
图10 东西绿,南北红
此时的结果显示为东西方向为绿灯通行,南北方向为红灯禁行。
(3)南北红,东西黄时如图11所示。
图11 南北红,东西黄
此时的结果显示为南北方向为红灯禁行,东西方向为黄灯等待通行。
(2) 手动控制的直行时间显示图,如图12所示。
图12 直行时间显示
此时显示的是控制的直行时间,电路上有三个开关,一个为紧急开关,为了预防有特殊车辆的通过;另外两个分别可以手动控制直行时间的长短,下限值为40秒,上限为99秒。
6. 结束语
本次设计是基于单片机的智能交通灯控制器,具有一定的实际意义。通过本次设计,成功完成了以AT89S51为核心单片机,通过数码管和LED灯完成了对十字路口交通灯的模拟情况,并且增加了紧急开关和手动控制时间显示等功能,使得交通灯系统更加智能,其运行稳定可靠,操作也方便简单,实用性高,可广泛应用与城市的交通路口。 AT89S51智能交通灯控制器的设计+源码+电路图(5):http://www.youerw.com/zidonghua/lunwen_968.html