目標:定時器和計數器的理解(一)
1.定時器/計數器簡介
定時器/計數器(Timer/Counter,簡稱T/C)是單片機中最基本的接口之一。即可以定時又可以計數。常用于計數、延時、測量周期/脈寬/頻率、提供定時脈沖信號等。
8051系列單片機至少含有2個16位的T/C,STC89C51/52含有3個T/C。其中2個為基本定時器/計數器T/C0和T/C1,另一個是T/C2。可通過軟件配置為定時器功能或者計數器功能。
定時/計數器的工作原理
定時/計數器實質上是一個加1計數器。當工作在定時器模式時,對振蕩源(晶振)12分頻(12分頻就是震蕩周期,單位 是us)的脈沖計數,即每個機器周期(12個震蕩周期就是1/12us12=1us)計數值加1(解釋了前面延時函數),當加到計數器為全1(定時計數器是 16位,則2*16=65539,減1[因為0開始]后65535是定時計數最大值)時,再輸入一個脈沖就使計數器回零。
當工作在計數器模式時,計數脈沖來至外部脈沖輸入引腳P3.4(T0)和P3.5(T1),當T0或T1腳上負跳變(即下降沿,正跳變==上升沿)時計數值加1 ,識別管腳負跳變需要2個機器周期(2us),即24個振蕩周期。所以T0或T1腳輸入的可計數的外部脈沖的最高頻率為1/24fosc(1/24*12=500KHz),當晶振12MHZ時,最高計數頻率為500KHz,高于此頻率將計數出錯。
2.定時器/計數器寄存器
TH1和TL1是定時/計數器1的兩個寄存器,都是8位,共16位。TH1是高8位,TL1是低八位
TH0和TL0是定時/計數器0的兩個寄存器,都是8位,共16位。TH0是高8位,TL0是低八位
T0引腳是P3.4,T1引腳是P3.5,配置成計數器模式用于檢測外部的脈沖信號
定時器控制寄存器TCON,
工作方式選擇寄存器TMOD (用于確定定時/計數器的工作方式和功能)
TCOD見單片機小白學習之路(十二)---->http://www.lxweimin.com/p/4de17b66a15b
工作方式選擇寄存器TMOD
0~3是定時/計數器0 的4位,M1,M0用于選擇工作方式,工作方式有0,1,2,3。C/T是計數器或定時器的選擇位,C/T置0則是定時模式,置1是計數模式。
GATE是門控信號GATE=1時,T/C(定時/計數器)啟動收到雙重控制要求TR0/TR1和INT0/INT1同時為高,GATE=0時,T/C的啟動僅收到TR0/TR1的控制,通常把GATE置0
- 方式0:最大計數值是2**13-1=8191
- 方式1:最大計數值是2**16-1=65535
- 方式2:TH存放初值,TL用于計數,由于是8位則最大值255,TL不斷計數,計到255則溢出并清0,然后TH把初值給TL又開始計數,這就是可自動重新裝載初值的含義
- 方式3:對T0和T1不大相同,僅T0可設置模式3,若設置其為模式3,TL0和TH0被分為兩個相互獨立的8位計數器,TL0為8位計數器,功能與模式0/1相同,可定時可計數
TH0僅做簡單的內部定時功能,它占用了定時器T1的控制位TR1和中斷標志位TF1 ,啟動和關閉僅受TR1控制(此模式不常用)