第十七課 定時(shí)計(jì)數(shù)器工作原理分析_第1頁
第十七課 定時(shí)計(jì)數(shù)器工作原理分析_第2頁
第十七課 定時(shí)計(jì)數(shù)器工作原理分析_第3頁
第十七課 定時(shí)計(jì)數(shù)器工作原理分析_第4頁
第十七課 定時(shí)計(jì)數(shù)器工作原理分析_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第十七課:定時(shí)/計(jì)數(shù)器工作原理分析80C51單片機(jī)內(nèi)部設(shè)有兩個(gè)16位的可編程定時(shí)器/計(jì)數(shù)器。可編程的意思是指其功能(如工作方式、定時(shí)時(shí)間、量程、啟動方式等)均可由指令來確定和改變。在定時(shí)器/計(jì)數(shù)器中除了有兩個(gè)16位的計(jì)數(shù)器之外,還有兩個(gè)特殊功能寄存器(控制寄存器和方式寄存器)。 定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu):  從上面定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)圖中我們可以看出,16位的定時(shí)/計(jì)數(shù)器分別由兩個(gè)8位專用寄存器組成,即:T0由TH0和TL0構(gòu)成;T1由TH1和TL1構(gòu)成。其訪問地址依次為8AH-8DH。每個(gè)寄存器均可單獨(dú)訪問。這些寄存器是用于存放定時(shí)或計(jì)數(shù)初值的。此外,其內(nèi)部還有一個(gè)

2、8位的定時(shí)器方式寄存器TMOD和一個(gè)8位的定時(shí)控制寄存器TCON。這些寄存器之間是通過內(nèi)部總線和控制邏輯電路連接起來的。TMOD主要是用于選定定時(shí)器的工作方式;TCON主要是用于控制定時(shí)器的啟動停止,此外TCON還可以保存T0、T1的溢出和中斷標(biāo)志。當(dāng)定時(shí)器工作在計(jì)數(shù)方式時(shí),外部事件通過引腳T0(P3.4)和T1(P3.5)輸入。 定時(shí)計(jì)數(shù)器的原理:16位的定時(shí)器/計(jì)數(shù)器實(shí)質(zhì)上就是一個(gè)加1計(jì)數(shù)器,其控制電路受軟件控制、切換。當(dāng)定時(shí)器/計(jì)數(shù)器為定時(shí)工作方式時(shí),計(jì)數(shù)器的加1信號由振蕩器的12分頻信號產(chǎn)生,即每過一個(gè)機(jī)器周期,計(jì)數(shù)器加1,直至計(jì)滿溢出為止。顯然,定時(shí)器的定時(shí)時(shí)間與系統(tǒng)的振蕩

3、頻率有關(guān)。因一個(gè)機(jī)器周期等于12個(gè)振蕩周期,所以計(jì)數(shù)頻率fcount=1/12osc。如果晶振為12MHz,則計(jì)數(shù)周期為:  T=1/(12×106)Hz×1/12=1s 這是最短的定時(shí)周期。若要延長定時(shí)時(shí)間,則需要改變定時(shí)器的初值,并要適當(dāng)選擇定時(shí)器的長度(如8位、13位、16位等)。    當(dāng)定時(shí)器/計(jì)數(shù)器為計(jì)數(shù)工作方式時(shí),通過引腳T0和T1對外部信號計(jì)數(shù),外部脈沖的下降沿將觸發(fā)計(jì)數(shù)。計(jì)數(shù)器在每個(gè)機(jī)器周期的S5P2期間采樣引腳輸入電平。若一個(gè)機(jī)器周期采樣值為1,下一個(gè)機(jī)器周期采樣值為0,則計(jì)數(shù)器加1。此后的機(jī)器

4、周期S3P1期間,新的計(jì)數(shù)值裝入計(jì)數(shù)器。所以檢測一個(gè)由1至0的跳變需要兩個(gè)機(jī)器周期,故外部事年的最高計(jì)數(shù)頻率為振蕩頻率的1/24。例如,如果選用12MHz晶振,則最高計(jì)數(shù)頻率為0.5MHz。雖然對外部輸入信號的占空比無特殊要求,但為了確保某給定電平在變化前至少被采樣一次,外部計(jì)數(shù)脈沖的高電平與低電平保持時(shí)間均需在一個(gè)機(jī)器周期以上。    當(dāng)CPU用軟件給定時(shí)器設(shè)置了某種工作方式之后,定時(shí)器就會按設(shè)定的工作方式獨(dú)立運(yùn)行,不再占用CPU的操作時(shí)間,除非定時(shí)器計(jì)滿溢出,才可能中斷CPU當(dāng)前操作。CPU也可以重新設(shè)置定時(shí)器工作方式,以改變定時(shí)器的操作。由此可見,定時(shí)器是單

5、片機(jī)中效率高而且工作靈活的部件。    綜上所述,我們已知定時(shí)器/計(jì)數(shù)器是一種可編程部件,所以在定時(shí)器/計(jì)數(shù)器開始工作之前,CPU必須將一些命令(稱為控制字)寫入定時(shí)/計(jì)數(shù)器。將控制字寫入定時(shí)/計(jì)數(shù)器的過程叫定時(shí)器/計(jì)數(shù)器初始化。在初始化過程中,要將工作方式控制字寫入方式寄存器,工作狀態(tài)字(或相關(guān)位)寫入控制寄存器,賦定時(shí)/計(jì)數(shù)初值。下面我們就提出的控制字的格式及各位的主要功能與大家詳細(xì)的講解。 控制寄存器 定時(shí)器計(jì)數(shù)器T0和T1有2個(gè)控制寄存器-TMOD和TCON,它們分別用來設(shè)置各個(gè)定時(shí)器計(jì)數(shù)器的工作方式,選擇定時(shí)或計(jì)數(shù)功能,控制啟動運(yùn)行,以及作為運(yùn)

6、行狀態(tài)的標(biāo)志等。其中,TCON寄存器中另有4位用于中斷系統(tǒng)。 定時(shí)器/計(jì)數(shù)器方式寄存器TMOD:    定時(shí)器方式控制寄存器TMOD在特殊功能寄存器中,字節(jié)地址為89H,無位地址。TMOD的格式如下圖所示。 由圖可見,TMOD的高4位用于T1,低4使用于T0,4種符號的含義如下:GATE:門控制位。GATE和軟件控制位TR、外部引腳信號INT的狀態(tài),共同控制定時(shí)器計(jì)數(shù)器的打開或關(guān)閉。CT:定時(shí)器計(jì)數(shù)器選擇位。C/T1,為計(jì)數(shù)器方式;CT0,為定時(shí)器方式。M1M0:工作方式選擇位,定時(shí)器計(jì)數(shù)器的4種工作方式由M1M0設(shè)定。 M0 M1工作方式功能描述0&#

7、160;              00               11               01 1工作方式0工作方式1工作方式2工作方式313位計(jì)數(shù)器16位計(jì)數(shù)器自動再裝入8位

8、計(jì)數(shù)器定時(shí)器0:分成兩個(gè)8位計(jì)數(shù)器定時(shí)器1:停止計(jì)數(shù)定時(shí)器/計(jì)數(shù)器方式控制寄存器TMOD不能進(jìn)行位尋址,只能用字節(jié)傳送指令設(shè)置定時(shí)器工作方式,低半字節(jié)定義為定時(shí)器0,高半字節(jié)定義為定時(shí)器1。復(fù)位時(shí),TMOD所有位均為0。例:設(shè)定定時(shí)器1為定時(shí)工作方式,要求軟件啟動定時(shí)器1按方式2工作。定時(shí)器0為計(jì)數(shù)方式,要求由軟件啟動定時(shí)器0,按方式1工作。我們怎么來實(shí)現(xiàn)這個(gè)要求呢?大家先看上面TMOD寄存器各位的分布圖第一個(gè)問題:控制定時(shí)器1工作在定時(shí)方式或計(jì)數(shù)方式是哪個(gè)位?通過前面的學(xué)習(xí),我們已知道,C/T位(D6)是定時(shí)或計(jì)數(shù)功能選擇位,當(dāng)C/T=0時(shí)定時(shí)/計(jì)數(shù)器就為定時(shí)工作方式。所以要使定時(shí)/計(jì)數(shù)器1

9、工作在定時(shí)器方式就必需使D6為0。第二個(gè)問題:設(shè)定定時(shí)器1按方式2工作。上表中可以看出,要使定時(shí)/計(jì)數(shù)器1工作在方式2,M0(D4) M1(D5)的值必須是1 0。第三個(gè)問題:設(shè)定定時(shí)器0為計(jì)數(shù)方式。與第一個(gè)問題一樣,定時(shí)/計(jì)數(shù)器0的工作方式選擇位也是C/T(D2),當(dāng)C/T=1時(shí),就工作在計(jì)數(shù)器方式。第四個(gè)問題:由軟件啟動定時(shí)器0,前面已講過,當(dāng)門控位GATE=0時(shí),定時(shí)/計(jì)數(shù)器的啟停就由軟件控制。第五個(gè)問題:設(shè)定定時(shí)/計(jì)數(shù)器工作在方式1,使定時(shí)/計(jì)數(shù)器0工作在方式1,M0(D0) M1(D1)的值必須是0 1。從上面的分析我們可以知道,只要將TMOD的各位,按規(guī)定的要求設(shè)置好后,定時(shí)器/計(jì)

10、靈敏器就會按我們預(yù)定的要求工作。我們分析的這個(gè)例子最后各位的情況如下: D7 D6 D5 D4 D3 D2 D1 D0 0  0  1  0  0  1  0  1二進(jìn)制數(shù)00100101=十六進(jìn)制數(shù)25H。所以執(zhí)行MOV  TMOD,#25H這條指令就可以實(shí)現(xiàn)上述要求。定時(shí)器/計(jì)數(shù)器控制寄存器TCON:TCON在特殊功能寄存器中,字節(jié)地址為88H,位地址(由低位到高位)為88H一8FH,由于有位地址,十分便于進(jìn)行位操作。TCON的作用是控制定時(shí)器的啟、停,標(biāo)志定時(shí)器溢出和中斷情況。TCON的格

11、式如下圖所示。其中,TFl,TRl,TF0和TR0位用于定時(shí)器計(jì)數(shù)器;IEl,ITl,IE0和IT0位用于中斷系統(tǒng)。   各位定義如下:TF1:定時(shí)器1溢出標(biāo)志位。當(dāng)字時(shí)器1計(jì)滿溢出時(shí),由硬件使TF1置“1”,并且申請中斷。進(jìn)入中斷服務(wù)程序后,由硬件自動清“0”,在查詢方式下用軟件清“0”。TR1:定時(shí)器1運(yùn)行控制位。由軟件清“0”關(guān)閉定時(shí)器1。當(dāng)GATE=1,且INT1為高電平時(shí),TR1置“1”啟動定時(shí)器1;當(dāng)GATE=0,TR1置“1”啟動定時(shí)器1。TF0:定時(shí)器0溢出標(biāo)志。其功能及操作情況同TF1。TR0:定時(shí)器0運(yùn)行控制位。其功能及操作情況同TR1。IE1:外部中斷1請求標(biāo)志

12、。IT1:外部中斷1觸發(fā)方式選擇位。IE0:外部中斷0請求標(biāo)志。IT0:外部中斷0觸發(fā)方式選擇位。 TCON中低4位與中斷有關(guān),我們將在下節(jié)課講中斷時(shí)再給予講解。由于TCON是可以位尋址的,因而如果只清溢出或啟動定時(shí)器工作,可以用位操作命令。例如:執(zhí)行“CLR TF0”后則清定時(shí)器0的溢出;執(zhí)行“SETB TR1”后可啟動定時(shí)器1開始工作(當(dāng)然前面還要設(shè)置方式定)。 定時(shí)器/計(jì)數(shù)器的初始化: 由于定時(shí)器/計(jì)數(shù)器的功能是由軟件編程確定的,所以一般在使用定時(shí)/計(jì)數(shù)器前都要對其進(jìn)行初始化,使其按設(shè)定的功能工作。初始貨的步驟一般如下:1、確定工作方式(即對TMOD賦值);2、預(yù)置定時(shí)或計(jì)數(shù)的初值(可直

13、接將初值寫入TH0、TL0或TH1、TL1);3、根據(jù)需要開放定時(shí)器/計(jì)數(shù)器的中斷(直接對IE位賦值);4、啟動定時(shí)器/計(jì)數(shù)器(若已規(guī)定用軟件啟動,則可把TR0或TR1置“1”;若已規(guī)定由外中斷引腳電平啟動,則需給外引腳步加啟動電平。當(dāng)實(shí)現(xiàn)了啟動要求后,定時(shí)器即按規(guī)定的工作方式和初值開始計(jì)數(shù)或定時(shí))。下面介紹一下確定時(shí)時(shí)/計(jì)數(shù)器初值的具體方法。因?yàn)樵诓煌ぷ鞣绞较掠?jì)數(shù)器位數(shù)不同,因而最大計(jì)數(shù)值也不同?,F(xiàn)假設(shè)最大計(jì)數(shù)值為M,那么各方式下的最大值M值如下:方式0:M=213=8 192方式1:M=216=65 536方式2:M=28=256方式3:定時(shí)器0分成兩個(gè)8位計(jì)數(shù)器,所以兩個(gè)M均為256。

14、因?yàn)槎〞r(shí)器/計(jì)數(shù)器是作“加1”計(jì)數(shù),并在計(jì)數(shù)滿溢出時(shí)產(chǎn)生中斷,因此初值X可以這樣計(jì)算:X=M-計(jì)數(shù)值下面舉例說明初值的確定方法。例1、選擇T1方式0用于定時(shí),在P1.1輸出周期為1ms方波,晶振fosc=6MHz。解:根據(jù)題意,只要使P1.1每隔500us取反一次即可得到1ms的方波,因而T1的定時(shí)時(shí)間為500us,因定時(shí)時(shí)間不長,取方式0即可。則M1 M0=0;因是定時(shí)器方式,所以C/T=0;在此用軟件啟動T1,所以GATE=0。T0不用,方式字可任意設(shè)置,只要不使其進(jìn)入方式3即可,一般取0,故TMOD=00H。系統(tǒng)復(fù)位后TMOD為0,可不對TMOD重新清0。下面計(jì)算500us定時(shí)T1初始值

15、:機(jī)器周期T=12/fosc=12/(6×106)Hz=2s設(shè)初值為X,則:(1013X)×2×10-6s=500×10-6因?yàn)樵谧?3位計(jì)數(shù)器用時(shí),TL1的高3位未用,應(yīng)填寫0,TH1占用高8位,所以X的實(shí)際填寫應(yīng)為:結(jié)果:TH1=F8H,TL1=06H源程序如下:  ORG 2000H MOV TL1,#06H ;給TL1置初值MOV TH1,#0F8H ;給TH1置初值SETB TR1 ;啟動T1LP1:JBC TF1,LP2 ;查詢計(jì)數(shù)溢出否?AJMP LP1LP2:MOV TL1,#06H ;重新設(shè)置計(jì)數(shù)初值MOV TH1,#0F8H

16、CPL P1.1 ;輸出取反AJMP LP1 ;重復(fù)循環(huán)定時(shí)器/計(jì)數(shù)器的四種工作方式:    定T0或T1無論用作定時(shí)器或計(jì)數(shù)器都有4種工作方式:方式0、方式1、方式2和方式3。除方式3外,T0和T1有完全相同的工作狀態(tài)。下面以T1為例,分述各種工作方式的特點(diǎn)和用法。  工作方式0: 13位方式由TL1的低5位和TH1的8位構(gòu)成13位計(jì)數(shù)器(TL1的高3位無效)。工作方式0的結(jié)構(gòu)見下圖: 圖中,CT為定時(shí)計(jì)數(shù)選擇:CT0,T1為定時(shí)器,定時(shí)信號為振蕩周期12分頻后的脈沖;CTl,T1為計(jì)數(shù)器,計(jì)數(shù)信號來自引腳T1的外部信號。定時(shí)器T1能否啟動工作,還受到

17、了R1、GATE和引腳信號INT1的控制。由圖中的邏輯電路可知,當(dāng)GATE0時(shí),只要TR11就可打開控制門,使定時(shí)器工作;當(dāng)GATE1時(shí),只有TR11且INT11,才可打開控制門。GATE,TR1,CT的狀態(tài)選擇由定時(shí)器的控制寄存器TMOD,TCON中相應(yīng)位狀態(tài)確定,INT1則是外部引腳上的信號。在一般的應(yīng)用中,通常使GATE0,從而由TRl的狀態(tài)控制Tl的開閉:TRl1,打開T1;TRl0,關(guān)閉T1。在特殊的應(yīng)用場合,例如利用定時(shí)器測量接于INT1引腳上的外部脈沖高電平的寬度時(shí),可使GATE1,TRl1。當(dāng)外部脈沖出現(xiàn)上升沿,亦即INT1由0變1電平時(shí),啟動T1定時(shí),測量開始;一旦外部脈沖出

18、現(xiàn)下降沿,亦即INT1由l變O時(shí)就關(guān)閉了T1。定時(shí)器啟動后,定時(shí)或計(jì)數(shù)脈沖加到TLl的低5位,從預(yù)先設(shè)置的初值(時(shí)間常數(shù))開始不斷增1。TL1計(jì)滿后,向THl進(jìn)位。當(dāng)TL1和THl都計(jì)滿之后,置位T1的定時(shí)器回零標(biāo)志TFl,以此表明定時(shí)時(shí)間或計(jì)數(shù)次數(shù)已到,以供查詢或在打開中斷的條件下,可向CPU請求中斷。如需進(jìn)一步定時(shí)/計(jì)數(shù),需用指令重置時(shí)間常數(shù)。 方式0是13位計(jì)數(shù)結(jié)構(gòu)的工作方式,其計(jì)數(shù)器由TH0全部8位和TL0的低5位構(gòu)成。當(dāng)TL0的低5位計(jì)數(shù)溢出時(shí),向TH0進(jìn)位,而全部13位計(jì)數(shù)溢出時(shí),則向計(jì)數(shù)溢出標(biāo)志位TF0進(jìn)位。 在方式0下,當(dāng)為計(jì)數(shù)工作方式時(shí),計(jì)數(shù)值的范圍是: 18192

19、(213) 當(dāng)為定時(shí)工作方式時(shí),定時(shí)時(shí)間的計(jì)算公式為:  (213計(jì)數(shù)初值)×晶振周期×12 或 (213計(jì)數(shù)初值)×機(jī)器周期 其時(shí)間單位與晶振周期或機(jī)器周期相同(ms)。 例題1:當(dāng)某單片機(jī)系統(tǒng)的外接晶振頻率為6MHz,該系統(tǒng)的最小定時(shí)時(shí)間為:  213(2131)×1/(6×106)×122×1062(ms) 最大定時(shí)時(shí)間為:       (2130)×1/(6×106)×

20、1216384×10616384(ms) 或:最小定時(shí)單位×101316384(ms) 例題2: 設(shè)某單片機(jī)系統(tǒng)的外接晶振頻率為6MHz,使用定時(shí)器1以方式0產(chǎn)生周期為500ms的等寬正方波連續(xù)脈沖,并由P1.0輸出。 以查詢方式完成。  計(jì)算計(jì)數(shù)初值 欲產(chǎn)生500ms的等寬正方波脈沖,只需在P1.0端以250ms為周期交替輸出高低電平即可實(shí)現(xiàn),為此定 時(shí)時(shí)間應(yīng)為250ms。使用6MHz晶振,根據(jù)上例的計(jì)算,可知一個(gè)機(jī)器周期為2ms。方式0為13位計(jì)數(shù)結(jié) 構(gòu)。設(shè)待求的計(jì)數(shù)初值為X,則: (213-X)&#

21、215;2×10-6250×10-6 求解得: X213(250÷2)8067。 二進(jìn)制數(shù)表示為。十六進(jìn)制表示,高8位為FCH,放入TH1,即TH1FCH;低5位為03H。放入TL1,即TL103H。  TMOD寄存器初始化 為把定時(shí)器/計(jì)數(shù)器1設(shè)定為方式0,則M1M000;為實(shí)現(xiàn)定時(shí)功能,應(yīng)使C/T0;為實(shí)現(xiàn)定時(shí) 器/計(jì)數(shù)器1的運(yùn)行控制,則GATE0。定時(shí)器/計(jì)數(shù)器0不用,有關(guān)位設(shè)定為0。因此TMOD寄存 器應(yīng)初始化為00H。  由定時(shí)器控制寄存器TCON中的TR1位控制定時(shí)的啟動和停止 TR

22、11啟動,TR10停止。  程序設(shè)計(jì):MOV    TMOD,00H;設(shè)置T1為工作方式0 MOV    TH1,OFCH;設(shè)置計(jì)數(shù)初值 MOV    TL1,03H MOV   IE,00H;禁止中斷 LOOP:SETB    TR1;啟動定時(shí) JBC      TF1,LOOP1;查詢計(jì)數(shù)溢出 AJMP   LOO

23、P LOOP1:MOV      TH1,F(xiàn)CH;重新設(shè)置計(jì)數(shù)初值 MOV     TL1,03H CLR       TF1;計(jì)數(shù)溢出標(biāo)志位清0 CPL        P1.0;輸出取反 AJMP     LOOP;重復(fù)循環(huán) 工作方式1: 方式1是16位計(jì)數(shù)結(jié)構(gòu)的工作方式,計(jì)數(shù)

24、器由TH0全部8位和TL0全部8位構(gòu)成。與工作方式0基本相同,區(qū)別僅在于工作方式1的計(jì)數(shù)器TL1和TH1組成16位計(jì)數(shù)器,從而比工作方式0有更寬的定時(shí)/計(jì)數(shù)范圍。當(dāng)為計(jì)數(shù)工作方式時(shí),計(jì)數(shù)值的范圍是: 165536(216) 當(dāng)為定時(shí)工作方式時(shí),定時(shí)時(shí)間計(jì)算公式為:  (216計(jì)數(shù)初值)×晶振周期×12 或 (216計(jì)數(shù)初值)×機(jī)器周期 例題1:當(dāng)某單片機(jī)系統(tǒng)的外部晶振頻率為6MHz,則最小定時(shí)時(shí)間為:  216(2161)×1/6×106×122×1062(ms) 

25、最大定時(shí)時(shí)間為:  (2160)×1/6×106×12131072×106(s)131072(ms)131(ms) 例題2: 某單片機(jī)系統(tǒng)外接晶振頻率為6MHz,使用定時(shí)器1以工作方式1產(chǎn)生周期為500ms的等寬連續(xù) 正方波脈沖,并在P1.0端輸 出。,但以中斷方式完成。  計(jì)算計(jì)數(shù)初值  TH1FFH TL1=83H  TMOD寄存器初始化  TMOD10H  程序設(shè)計(jì) 主程序:MOV     TMOD,10H;定

26、時(shí)器1工作方式 MOV      TH1,0FFH;設(shè)置計(jì)數(shù)初值 MOV      TL1,0A1H SETB      EA;開中斷 SETB      ET1;定時(shí)器1允許中斷 LOOP:SETB      TR1;定時(shí)開始 HERE:SJMP   

27、60; ;等待中斷 中斷服務(wù)程序:MOV TH1,0FFH;重新設(shè)置計(jì)數(shù)初值 MOV TL1,0A1H CPL P1.0;輸出取反 RETI;中斷返回工作方式28位自動裝入時(shí)間常數(shù)方式。由TLl構(gòu)成8位計(jì)數(shù)器,THl僅用來存放時(shí)間常數(shù)。啟動T1前,TLl和THl裝入相同的時(shí)間常數(shù),當(dāng)TL1計(jì)滿后,除定時(shí)器回零標(biāo)志TFl置位,具有向CPU請求中斷的條件外,THl中的時(shí)間常數(shù)還會自動地裝入TLl,并重新開始定時(shí)或計(jì)數(shù)。所以,工作方式2是一種自動裝入時(shí)間常數(shù)的8位計(jì)數(shù)器方式。由于這種方式不需要指令重裝時(shí)間常數(shù),因而操作方便,在允許的條件下,應(yīng)盡量使用這種工作方

28、式。當(dāng)然,這種方式的定時(shí)計(jì)數(shù)范圍要小于方式0和方式1。工作方式2的結(jié)構(gòu)見下圖 當(dāng)計(jì)數(shù)溢出后,不是像前兩種工作方式那樣通過軟件方法,而是由預(yù)置寄存器TH以硬件方法自動給計(jì)數(shù)器TL重新加載。變軟件加載為硬件加載。  初始化時(shí),8位計(jì)數(shù)初值同時(shí)裝入TL0和TH0中。當(dāng)TL0計(jì)數(shù)溢出時(shí),置位TF0,同時(shí)把保存在預(yù)置寄 存器TH0中的計(jì)數(shù)初值自動加載TL0,然后TL0重新計(jì)數(shù)。如此重復(fù)不止。這不但省去了用戶程序中的 重裝指令,而且也有利于提高定時(shí)精度。但這種工作方式下是8位計(jì)數(shù)結(jié)構(gòu),計(jì)數(shù)值有限,最大只能 到255。  這種自動重新加載工作方式非常適用于循

29、環(huán)定時(shí)或循環(huán)計(jì)數(shù)應(yīng)用,例如用于產(chǎn)生固定脈寬的脈沖, 此外還可以作串行數(shù)據(jù)通信的波特率發(fā)送器使用。 例題1: 使用定時(shí)器0以工作方式2產(chǎn)生100ms定時(shí),在P1.0輸出周期為200ms的連續(xù)正方波脈沖。已知 晶振頻率fosc6MHz。  計(jì)算計(jì)數(shù)初值  6MHz晶振下,一個(gè)機(jī)器周期為2ms,以TH0作重裝載的預(yù)置寄存器,TL0作8位計(jì)數(shù)器,假設(shè)計(jì)數(shù)初 值為X,則: (28-X)×2×10-6100×10-6 求解得:  X206D11001110B0CEH 把0CEH分別裝入T

30、H0和TL0中:  TH00CEH,TL00CEH  TMOD寄存器初始化  定時(shí)器/計(jì)數(shù)器0為工式方式2,M1M010;為實(shí)現(xiàn)定時(shí)功能 C/T0;為實(shí)現(xiàn)定時(shí)器/計(jì)數(shù)器0的運(yùn)行  GATE0;定時(shí)器/計(jì)數(shù)器1不用,有關(guān)位設(shè)定為0。  綜上情況TMOD寄存器的狀態(tài)應(yīng)為02H。  程序設(shè)計(jì)(查詢方式) MOV     IE,00H;禁止中斷 MOV     TMOD,02H;設(shè)置定時(shí)器0為方式2 MOV 

31、60;   TH0,0CEH;保存計(jì)數(shù)初值 MOV     TL0,0CEH;設(shè)置計(jì)數(shù)初值 SETB     TR0;啟動定時(shí) LOOP:JBC        TF0,LOOP1;查詢計(jì)數(shù)溢出 AJMP    LOOP LOOP1: CPL        P1

32、.0;輸出方波 AJMP     LOOP;重復(fù)循環(huán)  由于方式2具有自動重裝載功能,因此計(jì)數(shù)初值只需設(shè)置一次,以后不再需要軟件重置。  程序設(shè)計(jì)(中斷方式)  主程序:MOV TMOD,02H;定時(shí)器0工作方式2 MOV     TH0,0CEH;保存計(jì)數(shù)初值 MOV     TL0,0CEH;設(shè)置計(jì)數(shù)初值 SETB     EA;開中斷 SETB

33、0;    ET0;定時(shí)器0允許中斷 LOOP:SETB     TR0;開始定時(shí) HERE:SJMP     ;等待中斷 CLP        TF0 ;計(jì)數(shù)溢出標(biāo)志位清0 AJMP    LOOP  中斷服務(wù)中斷:CPL         P1.0 

34、;;輸出方波 RETI;中斷返回  例題2: 用定時(shí)器1以工作方式2實(shí)現(xiàn)計(jì)數(shù),每計(jì)100次進(jìn)行累加器加1操作。  計(jì)算計(jì)數(shù)初值 28-100156D09CH 則   TH109CH,TL109CH  TMOD寄存器初始化  M1M010,C/T1,GATE0 因此  TMOD60H  程序設(shè)計(jì)MOV    IE, 00H;禁止中斷 MOV    TMOD, 60H;設(shè)置計(jì)數(shù)器1為方式2 MOV   

35、; TH1, 9CH;保存計(jì)數(shù)初值 MOV     TL1, 9CH;設(shè)置計(jì)數(shù)初值 SETB    TR1;啟動計(jì)數(shù) DEL:JBC        TF1, LOOP;查詢計(jì)數(shù)溢出 AJMP    DEL LOOP:INC         A;累加器加1 AJMP  &

36、#160; DEL;循環(huán)返回 工作方式3 2個(gè)8位方式。工作方式3只適用于定時(shí)器0。如果使定時(shí)器1為工作方式3,則定時(shí)器1將處于關(guān)閉狀態(tài)。當(dāng)T0為工作方式3時(shí),THo和TL0分成2個(gè)獨(dú)立的8位計(jì)數(shù)器。其中,TL0既可用作定時(shí)器,又可用作計(jì)數(shù)器,并使用原T0的所有控制位及其定時(shí)器回零標(biāo)志和中斷源。TH0只能用作定時(shí)器,并使用T1的控制位TRl、回零標(biāo)志TFl和中斷源,見下圖。通常情況下,T0不運(yùn)行于工作方式3,只有在T1處于工作方式2,并不要求中斷的條件下才可能使用。這時(shí),T1往往用作串行口波特率發(fā)生器(見14),TH0用作定時(shí)器,TL0作為定時(shí)器或計(jì)數(shù)器。所以,方式3是為了使單片機(jī)有

37、1個(gè)獨(dú)立的定時(shí)器計(jì)數(shù)器、1個(gè)定時(shí)器以及1個(gè)串行口波特率發(fā)生器的應(yīng)用場合而特地提供的。這時(shí),可把定時(shí)器l用于工作方式2,把定時(shí)器0用于工作方式3。 下才可能使用。這時(shí),T1往往用作串行口波特率發(fā)生器,TH0用作定時(shí)器,TL0作為定時(shí)器或計(jì)數(shù)器。所以,方式3是為了使單片機(jī)有1個(gè)獨(dú)立的定時(shí)器計(jì)數(shù)器、1個(gè)定時(shí)器以及1個(gè)串行口波特率發(fā)生器的應(yīng)用場合而特地提供的。這時(shí),可把定時(shí)器l用于工作方式2,把定時(shí)器0用于工作方式3。 理解內(nèi)容 定時(shí)器/計(jì)數(shù)器與中斷綜合應(yīng)用舉例 例題:時(shí)鐘計(jì)時(shí)程序設(shè)計(jì)。 所謂時(shí)鐘計(jì)時(shí),就是以秒、分、時(shí)為單位進(jìn)行的計(jì)時(shí)。可以把該程序看成是定時(shí)器/計(jì)數(shù)器與中

38、斷應(yīng)用的典型代表,就算是對這兩部分內(nèi)容的復(fù)習(xí)。  MCS-51單片機(jī)實(shí)現(xiàn)時(shí)鐘計(jì)時(shí)顯示的基本方法  首先要計(jì)算計(jì)數(shù)初值  時(shí)鐘計(jì)時(shí)的關(guān)鍵問題是秒的產(chǎn)生,因?yàn)槊胧亲钚r(shí)鐘單位,但使用MMCS-51的定時(shí)器/計(jì)數(shù)器進(jìn)行定時(shí),即使按工作方式,其最大定時(shí)時(shí)間也只能達(dá)到131毫秒,離1秒還差好遠(yuǎn)。為此,我們把秒計(jì)時(shí)用硬件定時(shí)和軟件計(jì)數(shù)相結(jié)合的方法實(shí)現(xiàn),即:把定時(shí)器的定時(shí)時(shí)間定為125毫秒,這樣當(dāng)計(jì)數(shù)溢出8次就可得到1秒,而8次計(jì)數(shù)可用軟件方法實(shí)現(xiàn)。  為得到125ms定時(shí),我們可使用定時(shí)器/計(jì)數(shù)器0,以工作方式進(jìn)行,當(dāng)設(shè)定單片機(jī)為6MHz晶振,設(shè)計(jì)數(shù)初值為X,則有如

39、下等式:  (216X)×2us125000us 計(jì)算得計(jì)數(shù)初值X3036, 二進(jìn)制表示為,十六進(jìn)制表示為0BCDH。  定時(shí)器定時(shí)采用中斷方式完成,以便于通過中斷服務(wù)程序進(jìn)行溢出次數(shù)(每次125毫秒)的累計(jì),計(jì) 滿8次即得到秒計(jì)時(shí)。  通過在程序中的數(shù)值累加和數(shù)值比較來實(shí)現(xiàn)從秒到分和從分到時(shí)的計(jì)時(shí)  設(shè)置時(shí)鐘顯示及顯示緩沖區(qū) 假定時(shí)鐘時(shí)間在六位LED數(shù)碼管(LED5LED0)上進(jìn)行顯示(時(shí)、分、秒各占兩位)。為此,要在內(nèi)部RAM中設(shè)置顯示緩沖區(qū),共6個(gè)單元(79H7EH),與數(shù)碼管的對應(yīng)關(guān)系為:

40、0; LED57EH、LED47DH、LED37CH、LED27BH、LED17AH、LED079H。 即顯示緩沖區(qū)從左向右依次存放時(shí)、分、秒的數(shù)值。  假定已有LED顯示程序?yàn)镾MXS可供調(diào)用  程序流程  主程序(MAIN) 主程序的主要功能是進(jìn)行定時(shí)器/計(jì)數(shù)器的初始化編程,然后通過反復(fù)調(diào)用顯示子程序的方法,等待125ms定時(shí)中斷的到來。  中斷服務(wù)程序(PIT0) 中斷服務(wù)程序的主要功能是進(jìn)行計(jì)時(shí)操作。程序開始先判斷計(jì)數(shù)溢出是否滿了8次,不滿8次表明還沒達(dá)到最小計(jì)時(shí)單位秒,中斷返回;如滿8次則表明已達(dá)到最小計(jì)時(shí)單位秒,程序繼續(xù)向

41、下執(zhí)行,進(jìn)行計(jì)時(shí)操作。  加1子程序(DAAD1) 加1子程序用于完成對秒、分和時(shí)的加1操作,中斷服務(wù)程序中在秒、分、時(shí)加1時(shí)共有三處調(diào)用此子程序。加1操作共包括以下三項(xiàng)內(nèi)容: 合數(shù) 由于每位LED顯示器對應(yīng)一個(gè)8位的緩沖單元,因此由兩位BCD碼表示的時(shí)間值各占用一個(gè)緩沖單元,且只占其低4位。為此在加1運(yùn)算之前需把兩個(gè)緩沖單元中存放的數(shù)值合并起來,構(gòu)成一個(gè)字節(jié),然后才能進(jìn)行加1運(yùn)算。合字之說由此而來。 十進(jìn)制調(diào)整 對加1并進(jìn)行十進(jìn)制調(diào)整 分?jǐn)?shù) 把加1后的時(shí)間值再拆分成兩個(gè)字節(jié),送回各自的緩沖單元中。  程序清單 整個(gè)參考程序清單如下:

42、  ORG       8000H  START:AJMP     MAIN  ORG        800BH  AJMP     PITO  ORG        8100H  MAIN: MOV     

43、   SP, 60H ;確立堆棧區(qū)  MOV        R0, 79H ;顯示緩沖區(qū)首地址  MOV        R7, 06H ;顯示位數(shù)  ML1:    MOV        R0, #00H ;顯示緩沖單元清0  INC     

44、60;     R0  DJNZ        R7, ML1  MOV        TMOD, 01H ;定時(shí)器0,工作方式  MOV        TL0, 0CDH ;裝計(jì)數(shù)器初值  MOV        TH0, 0BH 

45、; SETB        8CH ;TR0置1,定時(shí)開始  SETB        AFH ;EA置1,中斷總允許  SETB        A9H ;ET0置1,定時(shí)器0中斷允許  MOV       30H, 08H ;要求的計(jì)數(shù)溢出次數(shù),即循環(huán)次數(shù)  ML0:  

46、; LCALL     SMXS ;調(diào)用顯示子程序  SJMP       ML0 PITO:   PUSH       PSW ;中斷服務(wù)程序,現(xiàn)場保護(hù)  PUSH       ACC  SETB       PSW.3 ;RS1RS0=01,選1組通用寄存

47、器  MOV     TL0, 0CDH ;計(jì)數(shù)器重新加載  MOV     TH0, 0BH  MOV     A, 30H ;循環(huán)次數(shù)減1  DEC      A  MOV      30H, A  JNZ        RET0 ;不

48、滿8次,轉(zhuǎn)RET0返回  MOV     30H, 08H ;滿8次,開始計(jì)時(shí)操作 MOV     R0, 7AH ;秒顯示緩沖單元地址  ACALL  DAAD1 ;秒加1  MOV      A, R2 ;加1后秒值在R2中  XRL        A, 60H ;判是否到60秒  JNZ    

49、;     RET0 ;不到,轉(zhuǎn)RETO返回  ACALL   CLR0 ;到60秒顯示緩沖單元清0  MOV       R0, 7CH ;分顯示緩沖單元地址  ACALL   DAAD1 ;分加1  MOV       A, R2  XRL         A, 60H ;判是否到60分  JNZ          RET0  ACALL    CLR0 ;到60分

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論