微機原理及應(yīng)用 第6章 MCS-51單片機的定時、計數(shù)器.ppt_第1頁
微機原理及應(yīng)用 第6章 MCS-51單片機的定時、計數(shù)器.ppt_第2頁
微機原理及應(yīng)用 第6章 MCS-51單片機的定時、計數(shù)器.ppt_第3頁
微機原理及應(yīng)用 第6章 MCS-51單片機的定時、計數(shù)器.ppt_第4頁
微機原理及應(yīng)用 第6章 MCS-51單片機的定時、計數(shù)器.ppt_第5頁
已閱讀5頁,還剩28頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第6章 MCS-51單片機的定時/計數(shù)器,復(fù) 習,1、SFR使用的注意事項? 字節(jié)地址、位地址;位定義;區(qū)分控制位和標志位;標志位的清除。 2、中斷的處理過程? 采樣;查詢;響應(yīng);處理;返回。 3、主程序設(shè)計及結(jié)構(gòu)框架? 中斷子程序設(shè)計及結(jié)構(gòu)框架? 4、MCS-51中斷源有哪些?,第6章 MCS-51單片機的定時/計數(shù)器,6.1 定時器的定時與計數(shù)功能 6.2 定時器的有關(guān)特殊功能寄存器 6.3 定時器的四種工作方式 6.4 定時器的應(yīng)用,6.1 定時器的定時與計數(shù)功能,1 定時器的結(jié)構(gòu) 2 定時器的計數(shù)功能 3 定時器的定時功能,1 定時器的結(jié)構(gòu),定時器的實質(zhì)是16位加1計數(shù)器,1 定時器的

2、結(jié)構(gòu),加1計數(shù)器輸入的計數(shù)脈沖有兩個來源,一個是由系統(tǒng)的時鐘振蕩器輸出脈沖經(jīng)12分頻后送來;一個是T0或T1引腳輸入的外部脈沖源。 每來一個脈沖計數(shù)器加1,當加到計數(shù)器為全1時,再輸入一個脈沖就使計數(shù)器回零,且計數(shù)器的溢出使TCON中TF0或TF1置1,向CPU發(fā)出中斷請求(定時/計數(shù)器中斷允許時)。 如果定時/計數(shù)器工作于定時模式,則表示定時時間已到;如果工作于計數(shù)模式,則表示計數(shù)值已滿。 可見,由溢出時計數(shù)器的值減去計數(shù)初值才是加1計數(shù)器的計數(shù)值。,2 定時器的計數(shù)功能,設(shè)置為計數(shù)器模式時。在每個機器周期的S5P2期間采樣T0、T1引腳電平。 當晶振頻率為12MHz時,最高計數(shù)頻率不超過1

3、/2MHz,即計數(shù)脈沖的周期要大于2 s。,3 定時器的定時功能,設(shè)置為定時器模式時:加1計數(shù)器是對內(nèi)部機器周期計數(shù)(1個機器周期等于12個振蕩周期,即計數(shù)頻率為晶振頻率的1/12)。 計數(shù)值N乘以機器周期Tcy就是定時時間t 。,6.2 定時器的有關(guān)寄存器,6.2.1 TCON定時器控制/狀態(tài)寄存器,1)啟動控制位TR0、TR1 =0,停止定時器工作;=1,啟動定時器工作 例:啟動T0:SETBTR0 停止T0:CLRTR0,2)溢出中斷標志位TF0、TF1 定時器溢出時,由硬件置位TFx=1; 若中斷開放,向CPU請求中斷,CPU響應(yīng)Tx中斷后,自動清0 TFx。,若中斷禁止,可用軟件檢測

4、TFx(判跳),必須軟件清0。 WAIT:JBC TF0,NEXT;檢測T0是否溢出,溢出,TF0清0。 SJMPWAIT ;未溢出,繼續(xù)檢測 NEXT: ;處理溢出,JNB TF0, $ ;檢測T0是否溢出,未溢出,繼續(xù)檢測 CLR TF0;溢出,TF0清0. ;處理溢出.,6.2.2 TMOD定時器方式寄存器(89H),2)功能選擇位C/T: =0,定時功能,計數(shù)內(nèi)部機器周期脈沖; =1,計數(shù)功能,計數(shù)引腳T0(T1)輸入的負脈沖。,3)方式選擇位M1、M0:4種工作方式:13/16/8位,1)門控方式選擇位GATE : =0,非門控方式(內(nèi)部啟動): 只要TRx=1,就啟動定時器工作;

5、只要TRx=0,就停止定時器工作。 =1,門控方式(外啟動):只有當TRx=1且引腳INTx=1才啟動定時器。,確定定時器工作方式指令:MOV TMOD,#方式字;字節(jié)訪問 例:設(shè)T0用方式2非門控定時,T1用方式1門控計數(shù)。 MOVTMOD,#,11010010B,6.2.3 定時器的數(shù)據(jù)寄存器 TH1 TL1、TH0 TL08DH 8CH、8BH 8AH,可預(yù)置初值的16位加1計數(shù)器 TH0、TL0、 TH1、TL1 預(yù)置T0初值指令:MOVTH0,#XH MOVTL0,#XL,任何時候都可對它的當前值進行讀/寫操作, 它們都只能字節(jié)尋址。,6.3 定時器的四種工作方式,6.3.1 定時/

6、計數(shù)器的工作方式0 方式0為13位計數(shù),由TL0的低5位(高3位未用)和TH0的8位組成加1計數(shù)器。TL0的低5位溢出時向TH0進位,TH0溢出時,置位TCON中的TF0標志,向CPU發(fā)出中斷請求。,定時器模式時有:Nt/Tcy 計數(shù)初值計算的公式為: 定時器的初值還可以采用計數(shù)個數(shù)直接取補法獲得。 計數(shù)模式時,計數(shù)脈沖是T0引腳上的外部脈沖。,門控位GATE具有特殊的作用。當GATE=0時,經(jīng)反相后使 或門輸出為1,此時僅由TR0控制與門的開啟,與門輸出1 時,控制開關(guān)接通,計數(shù)開始;當GATE=1時,由外中斷引腳信號控制或門的輸出,此時控制與門的開啟由外中斷引腳信號和TR0共同控制。當TR

7、0=1時,外中斷引腳信號引腳的高電平啟動計數(shù),外中斷引腳信號引腳的低電平停止計數(shù)。這種方式常用來測量外中斷引腳上正脈沖的寬度。,6.3.2 定時/計數(shù)器的工作方式1 方式1的計數(shù)位數(shù)是16位,由TL0作為低8位、TH0作為高8位,組成了16位加1計數(shù)器 。,計數(shù)個數(shù)N與計數(shù)初值X的關(guān)系為:,6.3.3 定時/計數(shù)器的工作方式2 方式2為自動重裝初值的8位計數(shù)方式。,工作方式2特別適合于用作較精確的脈沖信號發(fā)生器。如:串行口波特率發(fā)生器的使用,計數(shù)個數(shù)N與計數(shù)初值X的關(guān)系為:,6.3.4 定時/計數(shù)器的工作方式3 方式3只適用于定時/計數(shù)器T0,將T0分成為兩個獨立的8位計數(shù)器TL0和TH0 。

8、,TL0作為定時/計數(shù)器:TL0占用原T0控制位及相關(guān)引腳:其操作和功能與方式0、1基本相同 TH0僅作定時器:TH0占用T1控制位: TR1、TF1及T1中斷源。,6.3.4 定時/計數(shù)器的工作方式3 定時器T0工作于方式3時, T1只能工作在方式0、1、2,計數(shù)溢出時輸出送串行口,此時T1作為串行口波特率發(fā)生器使用。以確定串行通訊的速率。 啟動:設(shè)置好工作方式0、1、2時相當于TR1=1,T1便自動開始運行; 停止:當設(shè)置為工作方式3時相當于TR1=0, T1停止計數(shù)。,6.4 定時器的應(yīng)用,1、定時器的初始化編程 2、定時器的溢出處理編程格式 3、定時器的應(yīng)用舉例,1、定時器初始化編程,

9、使用定時器工作之前,先寫入方式、控制寄存器,確定好定時器工作方式:,MOV TMOD,# 方式字;啟動方式選擇(內(nèi)外共同啟動/內(nèi)啟動) 功能選擇(計數(shù)/定時) 位數(shù)選擇 (8/13/16位) MOV THx,#XH;計算時間常數(shù)X, MOV TLx,#XL ;Tx時間常數(shù)初值裝入數(shù)據(jù)寄存器 , (SETB EA) ;開Tx中斷 (SETB ETx) SETB TRx ;啟動控制Tx定時器(啟動/停止),定時器初始化編程:在主程序中進行,.計算時間常數(shù)X(計算初值),計數(shù)功能:X= 2n -計數(shù)值n:13/16/8 定時功能:X= 2n - t/T t:定時時間s 、T:機器周期s,由于計數(shù)器是

10、加1計數(shù)器,并在益處時產(chǎn)生中斷請求, 因此不能將計數(shù)值送入計數(shù)器作為初值,而應(yīng)送入計數(shù)值的補碼數(shù)作為初值,計數(shù)器運行之前,需要預(yù)先給定初值,.預(yù)置初值,方式0 MOVTHx,#X高8位 MOVTLx,#X低5位,方式1 MOVTHx,#X高8位 MOVTLx,#X低8位,方式2 MOVTHx,#X8位 MOVTLx,#X8位,方式3 MOVTH0,#X8位 MOVTL0,#Y8位,2、 溢出處理編程格式及初值恢復(fù)方式(自動重裝/軟件重裝),1)查詢方式:先查詢定時器溢出標志,再進行溢出處理。 ;定時器初始化 WAIT:JBC TFx,PT ;檢測溢出標志 SJMP WAIT PT:MOVTHx

11、,#XH ;軟件恢復(fù)初值,重裝時間常數(shù) MOVTLx,#XL ;溢出處理 SJMPWAIT,2)中斷方式:初始化后執(zhí)行其他任務(wù),中斷服務(wù)程序中處理溢出 ORG0000H LJMPMAIN ORG000BH(001BH);T0(T1)中斷入口 LJMPPTS MAIN:;初始化后執(zhí)行其他程序 PTS:MOVTHx,#XH;軟件重裝時間常數(shù) MOVTLx,#XL ;溢出中斷服務(wù)程序 RETI,3、定時器的應(yīng)用舉例,【例6-2、3】 :設(shè)fosc=12MHz。由P1.0輸出周期為2ms的等寬度連續(xù)方波,使用T1的方式0、1。,解:每隔1ms改變一次P1.0的輸出狀態(tài)。用T1非門控方式定時。 計算時間

12、常數(shù):方式1:X = 216 - t/T = 216 -1000/1 = FC18H,(1)查詢方式: ORG0000H START:MOVTMOD, #10H;(主程序開始)定時器T1工作方式1 CLRP1.0;設(shè)置方波的起始狀態(tài) MOVTL1, #18H MOVTH1, #0FCH;送初值,保證定時時間為1ms SETBTR1;啟動定時器 LOOP:JNBTF1, $;查詢是否溢出,等待1ms定時到 MOVTL1, #18H;溢出處理 MOVTH1, #0FCH;再送計數(shù)初值,保證定時時間始終為1ms CLRTF1;清溢出標志,以便下次判斷 CPLP1.0;改變P1.0的狀態(tài) SJMPLO

13、OP;產(chǎn)生連續(xù)的方波 END,方式0:X = 213 - t/T = 213 -1000/1 = 1C18H,0000 0000B MOVTL0,#18H MOVTH0,#0E0H 。 MOVTL0,#18H MOVTH0,#0E0H,(2)中斷方式,ORG0000H AJMPSTART;跳轉(zhuǎn)主程序 ORG 001BH LJMPPITO1;跳轉(zhuǎn)中斷服務(wù)程序 ORG 0100H START:MOVSP, #60H;堆棧初始化 MOVTMOD, #10H;(主程序開始)定時器T1工作方式1 MOVTH1, #0FCH;設(shè)置計數(shù)初值 MOVTL1, #18H CLRP1.0;設(shè)置方波的起始狀態(tài) SE

14、TBEA;開中斷 SETBET1 SETBTR1;啟動定時器 SJMP$;等待中斷 PITO1:MOVTL1, #18H MOVTH1, #0FCH;再送計數(shù)初值,保證定時時間始終為1ms CPLP1.0;輸出方波 RETI;中斷返回 END,00000000B MOVTL0,#18H MOVTH0,#0E0H MOVTL0,#18H MOVTH0,#0E0H,解:計算初值:方式2:X = 28 - 100 = 156 = 9CH TMOD初始化: GATE=0 , C/T=1, M1M0=10B,ORG0000H AJMPSTART;轉(zhuǎn)主程序 ORG0100H START:MOVIE, #0

15、0H;(主程序開始)關(guān)中斷 MOVTMOD, #06H;設(shè)置定時器T0方式2計數(shù) MOVTH0, #9CH;設(shè)置計數(shù)初值 MOVTL0, #9CH SETBTR0;啟動計數(shù) LOOP:JBCTF0, LOOP1;查詢計數(shù)是否計滿溢出 SJMPLOOP LOOP1:INCA;累加器加1 SJMPLOOP END,【例6-4】用T0以工作方式2計數(shù),每計100次進行累加器加1操作。,解:計算初值:方式2:X = 28 t(fosc/12)=256-100(6/12)=CEH TMOD初始化: GATE=0 , C/T=0, M1M0=10B,ORG0000H START:MOV TMOD, #02

16、H;定時器T0工作方式2 CLRP1.0;設(shè)置方波的起始狀態(tài) MOVTL0, #0CEH ;送計數(shù)初值, MOVTH0, #0CEH; 保證定時時間始終為100s SETBTR0;啟動定時器 LOOP:JNBTF0, $;等待100s定時到 CLRTF0;清溢出標志,以便下次判斷 CPLP1.0;改變P1.0的狀態(tài) SJMPLOOP;產(chǎn)生連續(xù)的方波 END,【例6-5】用T0以工作方式2產(chǎn)生5kHz的連續(xù)方波,并由P1.0輸出。設(shè)fosc=6MHz,查詢方式。,解:頻率=每秒鐘內(nèi)T0輸入的脈沖數(shù) T0:計數(shù)方式2,T1:定時方式1 計算基準初值:T1定時方式1: X = 216 t(fosc/

17、12) =65536-125000(6/12) =0BDCH TMOD初始化: T1:GATE=0 , C/T=0,M1M0=01B T0:GATE=0 , C/T=1,M1M0=10B,【例6-7】用單片機的定時器設(shè)計一個工頻計,并用二極管以二進制形式顯示所測頻率。設(shè)fosc=6MHz,ORG0000H AJMPMAIN ORG001BH AJMPT_1 ORG0100H MAIN:MOVSP, #60H;堆棧初始化 MOVP1,#00;測量前顯示0 MOVTMOD, #16H; T0計數(shù)方式2,定時器T1定時方式1 MOVTH0, #00H;設(shè)置T0計數(shù)初值 MOVTL0, #00H MO

18、VTH1, #0BH;設(shè)置T1定時初值125ms MOVTL1, #0DCH MOVR3,#8;設(shè)置軟件計數(shù)器 SETBEA;開中斷 SETBET1 ORLTCON,#0101000B;同時啟動定時器T1和計數(shù)器T0 SJMP$;等待中斷,T_1:DJNZR3,NEXT;1s時間未到則中斷返回,繼續(xù)定時 ANLTCON,#10001111B;1s定時到,同時關(guān)閉T1、T0 MOVA,TL0;讀出頻率值到A CPLA;取反,低電平點亮二極管 MOVP1,A;送P1口進行顯示 MOVTH0, #00H;重新設(shè)置T0計數(shù)初值 MOVTL0, #00H MOVTH1, #0BH;重新設(shè)置T1定時初值1

19、25ms MOVTL1, #0DCH MOVR3,#8;重新設(shè)置軟件計數(shù)器 ORLTCON,#0101000B;同時啟動定時器T1和計數(shù)器T0 RETI;中斷返回 EXIT:MOVTH1, #0BH; 1s未到,重新設(shè)置T1定時初值125ms MOVTL1, #0DCH RETI;中斷返回 END,解: INT1引腳輸入被檢測信號,記錄在正脈沖的時間內(nèi)包含 機器脈沖個數(shù)。設(shè)fosc=12MHz,使用門控位,定時方式1 1)設(shè)脈寬小于65.5ms 等待查詢INT1,正脈沖過后,讀出TH1TL1,送給R3R2。,START:MOV TMOD,#90H MOV TL1,#0H MOV TH1,#0H WAIT1:JBP3.3,WAIT1 SETB TR1 WAIT2 :JNBP3.3,WAIT2 WAIT3 : JBP3.3,WAIT3 CLRTR1 MOVR2,TL1 MOVR3,TH1 ,門控方式測量正脈沖寬度,2)設(shè)脈寬大于65.5ms,中斷方式記錄TH1TL1溢出中斷次數(shù)。,計算脈寬的子程序的計算式如下: 脈寬t = (R4 216 + R3 R2 ) T(T為機器周期),ORG 0000H AJMP MAIN ORG 001BH INCR4 ;記錄T1溢出次數(shù) RETI ORG 0100H MAIN:MO

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論