第五章定時計數器_第1頁
第五章定時計數器_第2頁
第五章定時計數器_第3頁
第五章定時計數器_第4頁
第五章定時計數器_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第五章定時計數器第一頁,共三十九頁,2022年,8月28日單片機的51子系列有兩個16位的定時/計數器:定時器0和定時器1。均可用作定時器或事件計數器,為單片機系統(tǒng)提供計數和定時功能。以實現控制系統(tǒng)中所要求的定時或延時控制、外部事件計數。52子系列單片機(8032/8052)除了有上述2個定時/計數器外,還有一個定時計數器2,后者的功能比前兩者強。5.1定時/計數器的結構及工作原理第二頁,共三十九頁,2022年,8月28日定時/計數器的核心部件是一個加1計數器,其脈沖有兩個來源:外部脈沖源、系統(tǒng)的時鐘振蕩器。計數器對兩個脈沖源之一進行輸入計數,每輸入一個脈沖,計數值加1。當計數到計數值為全1時,再輸入一個脈沖就使計數值回零,同時從最高位溢出一個脈沖使特殊功能寄存器TCON(定時器控制寄存器)的某一位TFx置1,作為計數器的溢出中斷標志。定時/計數器的結構框圖振蕩器÷12加1計數器TFx中斷TX端C/T=0C/T=1控制信號TRx第三頁,共三十九頁,2022年,8月28日若工作于定時狀態(tài),則表示定時時間到;若工作于計數狀態(tài),則表示計數回零。所以,加1計數器的基本功能是對輸入脈沖進行計數。用作定時器時,在每個機器周期計數器加1,所以可以把它看作累加機器周期,1個機器周期包括12個振蕩周期,則計數頻率為振蕩頻率的十二分之一。工作于何種方式,取決于脈沖源,當脈沖源為時鐘振蕩器(等間隔脈沖序列)時,由于計數脈沖為一時間基準,脈沖數乘以脈沖間隔就是定時時間,表現為定時功能;當脈沖源為間隔不等的外部脈沖發(fā)生器時,就是外部事件的計數器,表現為計數功能。第四頁,共三十九頁,2022年,8月28日用作計數器時,計數脈沖來自外部輸入引腳T0或T1,當輸入信號發(fā)生一個由1到0的跳變時,計數器加1。在每個機器周期的S5P2期間采樣外部輸入信號,當一個周期的采樣值為高電平、下一個周期的采樣值為低電平時,計數器加1。新的計數值在緊接著檢測到一個跳變后的下一個周期的S3P1期間在寄存器中出現。即在第一個機器周期的S5P2檢測到高電平,在第二個機器周期的S5P2檢測到低電平,在第三個機器周期的S3P1改變計數值。由于識別一個從1到0的跳變要用兩個機器周期,所以最快的計數頻率是振蕩器頻率的二十四分之一。對外部輸入信號的占空比沒有限制,為確保某一給定的電平在變化之前至少被采樣一次,該信號至少保持一個完整的機器周期。第五頁,共三十九頁,2022年,8月28日圖中的兩個模擬開關,前者決定定時/計數器工作狀態(tài):計數還是定時;后者受控制信號的控制,決定脈沖源是否加到計數器輸入端,即決定了加1計數器的開啟與運行。對輸入信號的基本要求>Tp>TpTp為機器周期在實際線路中,這兩個模擬開關由TMOD與TCON的相應位控制。用戶可通過對TMOD和TCON的各位進行寫入或更改操作,從而選擇不同的工作狀態(tài)或啟動工作,并可設置相應的控制條件,即定時/計數器是可編程的。第六頁,共三十九頁,2022年,8月28日16位的加1計數器由兩個8位的特殊功能寄存器THx和TLx組成(x=0或1)。由特殊功能寄存器TMOD控制,可被程控為不同的組合狀態(tài),從而形成定時/計數器的四種工作方式。TMOD、TCON與T0、T1結構框圖微處理器μPTH1TL1TH0TL0TCONTMOD工作方式工作方式第七頁,共三十九頁,2022年,8月28日5.2定時/計數器方式和控制寄存器由結構框圖可以看到,特殊功能寄存器TMOD和TCON用來確定定時/計數器的工作方式,并控制其功能。每當執(zhí)行一條改變TMOD和TCON內容的指令時,所改變的值在下一條指令的第一個機器周期的S1P1期間進入特殊功能寄存器,并立即產生效果。TMOD控制定時/計數器的工作方式;TCON控制定時器T0、T1的啟動和停止計數,并包含了定時器的狀態(tài)。5.2.1定時器工作方式控制寄存器TMOD的格式位76543210GATEC/TM1M0GATEC/TM1M0定時器1定時器0第八頁,共三十九頁,2022年,8月28日GATE:選通控制。當GATE=1時,同時INTx為高電平,且TRx置位時,選通定時器x。當GATE=0時,每當TRx置位時,就選通定時器x。C/T:選擇定時器功能還是計數器功能。該位置位時選擇計數器功能(計數出現在T0或T1引腳上的負跳變);該位清零時選擇定時器功能(計機器周期)。M1M0:這兩位指定定時/計數器的工作方式,可形成四種編碼,對應四種工作方式:M1M0方式說明000TLx低5位與THx中8位構成13位計數器011TLx與THx構成16位計數器102可自動再裝入的8位計數器,當TLx計數溢出時,THx內容自動裝入TLx。113對定時器0,分成兩個8位的計數器;對定時器1,停止計數。第九頁,共三十九頁,2022年,8月28日5.2.2定時器控制寄存器TCON的格式位76543210TF1TR1TF0TR0IE1IT1IE0IT0TF1:定時器1溢出標志位。當定時/計數器1溢出時,由內部硬件置位,申請中斷。當單片機轉向中斷服務程序后,由內部硬件自動清除。TR1:定時器1的運行控制位。由軟件置位/清除來控制定時/計數器1的開啟/關閉。TF0:定時器0溢出標志位。當定時/計數器0溢出時,由內部硬件置位,申請中斷。當單片機進入中斷服務程序后,由內部硬件自動清除。TR0:定時器0的運行控制位。由軟件置位/清除來控制定時/計數器0的開啟/關閉。第十頁,共三十九頁,2022年,8月28日IE1:外部中斷1邊沿觸發(fā)請求標志位。當IT1=0時,每個機器周期的S5P2采樣INT1,若INT1為低電平,將直接觸發(fā)外部中斷。當IT1=1時,當第一個機器周期采樣到INT1為高電平、第二個機器周期采樣到INT1為低電平時,由硬件置位中斷標志IE1,并以此向CPU請求中斷,當CPU響應中斷、轉向中斷服務程序后由硬件清除。IT1:外部中斷1類型控制位??刂仆獠恐袛?是選擇邊沿觸發(fā)還是電平觸發(fā)方式。當IT1=0時,選擇為電平觸發(fā)方式,INT1低電平有效;當IT1=1時,選擇為邊沿觸發(fā)方式,當INT1輸入腳上出現電平由高到低的負跳變時有效。IT1由軟件置位或清除。IE0:外部中斷1邊沿觸發(fā)請求標志位。當IT0=0時,每個機器周期的S5P2采樣INT0,若INT0為低電平,將直接觸發(fā)外部中斷。當IT0=1時,當第一個機器周期采樣到INT0為高電平、第二個機器周期采樣到INT0為低電平時,由硬件置位中斷標志IE0,并以此向CPU請求中斷,當CPU響應中斷、轉向中斷服務程序后由硬件清除。第十一頁,共三十九頁,2022年,8月28日IT0:外部中斷0類型控制位。控制外部中斷0是選擇邊沿觸發(fā)還是電平觸發(fā)方式。當IT0=0時,選擇為電平觸發(fā)方式,INT0低電平有效;當IT0=1時,選擇為邊沿觸發(fā)方式,當INT0輸入腳上出現電平由高到低的負跳變時有效。IT0由軟件置位或清除。由于定時/計數器T0、T1是可編程的,所有在任何一個定時/計數器開始工作之前,必須對其寫入相應的控制字。5.3定時/計數器的工作方式寄存器TMOD中的M1、M0兩位的四種不同取值,導致了THx、TLx的四種不同組合,從而形成定時/計數器的四種不同工作方式。其中前三種工作方式對兩者都是一樣的,方式3對兩者是不同的??梢哉f,只有定時/計數器0有方式3。第十二頁,共三十九頁,2022年,8月28日5.3.1方式0振蕩器÷12TFx中斷Tx端C/T=0C/T=1GATEINTx端TRxTLx(低5位)THx(8位)控制&≥ll當M1M0=00時,定時/計數器被選擇為工作方式0。在此工作方式下,定時/計數器構成一個13位寄存器,由THx的8位與TLx的低5位組成,TLx的高3位未用。第十三頁,共三十九頁,2022年,8月28日當單片機進入中斷服務程序后,再由內部硬件自動清除該標志TFx。在一般情況下,GATE=0,定時/計數器運行控制僅由TRx位的狀態(tài)確定(TRx=1啟動,TRx=0停止)。只有在啟動計數要由外部輸入INTx控制時,才使GATE=1,由框圖可知,GATE=1,TRx=1時,只有INTx引腳輸入高電平,Tx才被允許計數。利用GATE的這一功能,可以很方便的測量脈沖寬度。當TLx的低5位計數溢出時,則向THx進位,THx溢出時,則把其對應的定時/計數器的溢出標志位TFx置位,并以此作為定時/計數器溢出中斷標志。第十四頁,共三十九頁,2022年,8月28日5.3.2方式1振蕩器÷12TFx中斷Tx端C/T=0C/T=1GATEINTx端TRxTLx(8位)THx(8位)控制l&≥l方式1與方式0的差別僅在于計數器的位數不同,方式1為16位的計數器,由THx作為高8位和TLx作為低8位構成。其余和方式0類似。第十五頁,共三十九頁,2022年,8月28日5.3.3方式2振蕩器÷12TFx中斷Tx端C/T=0C/T=1GATEINTx端TRxTLx(8位)THx(8位)控制重新裝入l≥l&定時/計數器構成一個自動再裝入功能的8位計數器。此時由TLx計數,而THx在此方式中作為一個數據緩沖器。當TLx計數溢出時,在置位溢出標志TFx的同時,還自動地將THx中的常數送到TLx,使TLx從剛剛裝入的初值開始重新計數。再裝入后,THx中的內容保持不變。第十六頁,共三十九頁,2022年,8月28日5.3.4方式3T0端C/T=0C/T=1GATEINT0端TR0振蕩器÷12振蕩器÷12TF0中斷TL0(8位)TF1中斷TH0(8位)TR1控制控制l≥l&方式3可使MCS-51單片機增加一個附加的8位定時/計數器,此種方式只適應于定時/計數器0。定時/計數器1處于方式3時,相當于TR1=0,停止計數。第十七頁,共三十九頁,2022年,8月28日定時/計數器0在方式3下,TL0和TH0被作為兩個獨立的計數器。在此方式下,TL0使用了定時器0的所有控制位:C/T、GATE、TR0、INT0和TF0;TH0則被限制為一個定時器,對機器周期計數,同時借用了定時器1的TR1和TF1,即借用了其運行控制位和溢出標志。一般來說,只有當系統(tǒng)需要增加一個額外的8位定時器時,才把定時/計數器0設置為方式3。當定時/計數器0工作于方式3時,由于TH0借用了定時/計數器1的運行控制位和溢出(中斷)標志,此時定時/計數器1雖然可以設置為方式0、方式1和方式2,但是只能用在不需要中斷控制的場合。例如,工作于自動重裝載方式(方式2),作為串行通訊的波特率發(fā)生器使用。第十八頁,共三十九頁,2022年,8月28日5.4定時/計數器的編程舉例定時/計數器的應用編程應注意:⑴正確寫入控制字,即初始化;⑵時間常數的正確計算。定時計數器操作控制次序:①確定工作方式,寫入TMOD定時/計數器工作方式寄存器;②計算定時/計數初值,裝入THx及TLx;③置位TRx以啟動計數;④置位ETx以允許定時/計數器x中斷(若需要,不需要可略);⑤置位EA以使CPU開放中斷,即接收中斷信號。第十九頁,共三十九頁,2022年,8月28日由于定時/計數器以加1方式計數,假設計數值為x,則應裝入定時/計數器的初值為:(n為不同方式下計數器的位數)。當工作于定時狀態(tài)時,由于定時/計數器是計數機器周期的,而機器周期頻率恒定,每個機器周期包括12個振蕩周期,若晶振頻率為6MHz,則:一個機器周期:計數個數為:其中:Tp為機器周期則應裝入的計數初值為:第二十頁,共三十九頁,2022年,8月28日例5-1.要求定時為1mS,晶振頻率為12MHz。解:因為:Tc=x×Tp=1mS所以:對方式0,應裝入的初值為:此時,THx=0E0H(11100XXX),TLx=18H對方式1,應裝入的初值為:此時,THx=0FCH,TLx=18H第二十一頁,共三十九頁,2022年,8月28日例5-2.設定時/計數器T0為定時狀態(tài),工作于方式1,定時時間為2mS,每當2mS到申請中斷,在中斷服務程序中將A的內容左環(huán)移一次,送P1口顯示。已知晶振頻率為12MHz。解答:定時時間為2mS,即:Tc=x×Tp=2mS所以,計數個數為:采用方式1,應裝入的時間常數為:則:TH0=0F8H,TL0=30H第二十二頁,共三十九頁,2022年,8月28日編程如下:ORG 0000HLJMP MAIN ;轉主程序ORG 000BH ;T0中斷服務程序MOV TL0,#30HMOV TH0,#0F8H ;重新送2mS時間常數初值RL A ;(A)左環(huán)移一次MOV P1,A ;送P1口顯示RETMAIN:MOVTMOD,#01H;送控制方式字MOV TL0,#30H ;T0初始化MOV TH0,#0F8HMOV A,#01H ;累加器A置初值SETB TR0 ;啟動T0計數SETB ET0 ;允許T0中斷SETB EA ;CPU開中斷SJMP $ ;等待中斷發(fā)生(無事可做)第二十三頁,共三十九頁,2022年,8月28日例5-3.設定時/計數器T0工作于方式3,TL0、TH0作為兩個獨立的8位定時/計數器,分別產生250S和500S的定時中斷,使P1.1和P1.2產生500S和1000S的方波。設晶振頻率為6MHz。解答:TL0計數個數:250s/2s=125初值:

28-125=131=83HTH0計數個數:500s/2s=250

初值:

28-250=6=06H第二十四頁,共三十九頁,2022年,8月28日編程如下:ORG 0000HLJMP MAIN ;轉主程序ORG 000BH ;定時器0中斷服務子程序入口LJMP TINT0ORG 001BH ;定時器1中斷服務子程序入口LJMP TINT1MAIN:MOVTMOD,#03H;T0工作方式3MOV TL0,#83H ;TL0送時間常數MOV TH0,#06H ;TH0送時間常數SETB TR0 ;啟動定時SETB TR1;等價于MOVTCON,#50HSETB ET0 ;允許中斷SETB ET1;等價于MOVIE,#8AH

SETB EA ;CPU開中斷SJMP $ ;等待第二十五頁,共三十九頁,2022年,8月28日TINT0: MOV TL0,#83H ;定時器0中斷服務子程序 CPL P1.1 RETITINT1: MOV TH0,#06H ;定時器1中斷服務子程序 CPL P1.2 RETI第二十六頁,共三十九頁,2022年,8月28日例5-4.設定時/計數器0工作于方式2,TL0為8位計數器,產生500s定時中斷,在中斷服務程序中將(A)減1,然后送P1口顯示,設晶振為6MHz。編程如下: ORG 0000H AJMP MAIN ;轉主程序 ORG 000BH DEC A ;T0中斷服務子程序 MOV P1,A RETIMAIN:MOV TMOD,#02H ;初始化 MOV TL0,#06H ;送500S時間常數 MOV TH0,#06H SETB TR0 ;啟動T0計數 SETB ET0 ;允許T0中斷 SETB EA ;CPU開中斷 SJMP $第二十七頁,共三十九頁,2022年,8月28日5.5運行中讀定時/計數器值在MCS-51中,隨時可以讀寫計數寄存器的內容,但是讀取時需要特別加以注意;由于不能在同一時刻讀取THx和TLx的內容。如不注意,讀取的計數器有可能出錯。比如先讀(TLx),后讀(THx),由于定時器在不斷運行,讀(THx)前,若恰好產生TLx溢出向THx進位,則讀得的(TLx)完全不對。同樣先讀(THx)再讀(TLx)也可能出錯(同樣問題)。解決錯讀問題的一種方法是:先讀(THx),后讀(TLx),再讀(THx),若2次讀得的(THx)沒有發(fā)生變化,則可確定讀得的內容是正確的,否則再重復上述讀THx、TLx過程,這樣讀得的(THx),(TLx)就是正確的。第二十八頁,共三十九頁,2022年,8月28日下面程序把讀得的TH0、TL0放在R1、R0中:RDTIME: MOV A,TH0 ;讀(TH0) MOV R0,TL0 ;讀(TL0) CJNE A,TH0,RDTIME ;比較2次讀得的(TH0),不同重讀 MOV R1,A RET5.6定時/計數器2只有52子系列單片機擁有定時/計數器2。定時/計數器2是一個具有16位自動重裝載或捕獲能力的定時/計數器,特殊功能寄存器T2CON是它的控制寄存器。第二十九頁,共三十九頁,2022年,8月28日定時/計數器2具有兩種工作方式:定時/計數器方式和波特率發(fā)生器方式。5.6.1定時/計數器方式RCAP2HRCAP2LTH2TL2CINCINCOUTCOUTCP/RL2T2EXEXEN2EXF2中斷置TF2置EXF2TF2振蕩器÷12T2C/T2TR2&&≥l&≥l&第三十頁,共三十九頁,2022年,8月28日用作定時器時,寄存器TH2和TL2對機器周期計數;用作計數器時,外部計數脈沖由T2(P1.0)輸入,工作情況和時序關系與定時/計數器0和1的完全一樣,對外部計數脈沖的要求也與定時/計數器0和1的完全一樣。在定時器和計數器工作方式下,可以通過對T2CON中的控制位CP/RL2的操作來選擇捕獲能力或重裝載能力,TH2和TL2內容的捕獲或自動重裝載通過一對捕獲/重裝載寄存器RCAP2H和RCAP2L來實現,TH2、TL2和RCAP2H、RCAP2L之間接有雙向緩沖器(三態(tài)門)。當CP/RL2=1時,選擇捕獲功能,數據傳送方向為把TH2和TL2中的內容自動裝入RCAP2H和RCAP2L;當CP/RL2=0時,選擇自動重裝載功能,數據傳送方向為把RCAP2H和RCAP2L的數據自動裝入TH2和TL2。第三十一頁,共三十九頁,2022年,8月28日捕獲或自動重裝載發(fā)生在下述情況下:⑴定時器2的寄存器TH2和TL2溢出時:當寄存器TH2和TL2溢出時,如果CP/RL2=0,則打開重裝載的三態(tài)緩沖器,把RCAP2H和RCAP2L的內容自動裝載到TH2和TL2中,同時溢出標志TF2置位為1,申請中斷。⑵當EXEN2=1且T2EX(P1.1)端的信號有負跳變時:當EXEN2=1且T2EX(P1.1)端的信號有負跳變時,根據CP/RL2是1或0,發(fā)生捕獲操作或自動重裝載操作,同時標志EXF2置位,申請中斷。如果定時/計數器2的中斷是被允許的,不管發(fā)生TF2=1還是EXF2=1,CPU都會響應中斷,中斷的入口地址為002BH。響應中斷后,應當用軟件清除中斷標志,以避免無休止地發(fā)生中斷。TF2、EXF2都是直接可尋址位,可采用CLRTF2和CLREXF2指令實現撤消中斷申請的功能。第三十二頁,共三十九頁,2022年,8月28日5.6.2波特率發(fā)生器方式RCAP2HRCAP2LTH2TL2CINCINCOUTCOUTC/T2TR2OSC2T2÷2定時器1溢出SMOD=0SMOD=1"0""1""0""1"÷16RCLKTCLK÷16TXCLOCKRXCLOCKT2EXEXEN2EXF2&&第三十三頁,共三十九頁,2022年,8月28日波特率發(fā)生器用于控制串行口的數據傳輸速率。在T2CON中的RCLK和TCLK兩位用于選擇定時/計數器1或2作為串行通訊的波特率發(fā)生器。RCLK和TCLK兩位的值用來控制2個電子開關的位置。當這兩位為0時,選用定時/計數器1作為波特率發(fā)生器;當這兩位為1時,選用定時/計數器2作為波特率發(fā)生器。其中RCLK選擇串行通訊接收波特率發(fā)生器,TCLK選擇發(fā)送波特率發(fā)生器。當選用定時/計數器2作波特率發(fā)生器時,其溢出脈沖用作串行口的時鐘,時鐘頻率可由內部時鐘決定,也可由外部時鐘決定。第三十四頁,共三十九頁,2022年,8月28日如果C/T=0,選用外部時鐘,時鐘信號由T2(P1.0)端輸入,每當外部脈沖負跳變時,計數器值加1,外部脈沖頻率不能超過振蕩器頻率的1/24。由于溢出時,RCAP2H和RCAP2L的內容自動裝載到TH2和TL2,所以波特率的值還決定于裝載值。當定時/計數器2用作波特率發(fā)生器時,如果EXEN2置位,則T2EX端的信號發(fā)生負跳變時,EXF2將置位,但不會發(fā)生重裝載或捕獲操作,此時T2EX可以作為一個附加的外部中斷源。在波特率工作方式下,TH2、TL2和RCAP2H、RCAP2L的內容不能讀或被修改。第三十五頁,共三十九頁,2022年,8月28日5.6.3定時/計數器2控制寄存器T2CONTR2EXEN2TCLKRCLKEXF2TF2含義0123456

溫馨提示

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

評論

0/150

提交評論