天天看點

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 = 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口電平翻轉
        }
    }
}
           

繼續閱讀