近日复习51单片机相关知识,终于对其时钟系统有了一个基本的认识,在这里分享出来。
首先看看51单片机的时钟从何而来
由课本可知,51单片机可以有两种时钟来源,一是内部RC,二是外部输入(一般由晶振产生)。这里不过多介绍,姑且将它们统称为时钟源。
时钟源产生的信号并不是直接供给单片机使用的,需要通过一个可编程时钟分频器分频,分频器输出时钟的称为系统时钟。
由上图可知,分频器在默认情况下是不分频的,也就是说,系统时钟频率默认等于时钟源频率。
有了系统时钟后,定时器时钟也就可以有了。将系统时钟再经过一道分频,即得到定时器时钟。以定时器0为例,通过配置辅助寄存器AUXR的最高位可配置定时器0的分频系数。
1:不分频
0:12分频(与传统8051一致)
关于AUXR,请参考下图
由此,我们可以知道,在外部12M晶振作为时钟源的情况下,系统时钟默认为12M,定时器0时钟默认为1M。也就是说,定时器每隔1us加一,定时时间最多达到65535us。其余定时器同理可推。
再说一说定时器初值的计算:通过刚才的例子可以计算出定时器时钟频率(假设是N)。这个时钟频率就是说在不管它的情况下,一秒钟可以计多少个数(可以计N个数)!那么我们就可以推算出在我们要定的时间内(记为t)可以计多少个数了(记为M,M=t/1*N),即计了M个数我们就可以知道过了t秒。然后用定时器最大计数值减去这个数就得到定时器的初值了。
例如:定时器时钟为1M(一秒计1M个数),要定时2ms(定时器计2000个数,2ms/1s*1M=2000),
那初值应该设置为(定时器0在16位定时器模式的情况下):65536-2000=63536
即:TH0=F8H,TL0=30H
(图都是从课本上拍下来的,然而课本到我手上已经不知道是几手的了。。。(~ ̄(OO) ̄)ブ 笔记较乱,请酌情参考)