定时器延时的计算
定时器延时的计算先要确定以下几个值:
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口电平翻转
}
}
}