定時/計數器的結構
單片機為了能夠精確地控制時間,定時器是不可缺少的。MCS-51芯片內部具有兩個16位的定時器。
定時/計數器的結構如圖6-1所示,定時/計數器T0由特殊功能寄存器TH0、TL0構成,定時/計數器T1由特殊功能寄存器TH1、TL1構成。
定時/計數器具有兩種工作模式、4種工作方式(方式0、方式1、方式2和方式3),屬於增計數器。
TMOD用於選擇定時/計數器T0、T1的工作模式和工作方式。
TCON用於控制T0、T1的啟動和停止計數,同時包含了 T0、T1的狀態。
T0、T1不論是工作在定時器模式還是計數器模式,都是對脈沖信號進行計數,只是計數信號的來源不同。
計數器模式是對加在T0 (P3.4)和T1 (P3.5)兩個引腳上的外部脈沖進行計數(見圖6-1 )。定時器工作模式是對單片機的時鍾振盪器信號經片內12分頻后的內部脈沖信號計數。由於時鍾頻率是定值,所以可根據計數值計算出定時時間。
計數器的起始計數都是從計數器初值開始的。單片機復位時計數器的初值為0,也可通過指令給計數器裝入一個新的初值。
工作方式控制寄存器TMOD
用於選擇定時/計數器的工作模式和工作方式,字節地址為89H,不能位尋址,格式如圖6-2所示。
8位分為兩組,高4位控制T1,低4位控制T0。
TMOD各位的功能如表6-1所示。
定時/計數器控制寄存器TCON
字節地址為88H,可位尋址,位地址為88H〜8FH,格式如圖6-3所示。
- TF1、TF0——計數溢出標志位
當計數器計數溢出時,該位置“1”。使用査詢方式時,此位作為狀態位供CPU查詢,但應注意查詢有效后,應使用軟件及時將該位清“0”。使用中斷方式時,此位作為中斷請求標志位,;進入中斷服務程序后由硬件自動清“0” O - TR1、TR0—— 計數運行控制位
TR1位(或TR0位)=1,啟動定時/計數器工作的必要條件。
TR1位(或TR0位)=0,停止定時/計數器工作。
該位可由軟件置“1"或清“0” 。
定時/計數器的4種工作方式
方式0及應用
方式0的工作原理
M1、M0=00時,被設置為工作方式0,等效邏輯結構框圖如圖6-4所示(以定時/計數器T1 為例,TMOD.5、TMOD.4=00)。
方式0是13位計數器,由TLx (x=O,l)低5位和THx高8位構成。TLx低5位溢出則向THx進位,THx計數溢出則把TCON中的溢出標志位TFx置“ 1 ”。
圖6-2電C/〒位控制的電子開關決定了定時/計數器的兩種工作模式。
- C/〒=0,電子開關打在上面位置,T1 (或T0)為定時器工作模式,把時鍾振盪器12分頻后的脈塑乍為計數信號。
- C/〒=1,電子開關打在下面位置,T1 (或T0)為計數器工作模式,計數脈沖為P3.4(或P3.5)引腳上的外部輸入脈沖,當引腳上發生負跳變時,計數器加1。
GATE位狀態決定定時/計數器的運行控制取決於TRx 一個條件還是TRx和INTx(x=0,l)引腳狀態兩個條件。
- GATE=0, A點(見圖6-4)電位恆為1,B點電位僅取決於TRx狀態。TRx=1, B點為高電平,控制端控制電子開關閉合,允許T1 (或T0)對脈沖計數。TRx=0,B點為低電平,電子開關斷開,禁止T1 (或T0)計數。
- GATE=1, B點電位由INTx(x=0,l)的輸入電平和TRx的狀態這兩個條件來確定。當TRx=1,且INTx = 1時,B點才為1,控制端控制電子開關閉合,允許T1 (或TO)計數。故這種情況下計數器是否計數是由TRx和函肢兩個條件來共同控制的。
方式0的應用
方式0與方式1基本相同,只是計數位數不同。方式0初值計算復雜,一般不用方式0,而用方式1。
方式1及應用
方式1的工作原理
當Ml、M0=01時,定時/計數器工作於方式1,這時定時/計數器的等效電路邏輯結構如圖6-5所示。
方式1和方式0的差別僅僅在於計數器的位數不同,方式1為16位計數器,由THx高8位和TLx低8位構成(x=0,1),方式0則為13位計數器,有關控制狀態位的含義(GATE、C/〒、TFx、TRx)與方式0相同。
方式1的應用
方式2及應用
方式2的工作原理
方式0和方式1的最大特點是計數溢出后,計數器為全0。因此在循環定時或循環計數應用時就存在用指令反復裝入計數初值的問題。這不僅影響定時精度,也給程序設計帶來麻煩。方式2就是針對此問題而設置的。
當Ml、M0為10時,定時/計數器處於工作方式2,這時定時/計數器的等效邏輯結構如圖6-7所示(以定時器T1為例,x=1) 。
定時/計數器的方式2為自動恢復初值(初值自動裝入)的8位定時/計數器。TLx (x=0,1)作為常數緩沖器,當TLx計數溢出時,在溢出標志TFx置“1"的同時,還自動將THx中的初值送至TLx,使TLx從初值開始重新計數。該方式可省去用戶軟件中重裝初值的指令執行時間,簡化定時初值的計算方法,可以相當准確地確定定時時間。
方式2的應用
方式2是一個可以自動重新裝載初值的8位計數/定時器,可省去重裝初值指令。當某個定時/計數器不使用時,可擴展一個負跳沿觸發的外中斷源。
方式3及應用
方式3的工作原理
方式3是為了增加一個8位定時/計數器而設的,使MCS-51單片機具有3個定時/計數器。方式3只適用於T0, T1不能工作在方式3。T1處於方式3時相當於TR1=0,停止計數(此時T1可用來作為串行口波特率產生器)。
工作方式3下的T0
TMOD的低2位為11時,T0的工作方式被選為方式3,各引腳與T0的邏輯關系如圖6-9所示。
定時/計數器T0分為兩個獨立的8位計數器TL0和TH0, TL0使用TO的狀態控制位C/T、GATE、TR0、TF0,而TH0被固定為一個8位定時器(不能作為外部計數模式),並使用定時器T1的狀態控制位TR1和TF1,同時占用定時器T1的中斷請求源TF1。
T0工作在方式3時T1的各種工作方式
一般情況下,當T1用作串行口的波特率發生器時,T0才工作在方式3。T0處於工作方式3時,T1可定為方式0、方式1和方式2,用來作為串行口的波特率發生器,或不需要中斷的場合。
T1工作在方式0。T1的控制字中M1、M0 = 00時,T1工作在方式0,工作示意圖如圖6-10所示。
T1工作在方式1。當T1的控制字中M1、M0 = 01時,T1工作在方式1,工作示意圖如圖6-11所示。
T1工作在方式2。當T1的控制字中M1、M0 =10時,T1的工作方式為方式2,工作示意圖如圖6-12所示。
T1設置在方式3。當T0設置在方式3,再把T1也設成方式3,此時T1停止計數。
方式3的應用
方式3下的T0和T1大不相同。T0工作在方式3, TL0和TH0被分成兩個獨立的8位定時/計數器。其中,TL0可作為8位的定時/計數器,而TH0只能作為8位的定時器。此時T1只能工作在方式0、1或2。
一般情況下,當T1用作串行口波特率發生器時,T0才設置為方式3。此時,常把定時器T1設置為方式2,用作波特率發生器。