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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

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

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

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

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

10、加1計(jì)數(shù)器,并在益處時(shí)產(chǎn)生中斷請(qǐng)求, 因此不能將計(jì)數(shù)值送入計(jì)數(shù)器作為初值,而應(yīng)送入計(jì)數(shù)值的補(bǔ)碼數(shù)作為初值,計(jì)數(shù)器運(yùn)行之前,需要預(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ù)方式(自動(dòng)重裝/軟件重裝),1)查詢方式:先查詢定時(shí)器溢出標(biāo)志,再進(jìn)行溢出處理。 ;定時(shí)器初始化 WAIT:JBC TFx,PT ;檢測(cè)溢出標(biāo)志 SJMP WAIT PT:MOVTHx

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

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

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

15、0H;(主程序開(kāi)始)關(guān)中斷 MOVTMOD, #06H;設(shè)置定時(shí)器T0方式2計(jì)數(shù) MOVTH0, #9CH;設(shè)置計(jì)數(shù)初值 MOVTL0, #9CH SETBTR0;啟動(dòng)計(jì)數(shù) LOOP:JBCTF0, LOOP1;查詢計(jì)數(shù)是否計(jì)滿溢出 SJMPLOOP LOOP1:INCA;累加器加1 SJMPLOOP END,【例6-4】用T0以工作方式2計(jì)數(shù),每計(jì)100次進(jìn)行累加器加1操作。,解:計(jì)算初值:方式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;定時(shí)器T0工作方式2 CLRP1.0;設(shè)置方波的起始狀態(tài) MOVTL0, #0CEH ;送計(jì)數(shù)初值, MOVTH0, #0CEH; 保證定時(shí)時(shí)間始終為100s SETBTR0;啟動(dòng)定時(shí)器 LOOP:JNBTF0, $;等待100s定時(shí)到 CLRTF0;清溢出標(biāo)志,以便下次判斷 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:計(jì)數(shù)方式2,T1:定時(shí)方式1 計(jì)算基準(zhǔn)初值:T1定時(shí)方式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】用單片機(jī)的定時(shí)器設(shè)計(jì)一個(gè)工頻計(jì),并用二極管以二進(jìn)制形式顯示所測(cè)頻率。設(shè)fosc=6MHz,ORG0000H AJMPMAIN ORG001BH AJMPT_1 ORG0100H MAIN:MOVSP, #60H;堆棧初始化 MOVP1,#00;測(cè)量前顯示0 MOVTMOD, #16H; T0計(jì)數(shù)方式2,定時(shí)器T1定時(shí)方式1 MOVTH0, #00H;設(shè)置T0計(jì)數(shù)初值 MOVTL0, #00H MO

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

19、25ms MOVTL1, #0DCH MOVR3,#8;重新設(shè)置軟件計(jì)數(shù)器 ORLTCON,#0101000B;同時(shí)啟動(dòng)定時(shí)器T1和計(jì)數(shù)器T0 RETI;中斷返回 EXIT:MOVTH1, #0BH; 1s未到,重新設(shè)置T1定時(shí)初值125ms MOVTL1, #0DCH RETI;中斷返回 END,解: INT1引腳輸入被檢測(cè)信號(hào),記錄在正脈沖的時(shí)間內(nèi)包含 機(jī)器脈沖個(gè)數(shù)。設(shè)fosc=12MHz,使用門(mén)控位,定時(shí)方式1 1)設(shè)脈寬小于65.5ms 等待查詢INT1,正脈沖過(guò)后,讀出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 ,門(mén)控方式測(cè)量正脈沖寬度,2)設(shè)脈寬大于65.5ms,中斷方式記錄TH1TL1溢出中斷次數(shù)。,計(jì)算脈寬的子程序的計(jì)算式如下: 脈寬t = (R4 216 + R3 R2 ) T(T為機(jī)器周期),ORG 0000H AJMP MAIN ORG 001BH INCR4 ;記錄T1溢出次數(shù) RETI ORG 0100H MAIN:MO

溫馨提示

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

評(píng)論

0/150

提交評(píng)論