“单片机定时/计数器资源应用”课堂设计
2014-04-29高娟高英崔艳萍
高娟 高英 崔艳萍
單片机内部的定时/计数器资源在生活中有广泛的应用。本文结合笔者实际教学的过程及任务介绍课堂设计。
首先介绍前一个任务——“控制流水灯显示”中的延时程序存在的问题,即:延时时间是用软件延时产生的,不够精确,从而引出本次课的任务——用定时/计数器控制信号灯闪烁,通过这一任务来学习单片机的定时/计数器资源。要实现定时/计数器控制信号灯闪烁,就要知道使用定时/计数器的步骤,要掌握使用定时/计数器的步骤,就要先了解单片机定时/计数器的工作原理,这就是本次课的教学内容。
一、单片机定时/计数器的工作原理
单片机本身是数字电路,它只能数脉冲。这个脉冲来自于两个地方:一个是18,19脚接的晶振产生的脉冲信号,这个脉冲信号到单片机内部经过12分频后提供给定时器,定时器每接收到1个脉冲就会自动把计的数加1,而这个脉冲的周期就是机器周期,对机器周期进行计数当然就实现了定时功能。计数脉冲的另一个来源是单片机输入引脚P3.4和P3.5的外部脉冲信号,因为外部脉冲的周期不确定,所以这一次实现的就是计数功能。由此可见,定时和计数的本质都是计数,只是计数的对象不同而已。因此,定时问题可以转换成计数问题。
刚才讲了单片机的定时/计数器每接到一个脉冲就自动把计的数加1,这个数就放在了TH0、TL0、TH1、TL1里。TH0、TL0、TH1、TL1称之为计数容器。
单片机的定时/计数器到底是怎样工作的呢?定时/计数器的计数也像是往一个水桶里注水一样,水桶里面先存了一些水,然后再一滴滴往里面注水,直到水桶满了溢出为止。先存的水加上后滴的水就等于水桶的容量。对于定时/计数器而言,水桶的容量相当于定时/计数器的计数范围,设为M,先存的水相当于定时/计数器的计数初值,设为X,后滴的水相当于要计的数值,设为T。实际上我们总是已知要计的数值T,而计数器的计数范围M是可以选择的,也就是可变的,而初值X是未知的。显然,M=X+T,因此我们首先确定定时/计数器的计数范围M,接着计算初值X并将X装入定时/计数器的计数容器中,再启动定时/计数器,它就开始工作了。下面就来具体介绍定时/计数器的工作步骤。
二、使用定时/计数器的步骤
1.设置工作方式
设置工作方式可以解决两个问题:选择定时或计数功能,确定计数范围M。这两个功能合称为设置工作方式。设置工作方式是通过配置工作方式寄存器TMOD来实现的。具体用到的是这条指令:MOV TMOD,#XXH。究竟为TMOD送什么值,就要看TMOD的格式了。TMOD的高四位为T1的方式字段,低四位是T0的方式字段。高四位和低四位的含义是相同的。
提问:定时1s,应该选用哪种工作方式?怎样初始化呢? 1s=106us,超出了任何一种工作方式的最长定时时间,那么是不是就不能定时1s了呢?实际上可以利用循环,把1s可以转换成10ms×100次,20ms×50次或者50ms×20次,这样可以定时小的时间,再循环一定的次数就可以实现了。定时1s,可以选用工作方式1;如果选用定时器0,则用MOV TMOD,#01H;如果选用定时器1,则用MOV TMOD,#10H。当完成了初始化以后,就该设定计数初值了。
2.预置计数初值。
要计的数值T是已知的,计数范围M也已经确定了,那么计数初值X=M-T,将X装入16位计数容器就称为预置计数初值。预置初值是通过这两条指令实现的。
MOV TH0, #XXH
MOV TL0, #XXH
首先我们根据刚才讲过的计数器工作原理来计算定时1s的计数初值。
10ms=10000μs,1个机器周期是1μs,计数器加1,因此10000μs就要计数10000次,最大值是65536,所以初始值应该设为65536-10000=55536。55536转换为16进制数是3CB0,所以,应该通过以下两条指令预置计数初值。
MOV TH0, #3CH
MOV TL0, #0B0H
完成了TMOD的初始化,又设定好了计数初值后,就该启动定时/计数器工作了,这是靠控制寄存器TCON完成的。
3.启动定时
TCON的作用是控制定时/计数器的启动、停止,标志定时/计数器的溢出和中断情况。定时/计数器控制TCON的格式如下图所示。
■
TOCN中的低4位用于控制外部中断,与定时/计数器无关,将在中断系统介绍。
TR1:定时/计数器1运行控制位。
TR0:定时/计数器0运行控制位。
通过指令SETB TR0/TR1将相应的位置1就可以启动定时或计数了,就像赛跑时开发令枪就开始比赛一样。
TF0:定时/计数器0溢出标志位。
TF1:定时/计数器1溢出标志位。
当定时/计数器1计满溢出时,由硬件自动设置TF1=1,根据TF标志位CPU就知道什么时候定时结束了。
4.查询等待完成定时
查询等待完成定时通过这一条指令就可以了:JBC TF0/TF1,LP。
通过上面的介绍,学生已经知道使用定时/计数器的步骤了,接下来就综合以上各步,实现用定时/计数器控制信号灯闪烁,延时1s。
参考文献:
范红刚,魏学海,任思璟.51单片机自学笔记[M].北京:北京航空航天大学出版社,2010.