51 机器周期 时钟周期 晶振频率 定时器初值计算 [李园7舍_404]

 背景:51单片机引出的概念。

 

1 机器周期

        在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期(如单片机中“计数器”完成加1这个过程也是一个机器周期)。一般情况下,一个机器周期由若干个S周期(时钟周期)组成。通常用内存中读取一个指令字的最短时间来规定CPU周期,(也就是 计算机通过内部或外部总线进行一次信息传输从而完成一个或几个微操作所需要的时间)),它一般由12个时钟周期组成。

 

2 时钟周期

        时钟周期=1秒/晶振频率,晶振频率的值即为时钟频率的值。因此单片机的机器周期=12秒/晶振频率。

 

3 晶振频率

        单片机开发板、学习板成型之时相应的晶振频率也已经被确定了。51单片机常用的晶振频率有11.059 2MHz、12MHz或其它值,^-^。

 

4 定时器初值计算

        定时器一旦被启动,它就会在原来初值的基础之上加1,当计满时重新归0。51单片机的定时器寄存器为16位,假设此51单片机的晶振频率为12MHZ,则根据机器周期概念及机器周期、时钟周期、晶振频率关系可知机器周期(即计数一次的时间)= 12 * (1 / 12MHZ) = 1us。这就表明,此51单片机的定时寄存器实现加1操作这个过程将要花1us的时间[ “计数这个硬件结构”达到加1的结果需要12个脉冲(或高电平) 么 ],如果此16位寄存器从0开始计数,则计到此寄存器下次为0时需要计2的16次方(65536)个数(计满只需要65535个数),所以定时器一次最多可以计时65536us。

        如果现在需要定时器每次定时时间T少于65536us,则需要给定时器寄存器设一个初值N。根据计m个数就对应m us可得 N = (65536 - T)。得到的N值就是需要装入定时器寄存器的值。

        咱们的51单片机定时器寄存器为16位,分高8位THn和低8位TLn(n=0, 1, 2).....,一般咱还得以8位为单位进行装值。将高8位THn装入N / 256(取模),将低8位TLn装入 N % 256即可,这两种运算得到的结果都是10进制的,将得到的值换算为二进制(或16)再装入高、低8位。得到定时器初值计算公式:

THn = (65536 - T) / 256

TLn = (65536 - T) % 256

其中THn,TLn表示响应定时器寄存器的高低8位。T表示需要被定时的微秒数, ‘/’表示取模运算, ‘%’表示取余运算


为什么对高8位取模对低8位取余就可以呢?

51 机器周期 时钟周期 晶振频率 定时器初值计算 [李园7舍_404]_第1张图片

 

图1. N 取模 取余原理图

        图中将8个二进制位看成一个单位,低8位表示数的范围[0, 255],高8位表示数的范围[0, 255 * 256],得到高8位是低8位的256倍。不防将此16位表示的十进制数看成256进制数。呵呵,然后对数的求模值放在256位(此位的值等于实际值(8位二进制换算得来)乘以权值256),对数的求余放在个位(此位的值等于实际值(8位二进制换算得来)乘以权值1),然后将得来的数求和就是此数了。就相当于一个十进制数K一样,K取10 的模得到十位的值,K取10的余得到个位的值。没注意就想到了这点,忽悠出来一个256进制数的求模求余算法。

        我猜一下:我觉得关于十进制数的算法应该是符合任意一种进制数的算法的,小学的数学只是以十进制为载体,思想可用于任意进制数,然后数也可以是任意进制的,看此进制数在现实生活中的用途来决定其出现的频率了    ,在记录知识点的同时发表了点不成文的感概,属个人情感^-^


Note Over.

你可能感兴趣的:(碚大)