51單片機定時器工作原理

發表時間:2020-09-26 09:28:43 人氣:2438

51中的定時器和計數器是同一個硬件電路支持的,通過寄存器配置不同,就可以將他當做定時器或者計數器使用。

確切的說,定時器和計數器區別是致使他們背后的計數存儲器加1的信號不同。當配置為定時器使用時,每經過1個機器周期,計數存儲器的值就加1。而當配置為計數器時,每來一個負跳變信號(信號從P3.4 或者P3.5引腳輸入),就加1,以此達到計數的目的。

標準51有2個定時器/計數器:T0和T1。他們的使用方法一致。52相比51多了一個T2。

時鐘周期與機器周期


定時器的本質原理就是:每經過1個機器周期,計數存儲器的值就加1。因此當使用定時器時,就必須掌握時鐘周期和機器周期的關系。

時鐘周期 :晶振頻率的倒數。如果使用的是11.0592M的晶振,那么就是 1 / (11.0592x10^6) 秒   

注:1MHz = 10^6Hz

機器周期 :標準51下,機器周期 =12倍的時鐘周期。即:12 / (11.0592x10^6) 秒 。有的增強51單片機,1個機器周期等于4倍的時鐘周期,還有的更短。

計數存儲寄存器THx&TLx

定時器和計數器工作,都依賴于 計數。計數則是由計數存儲器THx和TLx這2個8位寄存器完成的。

對于計數器,每來一個負跳變信號(信號從P3.4 或者P3.5引腳輸入),就加1,以此達到計數的目的。

對于定時器,每隔1個機器周期 加 1,假如(只是假如)一個機器周期為 1ms , 當加到1000次時,我們就認為經過了1s,這就是定時器定時依據。

若TH0 和 TL0 以 16位 模式工作,那它的計數范圍為   [0 , 65535 ]  ,  也就是累加 65536次發生溢出。 每累加一次是  12 / (11.0592x10^6) 秒。

那么從 0 累加到溢出 歷時  ≈ 0.071s = 71ms 。

可以延時 10的整數倍ms,這樣就避免了誤差,以便用倍數控制更長的延時時間。所以,我么要給 TH0 和  TL0賦一個初始值,使他們的溢出周期(TH0,TL0從初始值到溢出所用的時間)減少到 10ms。

就像一個瓶子,開始裝了2/3,再來就只能裝1/3就溢出了。通過比例式計算:

12 / (11.0592x10^6) s       -----     1   次

10x 10-3   s                        ------          x  次         (求出 x = 9216次 ,計數9216次后溢出)

65536 - 9216 = 56320  =  二進制( 11011100   00000000)

也就是  TH0 = 11011100 , TL0 = 00000000

工作模式寄存器TMOD

通過TMOD來配置T0和T1的工作模式。

注意,TMOD寄存器不可位尋址(例如sbit led = P0^0 就是P0寄存器位尋址的例子),因此對它的配置需要對這個8bit寄存器整體賦值。

注:51中有些特殊功能寄存器不支持位尋址。只有寄存器的地址值能夠被8整除的(即以數字0或者8結尾的地址,如0xA8, 0xD0),才能支持位尋址。不支持位尋址的,只能整體賦值。


小技巧:在對寄存器整體賦值時,要注意只修改我們想修改的位而不影響其它無關位的值,避免影響了之前對這個寄存器的配置。

TMOD |= 0x01;   //僅僅修改TMOD的最低位,其他位保持不變。


C/T:計數器,定時器功能選擇位。 1為計數器模式, 0 為定時器模式。

M0和M1:


解釋說明:

②處 C/T = 0 表示為定時器模式,觸發信號為①處的單片機內部時鐘信號。(若②處CT = 1,則觸發信號為Tn腳)

③處表明,信號能觸發使加法計數器加1,還得受④處控制。不然時鐘信號是不能讓加法計數器累加的。 ④處這個是與門,所以TRx(TR0和TR1)必須為1,表明我們要開啟定時器。同時當,GATE為0,通過非門后為1,再通過或門,也是1,那么就讓③處控制起來了。若GATE為1,那么,定時器的啟動停止受 TRx和 INTx 共同控制。 INTx腳為1且TRx為1才能啟動定時器/計數器。

于是在一般情況下使用定時器,我們需要如下配置:

TRx    為  1

GATE  為 0

INTx   任意

控制寄存器TCON

控制寄存器就是用來控制定時器/計數器 啟動和停止的,以及溢出標志位的查詢和修改。TFx是計數存儲器溢出標志位,只要一溢出,就馬上置為1。


TF1:定時器/計數器1的溢出標志位。1表示計數存儲器溢出,0表示計數存儲器正常計數。

此文關鍵字: 單片機