定時/計數器和中斷源的多少直接決(jue) 定單片機的性能。MCS-51單片機內(nei) 部有兩(liang) 個(ge) 可編程的16位定時/計數器和5個(ge) 中斷源,具有較強的實時處理能力和對外部應急事件的處理能力。要充分發揮單片機的功能,必須充分利用定時和中斷。
定時器/計數器
一、定時和延時的區別
在單片機程序清單中,經常看到延時子程序和定時(中斷)子程序。它們(men) 都能使單片機間隔一段時間後再做另一件事。例如,控製兩(liang) 組燈的交替閃亮。以1999年第38期九版圖13為(wei) 例,下麵分別是用延時和定時方法的源程序。
程序1:
ORG 0000H
AJMP MAIN
ORG 50H
MAIN:MOV P1,#0AAH;第一組燈亮
ACALL DELAY ;調延時子程序
MOV P1,#55H ;第二組燈亮
ACALL DELAY ;調延時子程序
AJMP MAIN ;循環
DELAY:MOV R0,#08H ;延時子程序,當fc=6MHz時,約延時1秒
L1:MOV R1,#0FFH ;
L2:MOV R2,#0FFH;
L3:DJNZ R2,L3
DJNZ R1,L2
DJNZ R0,L1
RET
END
程序2:
ORG 0000H
AJMP MAIN
ORG 0 WT0;轉T0中斷服務子程序
ORG 50H
MAIN:MOV 21 TL0,#6;裝入定時初值
MOV TH0,#6;裝入重置定時初值
MOV TMOD,#02H;設T0為(wei) 工作方式2
SETB EA;允許CPU中斷
SETB ETO;允許TO中斷
SETB TRO;允許TO計數
MOV P1,#55H;
CLR 00H
M:P1,#55H;CPU去執行其他任務
JNB 0 P1;定時到1秒,燈的狀態翻轉
CLR 0 M;循環
WTO:PUSH ACC;定時中斷服務子程序
PUSH PSW;
INC 21H
MOV A,21H
CJNE A,#200,TORETI
MOV 21 22 A,22H
CJNE A,#10,TORETI
MOV 22 0 PSW
POP ACC
RETI
END
程序1中,點亮一組燈後,調用延時子程序,延時子程序結束後再點亮另一組燈,循環進行,單片機除能交替點亮兩(liang) 組燈以外,全部時間都在運行延時子程序,別的什麽(me) 事件都不能做了。程序2中,單片機絕大部分時間都在做其它事,隻在定時到1秒鍾時改變燈的工作狀態,充分發揮了單片機的功能。因此,在實際應用中,“延時”隻適用於(yu) 特定的場合,而“定時”是靈活多變的。
二、定時器的結構
初學者不必去深入研究單片機的內(nei) 部硬件電路,隻要掌握單片機的使用方法,通過實際編程,充分發揮單片機的特定功能即可。與(yu) 定時器有關(guan) 的特殊功能寄存器之間的信號關(guan) 係示於(yu) 圖1。圖中,TLO、THO、TL1、TH1以及TMOD和TCON都是單片機的特殊功能寄存器。TLO和THO組成16位的定時/計數器(T0),TL1和TH1組成16位的定時/計數器(T1),TMOD是T0和T1的工作方式控製寄存器,TCON是T0和T1的運行狀態控製寄存器,這些寄存器在程序2中已多次出現。在實際應用時,應首先根據需要對這些寄存器進行初始化,即設置T0和T1的工作方式並對T0和T1定時器裝入初始值以得到精確的定時時間。T0和T1的工作方式及運行狀態是由TMOD和TCON兩(liang) 個(ge) 特殊功能寄存器控製的,而TMOD和TCON是由用戶所編的程序控製的。因此,學好用好定時/計數器必須掌握這些寄存器的功能及使用方法。
三、TMOD
TMOD是定時器的工作方式控製寄存器,其格式見表1。
表1 定時器工作方式寄存器格式
TMOD是8位的控製寄存器,低4位控製T0的工作方式,高4位控製T1的工作方式,其中:
M1、M0是工作方式選擇位。決(jue) 定定時器的4種工作方式。
方式0:(M1=0、M0=0):13位定時/計數器
方式1:(M1=0、M0=1):16位定時/計數器
方式2:(M1=1、M0=0):8位定時/計數器(定時常數自動裝入)
方式3:(M1=1、M0=1):把T0分為(wei) 兩(liang) 個(ge) 8位計數器
C/T:定時/計數方式選擇位
C/T=0時為(wei) 定時工作方式,在此方式下,計數脈衝(chong) 來自單片機內(nei) 部,計數脈衝(chong) 頻率為(wei) 一個(ge) 機器周期,機器周期的時間是固定的,所以就可根據計數值算出計數時間。如程序2中,TL0初值為(wei) 6,256-6=250,當計數器計250個(ge) 脈衝(chong) 後,計數器溢出。當fc=6MHz時,一個(ge) 機器周期為(wei) 2μs,因此T0溢出時,時間為(wei) 500μs,T0定時時間為(wei) 500μs。
C/T=1時為(wei) 計數工作方式,在這種方式下,計數脈衝(chong) 來自外部引腳(T0對應P3??4腳,T1對應P3??5腳)。當T0腳(或T1腳)發生從(cong) 高電平到低電平的跳變時,計數器加1。
GATE:計數器工作方式控製位,當定時 / 計數器工作在計數方式時,由GATE設定計數器是否受外部控製。當GATE=0時,不受外部控製。當GATE=1時,計數器T0和T1分別受P3??2和P3??3腳上電平控製。當P3??2(或P3??3)腳為(wei) 低電平時,計數器T0(或T1)開始計數,P3??2(或P3??3)腳為(wei) 高電平時,T0(或T1)停止計數。