1.定时器如何定时

首先大致描述一下定时器的定时原理,其实本质就一句话:每经过一个机器周期,寄存器就加1。

这里就又要解释什么是时钟周期,什么是机械周期。我们的51单片机无论是开发板还是最小系统板上,都会有一个电子元件叫做“ 晶振 ”,这个晶振就是单片机的“心脏”。通常为了使串口波特率稳定传输数据,大部分的51单片机上的晶振频率为11.05922MHz。时钟周期 的计算方法就是晶振频率的倒数,也就是11.0592分之一秒。时钟周期是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。时钟周期是一个时间的量。更小的时钟周期就意味着更高的工作频率。有了时钟周期我们就可以进而计算出机械周期,一个机械周期 = 12 x 时钟周期 =12 x (1/时钟频率) 秒 = 12 / 时钟频率 秒 = 12 / 11059200 秒 = 12 000 000 / 11059200 微秒 = 1.085 微秒。总结一下,定时器定时的过程就相当于数有几个机械周期,数完了机械周期后定时器会溢出从而结束定时。

2.如何定时10ms

 使用51单片机定时不得不了解TCON寄存器,TR0:控制开始计时,TF0:判断定时器是否溢出(溢出时该位置1),TL0定时器初值低八位,TH0定时器初值高八位(不配置初值默认从0开始计数)。也就是说定时器模式在16位自动重装载值的情况下,从0开始计数,数完65536个机械周期也就是71ms的时候定时器会溢出。那么如果我们想定时10ms只需要从61ms的时候开始数,数到71ms的时候定时器刚好会溢出。这个时候只需要配置定时器初值的高八位和低八位即可。

配置高八位低八位的过程:

配置的过程也并不复杂,首先确定10ms包含了几个机械周期:

10ms➗1.085us=9216(这里注意单位换算)

若从0开始计数到溢出一共是65536个机械周期,那么如果从61ms开始定时也是就是从65536-9216=56320开始计数,换算成16进制就如下图:

 因此高位为DC, 低位为0。完美散花!!!

 当然现在有的软件输入定时时间后可以自动生成C代码,例如ISP。但是我想接触单片机初期这些“捷径”尽量少走,多搞清楚点底层的东西对单片机的学习是很有帮助的。