51单片机的定时器延时计算

定时器延时的计算

定时器延时的计算先要确定以下几个值:

1.确定时钟周期、机器周期。

时钟周期由单片机的晶振频率Fclk决定。那么时钟周期就是1/Fclk(比如:11.0592MHz)。确定单片机的机器周期是n个时钟周期(n在51单片机下一般是12)。

2.确定需要单次定时器最大的计时时间长度

如果是16位的计数器,16位最大值是65535,共可计数65536次。如果是8位最大值是255,共可计数256次,12 * 65536/11059200 = 0.0711s,也就是说单次定时时间不超过71 ms

3.确定计数器初始值

先确定每一次要定时的时间长度,比如xms (注意不要超过步骤2的单次定时最长时间), 那么计数器的初始值如下:
  TH0=(65536-Fclk/1000/n*x)/256;     //注意:这里的除以1000是认为Fclk的单位是MHz
  TL0=(65536-Fclk/1000/n*x)%256;     
51单片机定时器示例代码,每1秒钟 P1口电平翻转
#include <stdio.h>
#define Fclk = 11059200UL     //11.0592MHz

typedef unsigned int uint16;

void main(void)
{    
    uint16 counter;
    TMOD &=0xF0;
    TMOD |= 0X01;

    TH0=(65536-Fclk/1000/12*10)/256;     //定时间隔为10ms
    TL0=(65536-Fclk/1000/12*10)%256; 

    TR0  =1;

    while(1)
    {
         if(TF0 == 1)
        {
            TF0 = 0;
            TH0=(65536-Fclk/1000/12*10)/256;     
            TL0=(65536-Fclk/1000/12*10)%256; 
            counter++;
        }

        if(counter == 100)
        {
            counter = 0;
            P1 = ~P1;  //每1秒钟P1口电平翻转
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值