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

15系列单片机计算

晶振为12M,并且为1t
所以定时器增加一加1/12M的时间。
那么5ms需要5ms*12M = 60000
所以65536-60000 = 5536

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

51单片机定时器参数计算

如何编程实现51单片机每隔 t 时间发出一个脉冲?求C语言详细编程。。。

51定时器初值的计算

关于使用STM32单片机完成脉冲计数功能的问题

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

4.10 51单片机-使用计数器测量NE555脉冲频率