定時器、計數(shù)器及實驗_第1頁
定時器、計數(shù)器及實驗_第2頁
定時器、計數(shù)器及實驗_第3頁
定時器、計數(shù)器及實驗_第4頁
定時器、計數(shù)器及實驗_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

定時器/計數(shù)器及實驗MCS-51單片機可提供兩個16位的定時/計數(shù)器:定時/計數(shù)器1和定時/計數(shù)器0。它們均可用作定時器或事件計數(shù)器,為單片機系統(tǒng)提供計數(shù)和定時功能。12.1定時/計數(shù)器的結(jié)構(gòu)及工作原理圖12-1為定時/計數(shù)器的結(jié)構(gòu)框圖。由圖12-1可見,定時/計數(shù)器的核心是一個加1計數(shù)器,加1計數(shù)器的脈沖有兩個來源,一個是外部脈沖源,另一個是系統(tǒng)的時鐘振蕩器。計數(shù)器對兩個脈沖源之一進(jìn)行輸入計數(shù),每輸入一個脈沖,計數(shù)值加1。當(dāng)計數(shù)到計數(shù)器為全1時,再輸入一個脈沖就使計數(shù)值回零,同時從最高位溢出一個脈沖使特殊功能寄存器TCON(定時器控制寄存器)的某一位TF0或TF1置1,作為計數(shù)器的溢出中斷標(biāo)志。如果定時/計數(shù)器工作于定時狀態(tài),則表示定時的時間到,若工作于計數(shù)狀態(tài),則表示計數(shù)回零。所以,加1計數(shù)器的基本功能是對輸入脈沖進(jìn)行計數(shù),至于其工作于定時還是計數(shù)狀態(tài),則取決于外接什么樣的脈沖源。當(dāng)脈沖源為時鐘振蕩器(等間隔脈沖序列)時,由于計數(shù)脈沖為一時間基準(zhǔn),所以脈沖數(shù)乘以脈沖間隔時間就是定時時間,因此為定時功能。當(dāng)脈沖源為間隔不等的外部脈沖發(fā)生器時,就是外部事件的計數(shù)器,因此為計數(shù)功能。 圖12-1定時/計數(shù)器結(jié)構(gòu)框圖用作“定時器”時,在每個機器周期寄存器加1,也可以把它看作是在累計機器周期。由于一個機器周期包括12個振蕩周期,所以,它的計數(shù)速率是振蕩頻率的1/12。如果單片機采用12MHz晶體,則計數(shù)頻率為1MHz,即每微秒計數(shù)器加l。這樣不但可以根據(jù)計數(shù)值計算出定時時間,也可以反過來按定時時間的要求計算出應(yīng)計數(shù)的預(yù)置值。用作“計數(shù)器”時,MCS-51在其對應(yīng)的外輸入端T0(P3.4)或T1(P3.5)有一個輸入脈沖的負(fù)跳變時加1。最快的計數(shù)速率是振蕩頻率的1/24。定時/計數(shù)器T0由兩個8位特殊功能寄存器TH0和TL0構(gòu)成,定時/計數(shù)器T1由兩個8位特殊功能寄存器TH1和TL1構(gòu)成。方式寄存器TMOD用于設(shè)置定時/計數(shù)器的工作方式,控制寄存器TCON用于啟動和停止定時/計數(shù)器的計數(shù),并控制定時/計數(shù)器的狀態(tài)。對于每一個定時/計數(shù)器其內(nèi)部結(jié)構(gòu)實質(zhì)上是一個可程控加法計數(shù)器,由編程來設(shè)置它工作在定時狀態(tài)或計數(shù)狀態(tài)。8位特殊功能寄存器TH0和TL0(或TH1和TL1)可被程控為不同的組合狀態(tài)(13位、16位、兩個分開的8位等),從而形成定時/計數(shù)器四種不同的工作方式,這也只需用指令改變TMOD的相應(yīng)位即可。12.2定時/計數(shù)器方式寄存器和控制寄存器方式寄存器TMOD和控制寄存器TCON用于控制定時/計數(shù)器的工作方式,一旦把控制字寫入TMOD和TCON后,在下一條指令的第一個機器周期初(S1P1期間)就發(fā)生作用。兩個寄存器格式如下:1.定時/計數(shù)器方式寄存器TMODD7D6D5D4D3D2D1D0TMODGATEC/TM1M0GATEC/TM1M0(89H)定時器T1方式字段定時器T0方式字段其中高4位控制定時器T1,低4位控制定時器T0。M1、M0:工作方式選擇位。定時器/計數(shù)器具有4種工作方式,由M1M0位來定義,如表12-1。M1M0工作方式功能說明00方式013位定時/計數(shù)器01方式116位定時/計數(shù)器10方式2可自動再裝入的8位定時/計數(shù)器11方式3把定時/計數(shù)器0分成兩個8位的計數(shù)器,關(guān)閉定時/計數(shù)器T1。表12-1定時/計數(shù)器工作方式選擇C/T:選擇“計數(shù)器”或“定時器”功能,C/T=1為計數(shù)器功能(計數(shù)在T0或T1端的負(fù)跳變)。C/T=0為定時器功能(計機器周期)。GATE:選通控制。GATE=0,由軟件控制TR0或TR1位啟動定時器;GATE=1,由外部中斷引腳INT0(P3.2)和INT1(P3.3)輸入電平分別控制T0和T1的運行。2.定時/計數(shù)器控制寄存器TCONbit8FH8EH8DH8CH8BH8AH89H88HTCONTF1TR1TF0TR0IE1IT1IE0IT1(88H)與外部中斷有關(guān)TF1:定時器T1溢出中斷標(biāo)志,當(dāng)定時器T1溢出時由內(nèi)部硬件置位,申請中斷,當(dāng)單片機轉(zhuǎn)向中斷服務(wù)程序時,由內(nèi)部硬件將TF1標(biāo)志位清0。TR1:定時器T1運行控制位,由軟件置位/清除來控制定時器T1開啟/關(guān)閉。當(dāng)GATE(TMOD.7)為0而TR1為l時,允許T1計數(shù);當(dāng)TR1為0時禁止T1計數(shù)。當(dāng)GATE(TMOD.7)為l時,僅當(dāng)TR1=1且INT1輸入為高電平才允許T1計數(shù),TR1=0或INT1輸入低電平都禁止T1計數(shù)。TF0:定時器T0溢出標(biāo)志,其含義與TF1類同。TR0:定時器T0的運行控制位,其含義與TR1類同。復(fù)位時,TMOD和TCON的所有位均清0。TCON的低4位與外部中斷有關(guān),在下一章再作介紹。12.3定時/計數(shù)器的工作方式2個16位定時器/計數(shù)器具有定時和計數(shù)兩種功能,每種功能包括了4種工作方式。用戶通過指令把方式字寫入TMOD中來選擇定時器/計數(shù)器的功能和工作方式,通過把計數(shù)的初始值寫入TH和TL中來控制計數(shù)長度,通過對TCON中相應(yīng)位進(jìn)行置位或清0來實現(xiàn)啟動定時器工作或停止計數(shù)。還可以讀出TH、TL、TCON中的內(nèi)容來查詢定時器的狀態(tài)。12.3.1方式0當(dāng)M1M0兩位為00時,定時器/計數(shù)器被選為工作方式0。其等效框圖如圖12-2所示。方式0是一個13位的定時器/計數(shù)器。定時器T1的結(jié)構(gòu)和操作與定時器T0完全相同。在這種方式下,16位寄存器(TH0和TL0)只用13位。其中TL0的高3位未用,其余位占整個13位的低5位,TH0占高8位。當(dāng)TL0的低5位溢出時向TH0進(jìn)位,而TH0溢出時向中斷標(biāo)志TF0進(jìn)位(硬件置位TF0),并申請中斷。定時器T0計數(shù)溢出與否可通過查詢TF0是否置位,或是否產(chǎn)生定時器T0中斷而知道。圖12-2定時器T0(或T1)方式0結(jié)構(gòu)當(dāng)C/T=0時,多路開關(guān)連接振蕩器的12分頻器輸出,T0對機器周期計數(shù),這就是定時工作方式。當(dāng)C/T=l時,多路開關(guān)與引腳P3.4(T0)相連,外部計數(shù)脈沖由引腳T0輸入。當(dāng)外信號電平發(fā)生1到0跳變時,計數(shù)器加1,這時T0成為外部事件計數(shù)器。當(dāng)GATE=0時,封鎖“或”門,使引腳INT0輸入信號無效。這時,“或”門輸出為常“1”,打開“與”門,由TR0控制定時器T0的開啟和關(guān)斷。若TR0=1,接通控制開關(guān),啟動定時器T0,允許T0在原計數(shù)值上作加法計數(shù),直至溢出。溢出時,計數(shù)寄存器值為0,TF0=1,并申請中斷,T0從0開始計數(shù)。因此,若希望計數(shù)器按原計數(shù)初值開始計數(shù),在計數(shù)溢出后,應(yīng)給計數(shù)器重新賦初值。若TR0=0,則關(guān)斷控制開關(guān),停止計數(shù)。當(dāng)GATE=1,且TR0=l時,“或”門、“與”門全部打開,外信號電平通過INT0直接開啟或關(guān)斷定時器計數(shù)。輸入“1”電平時,允許計數(shù),否則停止計數(shù)。這種操作方法可用來測量外信號的脈沖寬度等。當(dāng)為計數(shù)工作方式時,計數(shù)值的范圍是:1~8192(213)當(dāng)為定時工作當(dāng)時,定時時間的計算公式為:(213-計數(shù)初值)x晶振周期x12或(213-計數(shù)初值)x機器周期12.3.2方式1當(dāng)M1M0兩位為01時,定時器/計數(shù)器被選為工作方式1。其等效框圖如圖12-3所示。圖12-3定時器T0(或T1)方式1結(jié)構(gòu)方式1為16位計數(shù)結(jié)構(gòu)的工作方式,計數(shù)器由8位TH0和8位TL0構(gòu)成(定時器T1的結(jié)構(gòu)和操作與定時器T0完全相同)。其邏輯電路和工作情況與方式0完全相同,所不同的只是組成計數(shù)器的位數(shù)。當(dāng)為計數(shù)工作方式時,計數(shù)值的范圍是:1~65536(216)當(dāng)為定時工作方式時,定時時間計算公式為:(216-計數(shù)初值)x晶振周期x12或(216-計數(shù)初值)x機器周期12.3.3方式2當(dāng)M1M0兩位為10時,定時器/計數(shù)器被選為工作方式2。其等效框圖如圖12-4所示。圖12-4定時器T0(或T1)方式2結(jié)構(gòu)方式0和方式1的最大特點是計數(shù)溢出后,計數(shù)器全為0,因此循環(huán)定時或計數(shù)應(yīng)用時就存在重新設(shè)置計數(shù)初值的問題,這不但影響定時精度,而且也給程序設(shè)計帶來不便。方式2就是針對此問題而設(shè)置的,它具有自動重新加載功能,因此也可以說方式2是自動重新加載工作方式。在這種工作方式下,把16位計數(shù)器分為兩部分,即以TL0作計數(shù)器,以TH0作預(yù)置寄存器,初始化時把計數(shù)初值分別裝入TL0和TH0中。當(dāng)計數(shù)溢出后,由預(yù)置寄存器以硬件方法自動加載。初始化時,8位計數(shù)初值同時裝入TL0和TH0中。當(dāng)TL0計數(shù)溢出時,置位TF0,同時把保存在TH0中的計數(shù)初值自動加載裝入TL0中,然后TL0重新計數(shù),如此重復(fù)不止,這不但省去了用戶程序中的重裝指令,而且有利于提高定時精度。但這種方式下計數(shù)值有限,最大只能到256。這種自動重新加載工作方式非常適用于連續(xù)定時或計數(shù)應(yīng)用。當(dāng)為計數(shù)工作方式時,計數(shù)值的范圍是:1~256(28)當(dāng)為定時工作方式時,定時時間計算公式為:(28-計數(shù)初值)x晶振周期x12或(28-計數(shù)初值)x機器周期12.3.4方式3當(dāng)M1M0兩位為11時,定時器/計數(shù)器被選為工作方式3。前三種工作方式下,對兩個定時器/計數(shù)器的使用是完全相同的,但是在方式3下,兩個定時器/計數(shù)器的工作卻是不同的。定時器/計數(shù)器T0:在方式3下,定時器/計數(shù)器T0被拆成兩個獨立的8位計數(shù)器TL0和TH0,其中TL0既可以計數(shù)使用,又可以定時使用,定時器/計數(shù)器T0的各控制位和引腳信號全歸它使用。其功能和操作與方式0和方式1完全相同,而且邏輯電路結(jié)構(gòu)也極其類似,如圖12-5。圖12-5定時器T0(或T1)方式3結(jié)構(gòu)但TH0則只能作為簡單的定時器使用,而且由于定時器/計數(shù)器T0的控制位已被TL0所占用,因此只好借用定時器/計數(shù)器T1的控制位TR1和TF1,即計數(shù)溢出置位TF1,而定時的啟動和停止則受TR1的狀態(tài)控制。由于TH0只能作定時器使用而不能作計數(shù)器使用,因此在方式3下,定時器/計數(shù)器T0可以構(gòu)成二個定時器;或一個定時器一個計數(shù)器。定時器/計數(shù)器T1:如果定時器/計數(shù)器T0已被設(shè)置為工作方式3,則定時器/計數(shù)器T1只能設(shè)置為方式0,方式1或方式2,因為它的運行控制位TR1及計數(shù)溢出標(biāo)志位TF1已被定時器/計數(shù)器T0所占據(jù),在這種情況下,定時器/計數(shù)器T1通常是作為串行口的波特率發(fā)生器使用,因為已沒有計數(shù)溢出標(biāo)志位TF1可供使用,因此就把計數(shù)溢出直接送給串行口,以決定串行通信的速率。當(dāng)作為波特率發(fā)生器使用時,只需設(shè)置好工作方式,便自動運行。如要停止工作,只需送入一個把它設(shè)置為方式3的方式控制字就可以了。因為定時器/計數(shù)器T1不能在方式3下使用,如果硬把它設(shè)置為方式3,就停止工作。12.4定時器/計數(shù)器的初始化由于定時器/計數(shù)器的功能是由軟件編程確定的,所以一般在使用定時器/計數(shù)器前都要對其進(jìn)行初始化,使其按設(shè)定的功能工作。初始化步驟一般如下:1.確定工作方式,對TMOD賦值。2.預(yù)置定時或計數(shù)的初值,可直接將初值寫入TH0、TL0或TH1、TL1。3.根據(jù)需要開放定時器/計數(shù)器的中斷,直接對IE位賦值。4.啟動定時器/計數(shù)器,若已規(guī)定用軟件啟動,則可把TR0或TR1置“1”;若已規(guī)定由外中斷引腳電平啟動,則需給外引腳加啟動電平。當(dāng)實現(xiàn)了啟動要求之后,定時器即按規(guī)定的工作方式和初值開始計數(shù)或定時。12.5使用定時器T1以方式0使單片機產(chǎn)生周期為1000μS等寬方波脈沖實驗(1000Hz音頻),在P1.7輸出驅(qū)動蜂鳴器發(fā)音12.5.1實現(xiàn)方法LED輸出試驗板使用11.0592MHz晶振,可近似認(rèn)為其為12MHz,這樣一個機器周期為1μS。欲產(chǎn)生1000μS周期方波脈沖,只需在P1.7以500μS時間交替輸出高低電平即可。1.T1為方式0,則M1M0=00H。使用定時功能,C/T=0。GATE=0。T0不用,其有關(guān)位設(shè)為0。這樣,TMOD=00H。2.方式0為13位長度計數(shù)結(jié)構(gòu),設(shè)計數(shù)初值為X,則:(213-X)x1x10-6=500x10-6得X=7692DX=1111000001100B轉(zhuǎn)成16進(jìn)制后,高8位=F0H,低8位=0CH。即TH1=F0H,TL0=0CH。3.由控制寄存器TCON中的TR1位來控制定時的啟動和停止,TR1=1啟動,TR1=0停止。12.5.2源程序文件在我的文檔中建立一個文件目錄(S12-1),然后建立一個S12-1.uv2的工程項目,最后建立源程序文件(S12-1.asm)。輸入下面的程序:序號:1 ORG0000H2 LJMPMAIN 3 ORG030H4MAIN: MOVTMOD,#00H5 MOVTH1,#0F0H6 MOVTL1,#0CH7 MOVIE,#00H8 SETBTR19 LOOP: JBCTF1,LOOP110 AJMPLOOP11 LOOP1: MOVTH1,#0F0H12 MOVTL1,#0CH13 CLRTF114 CPLP1.715 AJMPLOOPEND編譯通過后,將S12-1文件夾中的hex文件燒錄到89C51芯片中,將芯片插入到LED輸出試驗板上,接上5V穩(wěn)壓電源,蜂鳴器中立即響起悅耳的1KHz音頻聲。12.5.3程序分析解釋 序號1:程序開始。序號2:跳轉(zhuǎn)到MAIN主程序處。序號3:主程序MAIN從地址0030H開始。序號4:置T1為方式0。序號5、6:載入定時初值。序號7:禁止中斷。序號8:啟動定時器T1。序號9、10:查詢T1的溢出標(biāo)志TF1。TF1=0定時未到,轉(zhuǎn)LOOP繼續(xù)查詢;TF1=1定時到,轉(zhuǎn)LOOP1。序號11、12:重裝定時初值。序號13:清除溢出標(biāo)志。序號14:P1.7輸出端取反。序號15:跳轉(zhuǎn)到LOOP處重復(fù)循環(huán)。序號16:程序結(jié)束。12.6使用定時器T1以方式2計數(shù)實驗,每計10次,進(jìn)行累加器加1操作,并送P1口顯示12.6.1實現(xiàn)方法LED輸出試驗板使用11.0592MHz晶振,可近似認(rèn)為其為12MHz,這樣一個機器周期為1μS。1.T1為方式2,則M1M0=10H。使用計數(shù)功能,C/T=1。GATE=0。T0不用,其有關(guān)位設(shè)為0。這樣,TMOD=60H。2.方式2為8位長度自動重裝載計數(shù)結(jié)構(gòu),設(shè)計數(shù)初值為:(28-10)=246D=11110110B=F6H,即TH1=0F6H,TL1=0F6H。3.由控制寄存器TCON中的TR1位來控制定時的啟動和停止,TR1=1啟動,TR1=0停止。12.6.2源程序文件在我的文檔中建立一個文件目錄(S12-2),然后建立一個S12-2.uv2的工程項目,最后建立源程序文件(S12-2.asm)。輸入下面的程序:序號:1 ORG0000H2 LJMPMAIN 3 ORG030H4MAIN: MOVTMOD,#60H5 MOVTH1,#0F6H6 MOVTL1,#0F6H7 MOVIE,#00H8 SETBTR19 MOVP1,#00H10 ACALLDEL11 LOOP: JBCTF1,LOOP112 AJMPLOOP13 LOOP1: INCA14 MOVP1,A15 ACALLDEL16 AJMPLOOP17 DEL: MOVR7,#014H18 DEL1: MOVR6,#0FFH19 DEL2:MOVR5,#01FH20 DEL3: DJNZR5,DEL321 DJNZR6,DEL222 DJNZR7,DEL123 RET24 END編譯通過后,將S12-2文件夾中的hex文件燒錄到89C51芯片中,將芯片插入到LED輸出試驗板上,接上5V穩(wěn)壓電源,這時P1口外接的8個LED均點亮(輸出狀態(tài)為00H)。將LED輸出試驗板配帶的試驗線一端插到標(biāo)示有“0”電平的排針上,另一端去觸碰標(biāo)示為P3.5(T1)的排針,可發(fā)現(xiàn),每觸碰10次后,P1口按二進(jìn)制加1(→01H→02H…)。有些讀者可能會發(fā)現(xiàn),觸碰不到10次,P1口也按二進(jìn)制加1。其實這是由于觸碰時的抖動效應(yīng),可能一下輸入了好幾個脈沖。這絲毫也不影響我們對程序的理解。12.6.3程序分析解釋 序號1:程序開始。序號2:跳轉(zhuǎn)到MAIN主程序處。序號3:主程序MAIN從地址0030H開始。序號4:置T1為方式2。序號5、6:載入定時初值。序號7:禁止中斷。序號8:啟動定時器T1。序號9:點亮P1口的LED。序號10:調(diào)用延時子程序,使于觀察LED點亮狀態(tài)。序號11、12:查詢T1的溢出標(biāo)志TF1。TF1=0定時未到,轉(zhuǎn)LOOP繼續(xù)查詢;TF1=1定時到,轉(zhuǎn)LOOP1。序號13:累加器加1。序號14:累加器內(nèi)容送P1口顯示。序號15:調(diào)用延時子程序,使于觀察LED點亮狀態(tài)。序號16:跳轉(zhuǎn)到LOOP處重復(fù)循環(huán)。序號17~23:延時子程序。序號24:程序結(jié)束。12.7使用定時器T1以方式1定時實驗,使P1.0端每隔1分鐘取反一次12.7.1實現(xiàn)方法LED輸出試驗板使用11.0592MHz晶振,可近似認(rèn)為其為12MHz,這樣一個機器周期為1μS。在方式1最大定時時間=65536x12/(12x106)=65536μS=65.536mS,顯然離1分鐘還差十萬八千里。這里我們將T1設(shè)定為定時50mS,另設(shè)兩個軟件計數(shù)器,采用30H、31H兩個單元進(jìn)行秒、分計數(shù)。30H內(nèi)置常數(shù)20,31H內(nèi)置常數(shù)60,這樣50mSx20x60=60000mS=60S=1分鐘。1.T1為方式1,則M1M0=01H。使用定時功能,C/T=0。GATE=0。T0不用,其有關(guān)位設(shè)為0。這樣,TMOD=10H。2.方式1為16位長度計數(shù)結(jié)構(gòu),計數(shù)初值為:(216-X)x1x10-6=50x10-3,X=65536-50000=15536D=3CB0H,即TH1=3CH,TL1=0B0H。3.由控制寄存器TCON中的TR1位來控制定時的啟動和停止,TR1=1啟動,TR1=0停止。12.7.2源程序文件在我的文檔中建立一個文件目錄(S12-3),然后建立一個S12-3.uv2的工程項目,最后建立源程序文件(S12-3.asm)。輸入下面的程序:序號:1

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論