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=1∗12/12M=1us
1 u s ∗ 1000 = 1 m s 1us*1000 = 1ms 1us∗1000=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就行了
相关文档
寄存器
TCON
TMOD
模式0
模式1
模式2
模式3
15系列单片机计算
晶振为12M,并且为1t
所以定时器增加一加1/12M的时间。
那么5ms需要5ms*12M = 60000
所以65536-60000 = 5536
以上是关于51单片机定时器参数计算的主要内容,如果未能解决你的问题,请参考以下文章
如何编程实现51单片机每隔 t 时间发出一个脉冲?求C语言详细编程。。。