定時器延時的計算
定時器延時的計算先要确定以下幾個值:
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 = UL //11.0592MHz
typedef unsigned int uint16;
void main(void)
{
uint16 counter;
TMOD &=;
TMOD |= ;
TH0=(-Fclk//*)/; //定時間隔為10ms
TL0=(-Fclk//*)%;
TR0 =;
while()
{
if(TF0 == )
{
TF0 = ;
TH0=(-Fclk//*)/;
TL0=(-Fclk//*)%;
counter++;
}
if(counter == )
{
counter = ;
P1 = ~P1; //每1秒鐘P1口電平翻轉
}
}
}