———————————————————————————————————————————— 定時/計數器結構(T0和T1) 16位寄存器T0、T1分別由TH0、TL0和TH1、TL1四個8位計數器組成 定時器的區別: T0可分成2個獨立的8位定時器,而定時器1則不能; T1可作為串口的波特率發生器,而 ...
————————————————————————————————————————————
定時/計數器結構(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置位,啟動定時/計數器