|
定時(shí)/計(jì)數(shù)器和中斷源的多少直接決定單片機(jī)的性能。MCS-51單片機(jī)內(nèi)部有兩個(gè)可編程的16位定時(shí)/計(jì)數(shù)器和5個(gè)中斷源,具有較強(qiáng)的實(shí)時(shí)處理能力和對(duì)外部應(yīng)急事件的處理能力。要充分發(fā)揮單片機(jī)的功能,必須充分利用定時(shí)和中斷。 定時(shí)器/計(jì)數(shù)器 一、定時(shí)和延時(shí)的區(qū)別 在單片機(jī)程序清單中,經(jīng)?吹窖訒r(shí)子程序和定時(shí)(中斷)子程序。它們都能使單片機(jī)間隔一段時(shí)間后再做另一件事。例如,控制兩組燈的交替閃亮。以1999年第38期九版圖13為例,下面分別是用延時(shí)和定時(shí)方法的源程序。 程序1: ORG 0000H AJMP MAIN ORG 50H MAIN:MOV P1,#0AAH;第一組燈亮 ACALL DELAY ;調(diào)延時(shí)子程序 MOV P1,#55H ;第二組燈亮 ACALL DELAY ;調(diào)延時(shí)子程序 AJMP MAIN ;循環(huán) DELAY:MOV R0,#08H ;延時(shí)子程序,當(dāng)fc=6MHz時(shí),約延時(shí)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;轉(zhuǎn)T0中斷服務(wù)子程序 ORG 50H MAIN:MOV 21 TL0,#6;裝入定時(shí)初值 MOV TH0,#6;裝入重置定時(shí)初值 MOV TMOD,#02H;設(shè)T0為工作方式2 SETB EA;允許CPU中斷 SETB ETO;允許TO中斷 SETB TRO;允許TO計(jì)數(shù) MOV P1,#55H; CLR 00H M:P1,#55H;CPU去執(zhí)行其他任務(wù) JNB 0 P1;定時(shí)到1秒,燈的狀態(tài)翻轉(zhuǎn) CLR 0 M;循環(huán) WTO:PUSH ACC;定時(shí)中斷服務(wù)子程序 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中,點(diǎn)亮一組燈后,調(diào)用延時(shí)子程序,延時(shí)子程序結(jié)束后再點(diǎn)亮另一組燈,循環(huán)進(jìn)行,單片機(jī)除能交替點(diǎn)亮兩組燈以外,全部時(shí)間都在運(yùn)行延時(shí)子程序,別的什么事件都不能做了。程序2中,單片機(jī)絕大部分時(shí)間都在做其它事,只在定時(shí)到1秒鐘時(shí)改變燈的工作狀態(tài),充分發(fā)揮了單片機(jī)的功能。因此,在實(shí)際應(yīng)用中,“延時(shí)”只適用于特定的場(chǎng)合,而“定時(shí)”是靈活多變的。 二、定時(shí)器的結(jié)構(gòu) 初學(xué)者不必去深入研究單片機(jī)的內(nèi)部硬件電路,只要掌握單片機(jī)的使用方法,通過(guò)實(shí)際編程,充分發(fā)揮單片機(jī)的特定功能即可。與定時(shí)器有關(guān)的特殊功能寄存器之間的信號(hào)關(guān)系示于圖1。圖中,TLO、THO、TL1、TH1以及 TMOD和TCON都是單片機(jī)的特殊功能寄存器。TLO和THO組成16位的定時(shí)/計(jì)數(shù)器(T0),TL1和TH1組成16位的定時(shí)/計(jì)數(shù)器(T1), TMOD是T0和T1的工作方式控制寄存器,TCON是T0和T1的運(yùn)行狀態(tài)控制寄存器,這些寄存器在程序2中已多次出現(xiàn)。在實(shí)際應(yīng)用時(shí),應(yīng)首先根據(jù)需要對(duì)這些寄存器進(jìn)行初始化,即設(shè)置T0和T1的工作方式并對(duì)T0和T1定時(shí)器裝入初始值以得到精確的定時(shí)時(shí)間。T0和T1的工作方式及運(yùn)行狀態(tài)是由TMOD 和TCON兩個(gè)特殊功能寄存器控制的,而TMOD和TCON是由用戶所編的程序控制的。因此,學(xué)好用好定時(shí)/計(jì)數(shù)器必須掌握這些寄存器的功能及使用方法。 三、TMOD TMOD是定時(shí)器的工作方式控制寄存器,其格式見(jiàn)表1。 表1 定時(shí)器工作方式寄存器格式
TMOD是8位的控制寄存器,低4位控制T0的工作方式,高4位控制T1的工作方式,其中: M1、M0是工作方式選擇位。決定定時(shí)器的4種工作方式。 方式0:(M1=0、M0=0):13位定時(shí)/計(jì)數(shù)器 方式1:(M1=0、M0=1):16位定時(shí)/計(jì)數(shù)器 方式2:(M1=1、M0=0):8位定時(shí)/計(jì)數(shù)器(定時(shí)常數(shù)自動(dòng)裝入) 方式3:(M1=1、M0=1):把T0分為兩個(gè)8位計(jì)數(shù)器 C/T:定時(shí)/計(jì)數(shù)方式選擇位 C/T =0時(shí)為定時(shí)工作方式,在此方式下,計(jì)數(shù)脈沖來(lái)自單片機(jī)內(nèi)部,計(jì)數(shù)脈沖頻率為一個(gè)機(jī)器周期,機(jī)器周期的時(shí)間是固定的,所以就可根據(jù)計(jì)數(shù)值算出計(jì)數(shù)時(shí)間。如程序2中,TL0初值為6,256-6=250,當(dāng)計(jì)數(shù)器計(jì)250個(gè)脈沖后,計(jì)數(shù)器溢出。當(dāng)fc=6MHz時(shí),一個(gè)機(jī)器周期為2μs,因此T0溢出時(shí),時(shí)間為500μs,T0定時(shí)時(shí)間為500μs。 C/T=1時(shí)為計(jì)數(shù)工作方式,在這種方式下,計(jì)數(shù)脈沖來(lái)自外部引腳(T0對(duì)應(yīng)P34腳,T1對(duì)應(yīng)P35腳)。當(dāng)T0腳(或T1腳)發(fā)生從高電平到低電平的跳變時(shí),計(jì)數(shù)器加1。 GATE:計(jì)數(shù)器工作方式控制位,當(dāng)定時(shí) / 計(jì)數(shù)器工作在計(jì)數(shù)方式時(shí),由GATE設(shè)定計(jì)數(shù)器是否受外部控制。當(dāng)GATE=0時(shí),不受外部控制。當(dāng)GATE=1時(shí),計(jì)數(shù)器T0和T1分別受P32和 P33腳上電平控制。當(dāng)P32(或P33)腳為低電平時(shí),計(jì)數(shù)器T0(或T1)開(kāi)始計(jì)數(shù),P32(或P33)腳為高電平時(shí),T0(或T1)停止計(jì)數(shù)。 |