内容正文:
项目3 交通灯控制系统
任务3.4 交通灯控制系统
明确任务
十字路的交通灯控制属于典型的单片机时间控制系统,那么怎么能方便地实现长时间的精确定时控制?可以利用AT89S51单片机提供的内部定时/计数器来完成。
工作任务:设计制作时间精准的交通灯控制系统,利用AT89S51单片机内部定时/计数器进行时间查询式控制,设计硬件电路及软件编程编译下载调试。
1 定时方法比较
硬件定时:有硬件电路完成;修改电路中元件的参数改变定时时间,不够灵活、方便;
软件定时:编循环程序,时间精确;占用CPU;
可编程定时器定时:对系统时钟脉冲记数,灵活、方便。
一、AT89S51单片机定时器/计数器的结构原理
知识链接
有两个16位可编程定时器/计数器,简称为定时器0(T0) 和定时器1(T1)。加1计数器。
2 AT89S51单片机定时器/计数器的结构
3定时/计数器工作原理
本质就是一个加1计数器,根据信号源的不同分为定时器和计数器。
定时器,信号源机器周期(振荡周期12分频)。
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
计数器,外部信号输入引脚P3.4和P3.5,脉冲的下降沿将触发计数。因检测一个由1至0的跳变需要两个机器周期,故外部信号的最高计数频率为时钟频率的二十四分之一。
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
4 定时器/计数器的控制
工作方式寄存器TMOD:设置T0、T1的工作方式
GATE:门控位
GATE=0:软件启动定时器,即用指令使TCON中的TR1(TR0)置1即可启动定时器1(定时器0)。
GATE=1:软件和硬件共同启动定时器,即用指令使TCON中的TR1(TR0)置1时,还需外部中断INT0(INT1)引脚输入高电平时才能启动定时器1(定时器0)。
M1 M0 工作方式 功能描述
0 0 方式0 13位定时/计数器
0 1 方式1 16位定时/计数器
1 0 方式2 自动重装初值的8位定时/计数器
1 1 方式3 定时器0:分为两个独立的8位计数器
定时器1:无中断的计数器
C/T:定时计数功能选择位
C/T=0时,为定时器方式。
C/T=1时,为计数器方式。
M1、M0:方式选择位
定时器控制寄存器TCON
TFi:定时器溢出标志位。当定时器计满溢出时,由硬件自动使TFi置1,并申请中断。
TRi:定时器启停控制位。
GATE=0时,用软件使TR1置1即启动定时器1,若用软件使TR1清0则停止定时器1。
GATE=1时,用软件使TR1置1的同时外部中断INT1的引脚输入高电平才能启动定时器1。
IEi:外部中断0、1请求标志位。
ITi:外部中断0、1触发方式选择位。
5 工作方式
方式0:定时器/计数器是一个由TH0中的8位和TL0中的低5位组成的13位加1计数器
方式1:定时器/计数器是一个由TH0中的8位和TL0中的8位组成的16位加1计数器。
方式2:定时器/计数器是一个能自动装入初值的8位加1计数器,TH0中的8位用于存放定时初值或计数初值,TL0中的8位用于加1计数器。
方式3:定时器0分为两个独立的8位加1计数器TH0和TL0。
1.定时器/计数器的初始化步骤
(1) 确定定时器/计数器的工作方式,并写入TMOD。
(2) 预置定时初值或计数初值,根据定时时间或计数次数,计算定时初值或计数初值,并写入TH0、TL0或TH1、TL1。
(3) 根据需要开放定时器/计数器的中断,给IE中的相关位赋值。
(4) 启动定时器/计数器,给TCON中的TR1或TR0置1。
二、编程技巧
设晶振频率为12MHz,选择T0定时10ms,只依靠定时器软件控制完成定时,设置相关寄存器。
步骤①根据已知条件,晶振频率为12MHz,则机器周期为1us,定时10ms即10000us,工作方式中只有方式1能达到一次性溢出计时10ms的要求。因只靠软件控制定时,所以GATE门信号应为0。TMOD高4位控制T1可全部为0。
TMOD=0X01; //T0,工作方式1,定时模式,软件控制
步骤③T0溢出可以采用查询和中断两种方式进行。采用查询方式不需要设置中断,故此步骤可以省略,中断方式设置参照项目四。
步骤④启动定时器运行,即将TCON中的TR0置位。
TR0=1;//启动T0
步骤②计算初始值,由于机器周期为1us,所以需要计数10000次才能计时10ms。初始值为65536-10000=55536。将55536转换为十六进制55536=0XD8F0,将高字节赋给TH0,低字节赋给TL0.
TH0=0XD8; //赋值高位
TL0=0XF0; //赋值低位
CPU查询方式又称为软件查询方式,需要用户进行编程处理。
2定时器溢出处理
检测到溢出标志位有效时,首先进行标志位清零处理,为下次计时做准备,然后对计数值进行重新赋值,之后再进行其他程序处理。
if(TF0==1) //查询判读标志位
{
TF0=0; //清除标志位,为下次查询做准备
TH0=0XD8; //赋值高位
TL0=0XF0; //赋值低位
----- //其他处理程序
}
三、硬件电路图
四、软件设计与编程
(1)利用定时器数码管静态显示0-9,间隔1s
如果采用12MHz晶振,那定时最大时间为65.536ms。所以需要采用间接方式实现。如采用50ms*20方式。
while(!TF0); //等待计时50ms
TF0=0;
TH0=0x3C;
TL0=0xB0; //置初值,准备下次定时
count++;
if(count>20) //1s时间到
{
count=0; //准备下个1s
sec++;
if(sec>9)
sec=0;
}
单击此处编辑母版文本样式
第二级
第三级
第四级
第五级
(2)设计交通控制软件控制系统。要求绿灯亮30s,红灯35s,黄灯5s。 时间仅计时两个方向。
十字路口两个方向的红绿灯共12个。因同一个方向的红绿灯工作情况完全一样,所以相当于控制6个不同工作状态的,仅需要单片机的6个端口。
数码管的控制,因需要4个数码管,所以这里采用IO扩展方式进行,减少对单片机端口的需求。164应用参照任务2.
任务实施
1.学生分组,制定方案。
2.查阅资料,设计电路原理图,列出元件清单。
3.准备元件及工具,搭接电路。
4.注意安全。
评价总结
1.学生根据自己实施情况填写任务实施评价单。
2.组间互评,提出问题,解决问题。
3.回收元件及工具,清洁实施现场,6S标准。
4.知识整理总结。
T0(P3.4)
T1(P3.5)
(P3.2)
(P3.3)
启动
工作方式
启动
工
作
方式
溢出
溢出
中断
(8AH)
(8CH)
(8BH)
(8DH)
TL0
TH0
TMOD(89H)
TCON(88H)
TL1
TH1
CPU
中断
INT0(P3.2)
GATE
TR0
T0(P3.4)
C/� EMBED Equation.DSMT4 ���=1
C/� EMBED Equation.DSMT4 ���=0
≥1
&
1
TF0
TL0
(8位)
TH0
(8位)
12分频
振荡器
中断
INT0(P3.2)
GATE
TR0
T0(P3.4)
C/� EMBED Equation.DSMT4 ���=1
C/� EMBED Equation.DSMT4 ���=0
≥1
&
1
TF0
TL0
(8位)
TH0
(8位)
12分频
振荡器
中断
INT0(P3.2)
GATE
TR0
T0(P3.4)
C/� EMBED Equation.DSMT4 ���=1
C/� EMBED Equation.DSMT4 ���=0
≥1
&
1
TF0
TL0
(5位)
TH0
(8位)
12分频
振荡器
中断
INT0(P3.2)
GATE
TR0
T0(P3.4)
C/� EMBED Equation.DSMT4 ���=1
C/� EMBED Equation.DSMT4 ���=0
≥1
&
1
TF0
TL0
(8位)
TH0
(8位)
12分频
振荡器
重新装入
中断
INT0(P3.2)
GATE
TR0
T0(P3.4)
C/� EMBED Equation.DSMT4 ���=1
C/� EMBED Equation.DSMT4 ���=0
≥1
&
1
TF0
TH0
(8位)
TL0
(8位)
12分频
振荡器
TR1
12分频
振荡器
中断
TF1
中断
INT0(P3.2)
GATE
TR0
T0(P3.4)
C/� EMBED Equation.DSMT4 ���=1
C/� EMBED Equation.DSMT4 ���=0
≥1
&
1
TF0
TH0
(8位)
TL0
(8位)
12分频
振荡器
$$