————————————————————————————————————————————
定時/計數器結構(T0和T1)
16位寄存器T0、T1分別由TH0、TL0和TH1、TL1四個8位計數器組成
-
定時器的區別:
- T0可分成2個獨立的8位定時器,而定時器1則不能;
- T1可作為串口的波特率發生器,而定時器0則不能。
-
工作原理
- 用途:定時器和計數器
- 核心:加1計數器
- 原理:每來一個脈沖則加1計數器加1,當加到全1時再來一個脈沖使加1計數器歸零,同時加1計數器的溢出使TCON寄存器中的TF0(或TF1)置1,向CPU發出中斷請求
-
脈沖來源:
- 定時器:脈沖來源是由系統的時鍾晶振器輸出脈沖源提供
- 計數器:脈沖來源是由T0或T1引腳(P3.4或P3.5)輸入的外部脈沖源提供
注:T0或T1都不能同時既做定時器也做計數器
補充:
-
計數器工作原理:
用作計數器時,對T0或T1引腳的外部脈沖計數,如果前一個機器周期采樣值為1,后一個機器周期采樣值為0 ,則說明有一個脈沖,計數器加1。
在每個機器周期的S5P2期間采樣引腳輸入電平。新的計數初值於下一個機器周期的S3P1期間裝入計數器。
此種方式需要兩個機器周期來檢測一個1->0負跳變信號,因此最高的計數頻率為時鍾頻率的1/24。
-
S5P2:
S5P2指的是第5個時鍾周期的相位2。
晶體振盪器的振盪信號從XTAL2端輸入到片內的時鍾發生器上,時鍾發生器是一個二分頻觸發器電路,它將振盪器的信號頻率除以2,向CPU提供了兩相時鍾信號P1和P2。時鍾信號的周期稱為機器狀態時間S,它是振盪周期的2倍。在每個時鍾周期(即機器狀態時間S)的前半周期,相位1(即P1信號)有效,在每個時鍾周期的后半周期,相位2(即P2信號)有效。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
使用的寄存器
-
TCON控制寄存器:啟動和停止定時/ 計數器的計數,並控制定時器的工作狀態,不能按位尋址
-
TMOD方式寄存器:設置定時器的工作方式,選擇定時或計數的功能,可以按位尋址。(和中斷共用寄存器,高四位為定時計數器使用,低四位為中斷使用)
注:GATE邏輯結構此處略過,詳見書P100
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
工作方式:
-
方式0
-
計算公式:
- 最大計數:8192個機器周期
-
工作原理:
13位計數器,使用TL0的低5位和TH0的高8位組成,TL0的低5位溢出時向TH0進位。TH0溢出時發出中斷請求。
-
-
方式1
-
計算公式:
- 最大計數:65536個機器周期
-
工作原理:
16位計數器,TL0作為低8位,TH0作為高8位
-
-
方式2 :自動重裝初值的8 位計數方式
-
計算公式:
p.s.晶振頻率必須選擇12的整數倍,因為定時器的頻率是晶振頻率的1/12。
- 最大計數:256個機器周期
-
優點:
適合做比較精准的脈沖信號發生器
-
缺點:
-
工作原理:
計數器溢出后,計數器自動將上次設置的初值重裝。
-
-
方式3 : p.s.只能用於定時/計數器T0,T0工作在方式3時,T1不要使用在有中斷的場合。通常該種情況下T1用作串口波特率發生器
-
工作原理:
將T0分成兩個獨立的8位定時/計數器TL0和TH0。
TL0為正常的8位定時/計數器,計數器溢出后置位TF0,申請中斷,之后重裝初值。
TH0也是8位定時/計數器,但由於TL0占用了TF0和TR0,因此TH0占用定時器TF1和TR1(所以T1不能用)
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
時鍾周期/機器周期計算:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
定時/計數器初始化
- 對TMOD賦值,確定T0和T1的工作方式
- 計算初值,並將其寫入TH.x和TL.x
- 使用中斷方式時對IE寄存器賦值開發中斷
- 使TR0或TR1置位,啟動定時/計數器