51单片机定时器参数计算

Posted _WILLPOWER_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51单片机定时器参数计算相关的知识,希望对你有一定的参考价值。

计算

晶振为:12MHz
定时器0,16位定时器模式
TMOD & = 0xF0;
TMOD |= 0x01;
如果是1ms定时,那么TH0和TL0如何算呢?
其中一个脉冲得时间
t = 1 ∗ 12 / 12 M = 1 u s t = 1*12/12M = 1us t=112/12M=1us

1 u s ∗ 1000 = 1 m s 1us*1000 = 1ms 1us1000=1ms

为什么要乘以12呢?因为51单片机12T得,所以16位定时器得初值要设置为(65536-1000)
所以TH0高8位为(65536-1000)/256,低八位为(65536-x)%256 (注:2^8=256)
所以:
TH0 = (65536-1000)/256;
TL0 = (65536-1000)%256;
因此定时器初始化得配置为:
(注意,因为16位模式不是自动重装,因此要在中断程序中,重装初值!)

#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit LED = P2^0;  
void Timer0Init() //1ms定时器

	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;		//设置定时器模式
	TH0 = (65536-1000)/256;		//设置定时初值
	TL0 = (65536-1000)%256;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计
	ET0 = 1;
	EA  = 1;


void Timer0Handle() interrupt 1

	TH0 = (65535-1000)/256;		//设置定时初值
	TL0 = (65535-1000)%256;		//设置定时初值
	LED = ~LED;


void main()

	Timer0Init();
	EA = 1;
	while(1)
	
		
	
      

可以看一下下图得仿真结果,示波器接的是LED口。如果你要2ms得定时,将1000改为2000就行了

相关文档

参考stc89c52官方文档

寄存器

TCON

TMOD

模式0

模式1

模式2

模式3

以上是关于51单片机定时器参数计算的主要内容,如果未能解决你的问题,请参考以下文章

51单片机定时器初值计算以及初值计算软件

51定时器初值的计算

单片机AD采样,10位AD和12AD的采样计算公式分别是啥?

4.1 51单片机-定时器使用

如何使用51单片机定时器方式1如何实现外接并入串出的移位寄存

毕业回馈-89c51之定时器/计数器(Timer/Count)