如何计算12MHz的51单片机的定时器的周期
时间: 2024-04-07 20:27:53 浏览: 30
在 51 单片机中,定时器的时钟源可以选择晶振频率的 1/12 或 1/4。因此,如果晶振频率为 12MHz,则可以选择定时器时钟源为 1MHz 或 3MHz。
对于定时器模式 1,定时器计数器的上限为 65535。因此,我们可以使用以下公式计算定时器的周期:
定时器周期 = 定时器计数器上限 / 定时器时钟源频率
对于定时器时钟源频率为 1MHz 的情况,定时器周期为:
定时器周期 = 65535 / 1MHz = 65.535ms
对于定时器时钟源频率为 3MHz 的情况,定时器周期为:
定时器周期 = 65535 / 3MHz ≈ 21.845ms
因此,在 12MHz 的晶振频率下,若要实现一个周期为 3s 的定时器,可以选择定时器时钟源为 3MHz,计数器上限为:
计数器上限 = 定时器周期 / 定时器计数单位时间 - 1
定时器计数单位时间为定时器时钟源频率的倒数,即 1/3MHz。将定时器周期代入上述公式,可得:
计数器上限 = (3s) / (1/3MHz) - 1 = 999999
因此,在 51 单片机上使用定时器 0,以晶振频率 12MHz 为时钟源,可将计数器上限设置为 999999,以实现一个周期为 3s 的定时器。
相关问题
51单片机定时器初值计算
51单片机的定时器初值计算与所使用的定时器模式有关。以下以常用的模式1和模式2为例:
模式1:定时器计数器从 TH0 和 TL0 组成的 16 位初值开始计数,计数器溢出时,会触发中断。计数器的计数频率为定时器输入时钟频率的 1/12。
初值计算公式:初值 = (65536 - 计数时间 / 定时器输入时钟周期)。
例如,若使用 12MHz 的晶振作为定时器输入时钟,需要实现 1ms 的定时器中断,那么初值为:
初值 = (65536 - 1ms / (1/12MHz)) = 55536。
模式2:定时器计数器从 TH1 和 TL1 组成的 16 位初值开始计数,计数器溢出时,不会触发中断,但会将 TCON 中的 TF1 标志位置 1。计数器的计数频率为定时器输入时钟频率的 1/12。
初值计算公式:初值 = (65536 - 计数时间 / 定时器输入时钟周期)。
例如,若使用 12MHz 的晶振作为定时器输入时钟,需要实现 1ms 的定时器中断,那么初值为:
初值 = (65536 - 1ms / (1/12MHz)) = 55536。
需要注意的是,TH0、TL0、TH1 和 TL1 都是 8 位寄存器,初值是由它们组成的 16 位值。在设置初值时,应先将高 8 位写入 THx,再将低 8 位写入 TLx。
51单片机定时器计数1ms
51单片机定时器计数1ms的方法如下:
1. 首先需要了解机器周期的概念,它是CPU完成一个基本操作所需要的时间,其计算公式是:机器周期=1/单片机的时钟频率。
2. 51单片机内部时钟频率是外部时钟的12分频,也就是说当外部晶振的频率输入到单片机里面的时候要进行12分频。比如说你用的是12MHZ晶振,那么单片机内部的时钟频率就是12/12MHZ。
3. 当你使用12MHZ的外部晶振的时候,机器周期=1/1M=1us。如果我们想定时1ms,初值是多少呢?1ms/1us=1000。也就是要计数1000个,初值=65535-1000+1(因为实际上计数器计数到66636(2的16次方)才溢出,所以后面要加1)=64536=FC18H,所以初值即为THx=0XFC,TLx=0X18。
4. 配置定时器工作方式,设定1ms初值,开启定时器计数功能以及总中断。
```c
void Timer0Init() {
TMOD |= 0X01; //选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0 = 0XFC; //给定时器赋初值,定时1ms
TL0 = 0X18;
ET0 = 1; //打开定时器0中断允许
EA = 1; //打开总中断
TR0 = 1; //打开定时器
}
```