布景: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位取余就能够呢?
图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进制数的求模求余算法。
我猜一下:我觉得关于十进制数的算法应该是契合恣意一种进制数的算法的,小学的数学只是以十进制为载体,思维可用于恣意进制数,然后数也能够是恣意进制的,看此进制数在现实生活中的用处来决议其呈现的频率了