logo
当前位置:首 页 > 编程技术 > 查看文章

51单片机定时器初值的计算

编程技术 你是第2823个围观者 0条评论 供稿者: 标签:

先说说什么是时钟周期?什么是机器周期?什么是指令周期?

时钟周期

时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12 us),是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率,则时钟周期为250ns。由于时钟脉冲是计算机的基本工作脉冲,它控制着计算机的工作节奏(使计算机的每一步都统一到它的步调上来)。显然,对同一种机型的计算机,时钟频率越高,计算机的工作速度就越快。但是,由于不同的计算机硬件电路和器件的不完全相同,所以其所需要的时钟周频率范围也不一定相同。我们学习的8051单片机的时钟范围是1.2MHz-12MHz。 在8051单片机中把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。

机器周期

在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个S周期(状态周期)组成。8051系列单片机的一个机器周期同6个S周期(状态周期)组成。前面已说过一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示),8051单片机的机器周期由6个状态周期组成,也就是说一个机器周期=6个状态周期=12个时钟周期。

指令周期 

指令周期是执行一条指令所需要的时间,一般由若干个机器周期组成。指令不同,所需的机器周期数也不同。对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。

通常含一个机器周期的指令称为单周期指令,包含两个机器周期的指令称为双周期指令。

一、10MS定时器初值的计算: 

1、晶振12M

12MHz除12为1MHz,也就是说一秒=1000000次机器周期。10ms=10000次 机器周期。

65536-10000=55536(d8f0)

TH0=0xd8,TL0=0xf0

2、晶振11.0592M

11.0592MHz除12为921600Hz,就是一秒921600次机器周期,10ms=9216次机器周期。

65536-9216=56320(dc00)

TH0=0xdc,TL0=0x00

二、50MS定时器初值的计算:  

1、晶振12M

12MHz除12为1MHz,也就是说一秒=1000000次机器周期。50ms=50000次 机器周期。

65536-50000=15536(3cb0)

TH0=0x3c,TL0=0xb0

2、晶振11.0592M

11.0592MHz除12为921600Hz,就是一秒921600次机器周期,50ms=46080次机器周期。

65536-46080=19456(4c00)

TH0=0x4c,TL0=0x00

 

三、使用说明 

以12M晶振为例:每秒钟可以执行1000000次机器周期个机器周期。而T 每次溢出 最多65536 个机器周期。我们尽量应该让溢出中断的次数最少(如50ms),这样对主程序的干扰也就最小。   开发的时候可能会根据需要更换不同频率的晶振(比如c51单片机,用11.0592M的晶振,很适合产生串口时钟,而12M晶振很方便计算定时器的时间),使用插接式比较方便。

对12MHz  1个机器周期 1us  12/fosc = 1us

方式0  13位定时器最大时间间隔  = 2^13 = 8.192ms

方式1  16位定时器最大时间间隔  = 2^16 = 65.536ms

方式2  8位定时器最大时间间隔  = 2^8 = 0.256ms =256 us

定时5ms,计算计时器初值  M = 2^K-X*Fosc/12  12MHz

方式0: K=13,X=5ms,Fosc=12MHz 则 M = 2^13 – 5*10^(-3)*12*10^6/12= 3192 = 0x0C78

THx = 0CH,TLx = 78H,

方式1: K=16,X=5ms,Fosc=12MHz 则 M = 2^16 – 5*10^(-3)*12*10^6/12= 60536 = 0xEC78

THx = ECH,TLx = 78H,

50ms 12MHz   THx = 3CH,TLx = B0H,

10ms       THx = D8H,TLx = F0H,

方式2: 最大时间 2^8Fosc/12 = 0.256ms

十进制数是怎么来的?

6MHz 一个机器周期 12/6 = 2us

定时1ms  计数初值x

(2^16-x)*2us  = 1000us

x = 2^16 – 500 ,TH,TL 可置 -500

12MHz 一个机器周期 12/12 = 1us

12MHz 一个机器周期 12/12 = 1us

定时50ms  计数初值x

(2^16-x)*1us  = 50000us

x = 2^16 – 50000 ,TH,TL 可置 -500

定时器  计内部晶振频率

计数器  计外部输入CPU脚上的脉冲个数  P3.4(T0)  P3.5(T1) 负跳变加一

当晶振为6MHz时,最高计数频率500KHz

说说梦想,谈谈感悟 ,聊聊技术,有啥要说的来github留言吧 https://github.com/cjx2328

—— 陈 建鑫

陈建鑫
你可能也喜欢Related Posts
footer logo
未经许可请勿自行使用、转载、修改、复制、发行、出售、发表或以其它方式利用本网站之内容。站长联系:cjx2328#126.com(修改#为@)
Copyright ©ziao Studio All Rights Reserved. E-mail:cjx2328#126.com(#号改成@) 沪ICP备14052271号-3