單片微型計(jì)算機(jī)原理與接口技術(shù)(第二版):第六章單片微機(jī)的定時(shí)器計(jì)數(shù)器原理及應(yīng)用_第1頁
單片微型計(jì)算機(jī)原理與接口技術(shù)(第二版):第六章單片微機(jī)的定時(shí)器計(jì)數(shù)器原理及應(yīng)用_第2頁
單片微型計(jì)算機(jī)原理與接口技術(shù)(第二版):第六章單片微機(jī)的定時(shí)器計(jì)數(shù)器原理及應(yīng)用_第3頁
單片微型計(jì)算機(jī)原理與接口技術(shù)(第二版):第六章單片微機(jī)的定時(shí)器計(jì)數(shù)器原理及應(yīng)用_第4頁
單片微型計(jì)算機(jī)原理與接口技術(shù)(第二版):第六章單片微機(jī)的定時(shí)器計(jì)數(shù)器原理及應(yīng)用_第5頁
已閱讀5頁,還剩87頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、普通高等教育“十一五”國(guó)家級(jí)規(guī)劃教材 單片微型計(jì)算機(jī)原理與接口技術(shù) (第二版) 高鋒 編著 科學(xué)出版社 北京,第六章 單片微機(jī)的定時(shí)器/計(jì)數(shù)器原理及應(yīng)用,定時(shí)或計(jì)數(shù): 1硬件法 定時(shí)功能完全由硬件電路完成,不占用CPU時(shí)間。 2軟件法 軟件定時(shí)是執(zhí)行一段循環(huán)程序來進(jìn)行時(shí)間延時(shí)。 犧牲了CPU的時(shí)間,6-1 概述,3可編程定時(shí)器計(jì)數(shù)器 通過軟件編程來實(shí)現(xiàn)定時(shí)時(shí)間的改變,通過中斷或查詢方法來完成定時(shí)功能或計(jì)數(shù)功能。 80C51包含有兩個(gè)16位的定時(shí)器計(jì)數(shù)器:T0和T1;80C52包含有三個(gè)16位的定時(shí)器計(jì)數(shù)器:T0、T1和T2;在80C51系列的部分產(chǎn)品(如Philips公司的80C552)中,還

2、包含有作看門狗的8位定時(shí)器T3。 定時(shí)器計(jì)數(shù)器的核心是一個(gè)加1計(jì)數(shù)器其基本功能是計(jì)數(shù)加1,計(jì)數(shù):是對(duì)單片微機(jī)的T0、T1 或T2引腳上輸入的一個(gè)1到0的跳變進(jìn)行計(jì)數(shù)增l。 定時(shí):是對(duì)單片微機(jī)內(nèi)部的機(jī)器周期進(jìn)行計(jì)數(shù),從而得到定時(shí)。 波特率發(fā)生器:80C51的定時(shí)器/計(jì)數(shù)器還可用作串行接口的波特率發(fā)生器,T0、T1 的內(nèi)部結(jié)構(gòu)簡(jiǎn)圖示于圖61中。 T0、T1由以下幾部分組成: 計(jì)數(shù)器TH0、TL0和TH1、TL1; 特殊功能寄存器TMOD、TCON; 時(shí)鐘分頻器; 輸入引腳T0、T1,6.2 定時(shí)器計(jì)數(shù)器T0、T1,T0、T1 的方式寄存器TMOD TMOD的格式如下: 低4位定義T0 高4位定義T

3、1,6.2.1 與定時(shí)器計(jì)數(shù)器T0、T1有關(guān)的特殊功能寄存器,D7 D6 D5 D4 D3 D2 D1 D0,T1,T0,GATE門控位 GATE1時(shí),由外部中斷引腳INT0、INT1和TR0、TR1共同來啟動(dòng)定時(shí)器。當(dāng)INT0引腳為高電平時(shí),TR0置位啟動(dòng)定時(shí)器T0;當(dāng)引腳INT1為高電平時(shí),TR1置位,啟動(dòng)定時(shí)器T1。 GATE0時(shí),僅由TR0和TR1置位來啟動(dòng)定時(shí)器T0和T1,CT:功能選擇位 C/T1時(shí),選擇計(jì)數(shù)功能; C/T0時(shí),選擇定時(shí)功能。 定時(shí)器,設(shè)置C/T0 計(jì)數(shù)輸入信號(hào)是內(nèi)部時(shí)鐘脈沖,每個(gè)機(jī)器周期使計(jì)數(shù)器的值增1。計(jì)數(shù)速率為振蕩周期的112。當(dāng)采用12MHz的晶體時(shí),計(jì)數(shù)速

4、率為1MHz。 定時(shí)器的定時(shí)時(shí)間,與系統(tǒng)的振蕩頻率fosc、計(jì)數(shù)器的長(zhǎng)度和初始值等有關(guān),計(jì)數(shù)器,設(shè)置C/T1 通過引腳T0和T1對(duì)外部信號(hào)進(jìn)行計(jì)數(shù)。在每個(gè)機(jī)器周期的S5P2期間,CPU采樣引腳的輸入電平。若前一機(jī)器周期采樣值為1,下一機(jī)器周期采樣值為0,則計(jì)數(shù)器增1,M1、M0:工作方式選擇位。 有4種工作方式,如表61所示。 定時(shí)器計(jì)數(shù)器T0、T1 的控制寄存器TCON,TF1:T1的溢出標(biāo)志。 T1溢出時(shí),該位由內(nèi)部硬件置位。若中斷開放,即響應(yīng)中斷,進(jìn)入中斷服務(wù)程序后,由硬件自動(dòng)清0;若中斷禁止,可用于判跳,用軟件清0。 TR1:T1的運(yùn)行控制位。 用軟件控制,置 l時(shí),啟動(dòng) T1;清0時(shí)

5、,停止 T1,TF0:T0的溢出標(biāo)志。 T0溢出時(shí),該位由內(nèi)部硬件置位。 中斷開放,即響應(yīng)中斷,進(jìn)入中斷服務(wù)程序后,由硬件自動(dòng)清0; 中斷禁止,可用于判跳,用軟件清0。 TR0:T0的運(yùn)行控制位。 用軟件控制,置1時(shí),啟動(dòng)T0;清 0時(shí),停止 T0,IE1:外部中斷1下降沿觸發(fā)標(biāo)志位。 IE0:外部中斷0下降沿觸發(fā)標(biāo)志位。 IT1:外部中斷1觸發(fā)類型選擇位。 IT0:外部中斷0觸發(fā)類型選擇位。 復(fù)位后,TCON的所有位均清0。T0和T1均是關(guān)中斷的。 T0、T1 的數(shù)據(jù)寄存器 由TH1、TL1和TH0、TL0寄存器所組成。 復(fù)位后,這4個(gè)寄存器全部清零,定時(shí)器/計(jì)數(shù)器中斷 中斷允許寄存器IE

6、EA:中斷允許總控制位 ET0、ET1、ET2:T0、T1和T2的中斷允許控制位。 某位=0,則禁止對(duì)應(yīng)定時(shí)器/計(jì)數(shù)器的中斷。 某位=1,則允許對(duì)應(yīng)定時(shí)器/計(jì)數(shù)器的中斷。 中斷矢量 定時(shí)器T0:000BH 定時(shí)器T1:001BH 定時(shí)器T2:002BH,中斷優(yōu)先級(jí)寄存器IP PT0位、PT1位、PT2位-T0、T1和T2中斷優(yōu)先級(jí)控制位。 某位為0,則相應(yīng)的定時(shí)器/計(jì)數(shù)器的中斷為低優(yōu)先級(jí); 某位為1,則相應(yīng)的定時(shí)器/計(jì)數(shù)器的中斷為高優(yōu)先級(jí),T0可選擇4種不同的工作方式,而T1只具有3種工作方式(即方式0、方式1和方式2)。 方式013位定時(shí)器/計(jì)數(shù)器 TMOD中的M10、M00。 方式0時(shí)的結(jié)

7、構(gòu)如圖62所示。計(jì)數(shù)寄存器由13位組成,即THx高8位(作計(jì)數(shù)器)和TLx的低5位(32分頻的定標(biāo)器)構(gòu)成。計(jì)數(shù)時(shí),TLx的低5位溢出后向THx進(jìn)位,THx溢出后將TFx置位,并向CPU申請(qǐng)中斷。 從圖62中可看到: C/T位的電平為0或1,用來設(shè)定是作定時(shí)器或計(jì)數(shù)器,6.2.2 定時(shí)器計(jì)數(shù)器T0、T1 的工作方式,門控位GATE可用作對(duì)INTx引腳上的高電平時(shí)間進(jìn)行計(jì)量。由圖62上可看出, 當(dāng)GATE0時(shí),A點(diǎn)為高電平,定時(shí)器計(jì)數(shù)器的啟動(dòng)停止由 TRx決定。TRx1,定時(shí)器計(jì)數(shù)器啟動(dòng);TRx0,定時(shí)器計(jì)數(shù)器停止。 當(dāng)GATE1時(shí),A點(diǎn)的電位由INTx決定,因而B點(diǎn)的電位就由TRx和INTx決

8、定,即定時(shí)器計(jì)數(shù)器的啟動(dòng)停止由TRx和INTx兩個(gè)條件決定。 計(jì)數(shù)溢出時(shí),TFx置位。如果中斷允許,CPU響應(yīng)中斷并轉(zhuǎn)入中斷服務(wù)程序,由內(nèi)部硬件清TFx。TFx也可以由程序查詢和清零,方式116位定時(shí)器/計(jì)數(shù)器 TMOD中的M10、M0l。 方式1時(shí),T0、T1的邏輯結(jié)構(gòu)如圖63所示。 計(jì)數(shù)時(shí),TLx溢出后向THx進(jìn)位,THx溢出后將TFx置位,如果中斷允許,CPU響應(yīng)中斷并轉(zhuǎn)入中斷服務(wù)程序,由內(nèi)部硬件清TFx。TFx也可以由程序查詢和清零,方式2定時(shí)常數(shù)自動(dòng)重裝載的8位定時(shí)器/計(jì)數(shù)器 TMOD中的M11、M00。 將16位計(jì)數(shù)寄存器分為兩個(gè)8位寄存器,組成一個(gè)可重載的8位計(jì)數(shù)寄存器。 方式2

9、時(shí)定時(shí)器/計(jì)數(shù)器T0、T1的邏輯結(jié)構(gòu)如圖64所示。 在方式2中,TLx作為8位計(jì)數(shù)寄存器,THx作為8位計(jì)數(shù)常數(shù)寄存器,當(dāng)TLx計(jì)數(shù)溢出時(shí),將TFx置位,并向CPU申請(qǐng)中斷;將THx的內(nèi)容重新裝入TLx中,繼續(xù)計(jì)數(shù)。 重新裝入不影響THx的內(nèi)容。 方式2適合于作為串行口波特率發(fā)生器使用,方式3 TMOD中的M1l、M01。 將T0分為一個(gè)8位定時(shí)器計(jì)數(shù)器TL0和一個(gè) 8位定時(shí)器TH0 。T1停止計(jì)數(shù)。 方式3時(shí)T0、T1邏輯結(jié)構(gòu)分別如圖65、圖66,工作方式3下的定時(shí)器/計(jì)數(shù)器T0 方式3時(shí),T0的結(jié)構(gòu)見圖65 所示。 TL0:8位定時(shí)器計(jì)數(shù)器,它占用了T0的GATE、INT0、啟動(dòng)停止控制位

10、TR0、T0引腳 以及計(jì)數(shù)溢出標(biāo)志位TF0和T0的中斷矢量等。 TH0:作為8位定時(shí)器用,此時(shí)的外部引腳T0已為定時(shí)器計(jì)數(shù)器TL0所占用。這時(shí)它占用了定時(shí)器計(jì)數(shù)器T1的啟動(dòng)停止控制位TR1、計(jì)數(shù)溢出標(biāo)志位TF1及T1中斷矢量(地址為001BH),工作方式3下的定時(shí)器/計(jì)數(shù)器T1 T1的結(jié)構(gòu)如圖66所示, T1只可選方式0、1或2。作串行口波特率發(fā)生器時(shí),T1的計(jì)數(shù)輸出直接去串行口,只需設(shè)置好工作方式,串行口波特率發(fā)生器自動(dòng)開始運(yùn)行,如要停止工作,只需向T1送一個(gè)設(shè)為工作方式3的控制字即可,80C52中的T2是一個(gè)16位的、具有自動(dòng)重裝載和捕獲能力的定時(shí)器計(jì)數(shù)器。在T2的內(nèi)部,除了兩個(gè)8位計(jì)數(shù)器

11、TL2、TH2和控制寄存器T2CON及T2MOD之外,還設(shè)置有捕獲寄存器RCAP2L(低字節(jié))和RCAP2H(高字節(jié))。 T2的計(jì)數(shù)脈沖源可以有兩個(gè):一個(gè)是內(nèi)部機(jī)器周期,另一個(gè)是由T2(P10)端輸入的外部計(jì)數(shù)脈沖。 T2有3種工作方式:自動(dòng)重裝載、搏獲和波特率發(fā)生器方式,由T2CON中有關(guān)位決定。 輸入引腳T2是外部計(jì)數(shù)脈沖輸入端;輸入引腳T2EX是外部控制信號(hào)輸入端,6.3 定時(shí)器計(jì)數(shù)器T2,控制寄存器 T2CON,6.3.1 T2中的特殊功能寄存器,TF2T2 溢出標(biāo)志 定時(shí)器T2溢出時(shí)置位,并申請(qǐng)中斷。只能靠軟件清除。但在波特率發(fā)生器方式下,也即RCLK1或TCLK1時(shí),定時(shí)器溢出不對(duì)

12、TF2置位。 EXF2T2外部標(biāo)志 當(dāng)EXEN21,且T2EX引腳上出現(xiàn)負(fù)跳變而造成捕獲或重裝載時(shí)EXF2置位,申請(qǐng)中斷。若已允許T2中斷,CPU將響應(yīng)中斷,轉(zhuǎn)向中斷服務(wù)程序。EXF2要靠軟件來清除,RCLK:接收時(shí)鐘標(biāo)志。 軟件置位或清除,用以選擇T2或T1作串行口接收波特率發(fā)生器。RCLK1時(shí),用T2溢出脈沖作為串行口的接收時(shí)鐘;RCLK0時(shí),用T1的溢出脈沖作接收時(shí)鐘。 TCLK:發(fā)送時(shí)鐘標(biāo)志。 軟件置位或清除,用以選擇T2或T1作串行口發(fā)送波特率發(fā)生器。TCLKl時(shí),用T2溢出脈沖作為串行口的發(fā)送時(shí)鐘;TCLK0時(shí),用T1的溢出脈沖作發(fā)送時(shí)鐘。 EXEN2:T2外部允許標(biāo)志,軟件設(shè)置或

13、清除,以允許或禁止用外部信號(hào)來觸發(fā)捕獲或重裝載操作。 當(dāng)EXEN2l時(shí),若T2未用作串行口的波特率發(fā)生器,則在T2EX端出現(xiàn)的信號(hào)負(fù)跳變時(shí),將造成T2捕獲或重裝載,并置EXF2標(biāo)志為 1,請(qǐng)求中斷。 EXEN20時(shí),T2EX端的外部信號(hào)不起作用。 TR2T2運(yùn)行控制位。 軟件設(shè)置或清除,TR21,啟動(dòng)T2,否則停止,C/T2:T2的定時(shí)器方式或計(jì)數(shù)器方式選擇位。 C/T20時(shí),選擇定時(shí)器工作方式。TH2和TL2對(duì)機(jī)器周期進(jìn)行計(jì)數(shù)。每個(gè)機(jī)器周期使TL2寄存器的值增1。計(jì)數(shù)脈沖的頻率為112振蕩器頻率。 CT21時(shí),選擇計(jì)數(shù)器工作方式,下降沿觸發(fā)。計(jì)數(shù)脈沖自T2引腳輸入,TH2和TL2作外部信號(hào)脈

14、沖計(jì)數(shù)器用,每當(dāng)外部脈沖負(fù)跳變時(shí),計(jì)數(shù)器值增1,CPRL2:捕獲重裝載標(biāo)志。 CPRL2l選擇捕獲功能,這時(shí)若EXEN21,且T2EX端的信號(hào)負(fù)跳變時(shí),發(fā)生捕獲操作。 CPRL20,選擇重裝載功能,這時(shí)若T2溢出或在EXEN21條件下 T2EX端信號(hào)負(fù)跳變,都會(huì)造成自動(dòng)重裝載操作。當(dāng)RCLKl或TCLKl時(shí),CPRL2控制位不起作用,T2 被強(qiáng)制工作于重裝載方式。重裝載發(fā)生于T2溢出時(shí),常用來作波特率發(fā)生器,方式控制寄存器T2MOD,T2OE:T2輸出允許位。 當(dāng)T2OE1時(shí),允許時(shí)鐘輸出至T2引腳。 僅對(duì)80C5480C58有定義。 DCEN:向下計(jì)數(shù)允許位 DCEN=1, T2向下(減)計(jì)

15、數(shù) DCEN=0, T2向上(加)計(jì)數(shù),數(shù)據(jù)寄存器:TH2、TL2 T2有一個(gè)16位的數(shù)據(jù)寄存器,是由高8位寄存器TH2和低8位寄存器TL2所組成。它們都只能字節(jié)尋址,相應(yīng)的字節(jié)地址為CDH和CCH。 復(fù)位后,這兩個(gè)寄存器全部清零,捕獲寄存器:RCAP2H、RCAP2L T2中的捕獲寄存器是一個(gè)16位的數(shù)據(jù)寄存器,由高8位寄存器RCAP2H和低8 位寄存器RCAP2L所組成,相應(yīng)的字節(jié)地址為CBH和CAH。 捕獲寄存器RCAP2H和RCAP2L,用于捕獲計(jì)數(shù)器TL2、TH2的計(jì)數(shù)狀態(tài),或用來預(yù)置計(jì)數(shù)初值的。TH2、TL2和 RCAP2H、RCAP2L之間接有雙向緩沖器(三態(tài)門)。 復(fù)位后,兩個(gè)

16、寄存器全部清零,T2的工作方式用控制位CPRL2(T2CON0)和RCLKTCLK來選擇。T2有3種工作方式,如表62所示:捕獲方式、自動(dòng)重裝載方式和波特率發(fā)生器方式。 捕獲方式 在一定條件下,自動(dòng)將計(jì)數(shù)器TH2和TL2的數(shù)據(jù)讀入捕獲寄存器RCAP2H和RCAP2L,亦即TH2和TL2內(nèi)容的捕獲是通過捕獲寄存器RCAP2H和RCAP2L來實(shí)現(xiàn)的。其工作原理可參見圖67。 當(dāng)CPRL2l時(shí),選擇捕獲方式,6.3.2 定時(shí)器計(jì)數(shù)器T2的工作方式,捕獲操作發(fā)生于下述兩種情況下: (1)寄存器TH2和TL2溢出時(shí),打開重裝載三態(tài)緩沖器,把TH2和TL2的內(nèi)容自動(dòng)讀入到捕獲寄存器RCAP2H和RCAP2

17、L中。同時(shí),溢出標(biāo)志TF2置1,申請(qǐng)中斷。 當(dāng) EXEN2l且 T2EX(P11)端的信號(hào)有負(fù)跳變時(shí),將發(fā)生捕獲操作。同時(shí)標(biāo)志EXF2置1,申請(qǐng)中斷。 若T2的中斷是被允許的,則無論發(fā)生TF2l還是EXF2l,CPU都會(huì)響應(yīng)中斷。響應(yīng)中斷后,應(yīng)用軟件清除中斷申請(qǐng),自動(dòng)重裝載方式 在一定條件下,自動(dòng)地將捕獲寄存器RCAP2H和RCAP2L的數(shù)據(jù)裝入計(jì)數(shù)器TH2和TL2中。 捕獲寄存器RCAP2H和RCAP2L在這里起預(yù)置計(jì)數(shù)初值的功能。對(duì)8XC52,其工作原理可參見圖68。 當(dāng)CPRL20時(shí),選擇自動(dòng)重裝載方式。 若T2的中斷是被允許的,則無論發(fā)生TF21還是EXF21,CPU都會(huì)響應(yīng)中斷,此中

18、斷向量的地址為002BH。響應(yīng)中斷后,應(yīng)用軟件撤除中斷申請(qǐng)。TF2 和EXF2都是直接可尋址位,可采用CLR TF2和CLR EXF2指令實(shí)現(xiàn)撤除中斷申請(qǐng)的功能,波特率發(fā)生器方式 當(dāng) T2CON中 RCLK十TCLK 1,其溢出脈沖用做串行口的時(shí)鐘。 T2的波特率發(fā)生器方式下的結(jié)構(gòu)圖示于圖69中。 RCLK選擇串行通信接收波特率發(fā)生器,TCLK選擇發(fā)送波特率發(fā)生器,發(fā)送和接收的波特率可以不同。 T2的輸入時(shí)鐘可由內(nèi)部時(shí)鐘決定,也可由外部脈沖決定。 若CT20,選用內(nèi)部時(shí)鐘,對(duì)機(jī)器周期計(jì)數(shù),計(jì)數(shù)脈沖的頻率為112振蕩器頻率. 若C/T21,選用外部脈沖,該脈沖由T2端輸入,每當(dāng)外部脈沖負(fù)跳變時(shí),

19、計(jì)數(shù)器值增l。外部脈沖頻率不超過振蕩器頻率的l24,由于脈沖溢出時(shí),RCAP2H和RCAP2L的內(nèi)容會(huì)自動(dòng)裝載到TH2和TL2中,故波特率的值還決定于RCAP2H和RCAP2L裝載初值。 RCLKTCLK還用于選擇T1還是T2作串行通信的波特率發(fā)生器。由圖69可看出,這兩位的值用來控制兩個(gè)電子開關(guān)的位置。值為0時(shí),選用T1做波特率發(fā)生器;值為1時(shí),選用T2做波特率發(fā)生器。 當(dāng)T2用做波特率發(fā)生器時(shí),TH2的溢出不使TF2置位,不產(chǎn)生中斷。因而,當(dāng)T2用做波特率發(fā)生器時(shí),沒有必要禁止中斷。 當(dāng)T2用做波特率發(fā)生器時(shí),若EXEN2置1,則T2EX端的信號(hào)產(chǎn)生負(fù)跳變時(shí),EXF2將置1,但不會(huì)發(fā)生重裝

20、載或捕獲操作。這時(shí),T2EX可以作為一個(gè)附加的外部中斷源,T3俗稱看門狗(watchdog),它的作用是強(qiáng)迫單片微機(jī)進(jìn)入復(fù)位狀態(tài),使之從硬件或軟件故障中解脫出來。在實(shí)際應(yīng)用中,由于現(xiàn)場(chǎng)的各種干擾或者程序設(shè)計(jì)錯(cuò)誤,可能使單片微機(jī)的程序進(jìn)入了“ 死循環(huán)” 或“ 非程序區(qū)”(如表格數(shù)據(jù)區(qū)) 之后,在一個(gè)設(shè)定的時(shí)間內(nèi),假如用戶程序沒有重裝T3,監(jiān)視電路將產(chǎn)生一個(gè)系統(tǒng)復(fù)位信號(hào),強(qiáng)迫單片微機(jī)退出“ 死循環(huán)” 或“ 非程序區(qū)” ,重新進(jìn)行“ 冷啟動(dòng)” 或“ 熱啟動(dòng)” 。 在飛利浦80C552中,T3由一個(gè)11位的分頻器和8位定時(shí)器T3組成,如圖6一10所示,6.4 監(jiān)視定時(shí)器(看門狗)T3,預(yù)分頻器輸入為晶

21、振1/12的信號(hào),晶振為12MHz時(shí),輸入為1MHz,而8位定時(shí)器T3每隔時(shí)間t加1: t122048/fosc 當(dāng)晶振為12MHz時(shí),t為2.048ms。 若8位定時(shí)器溢出,則產(chǎn)生一個(gè)尖脈沖,它將復(fù)位8C552,同時(shí)在RST引腳上也將產(chǎn)生1個(gè)正的復(fù)位尖脈沖。T3由外部引腳EW和電源控制寄存器中的PCON4(WLE)和PCONl(PD)控制。 EW:看門狗定時(shí)器允許,低電平有效。 EW0時(shí),允許看門狗定時(shí)器,禁止掉電方式; EW1時(shí)禁止看門狗定時(shí)器,允許掉電方式,WLE :看門狗定時(shí)器允許重裝標(biāo)志。 若WLE置位,定時(shí)器T3只能被軟件裝入,裝入后WLE自動(dòng)清除。 T3的重裝和溢出,產(chǎn)生復(fù)位的時(shí)

22、間間隔,由裝入T3的值決定,對(duì)于8C552,其監(jiān)視間隔可編程為2.048ms2.048255ms。 T3的工作過程:在T3溢出時(shí),復(fù)位8XC552,并產(chǎn)生復(fù)位脈沖輸出至復(fù)位引腳RST。為防止系統(tǒng)復(fù)位,必須在定時(shí)器T3溢出前,通過軟件對(duì)其進(jìn)行重裝。如果發(fā)生軟件或硬件故障,將使軟件對(duì)定時(shí)器T3重裝失敗,從而T3溢出導(dǎo)致復(fù)位信號(hào)的產(chǎn)生,首先要確定系統(tǒng)能在不正常狀態(tài)下維持多久,這段時(shí)間就設(shè)定為監(jiān)視定時(shí)器的最大間隔時(shí)間。 T3是加1計(jì)數(shù)器,T3中裝入0,則監(jiān)視時(shí)間間隔最長(zhǎng),裝入值為FFH時(shí),監(jiān)視時(shí)間間隔最短,例:watchdog使用的一段程序如下: T3 EQU 0FFH ;定時(shí)器T3的地址 PCON

23、EQU 87H ;電源控制寄存器PCON的地址 WATCH_INTV EQU 156 ;看門狗的時(shí)間間隔(2.048100ms) 在用戶程序中對(duì)看門狗需要重新裝入的地方,插入: LCALLWATCHDOG;調(diào)用看門狗服務(wù)子程序 WATCHDOG:ORL PCON,10H ;允許定時(shí)器T3重裝 MOV T3,WATCHINTV ;裝載定時(shí)器T3 RET,定時(shí)器計(jì)數(shù)器溢出率的計(jì)算 定時(shí)器計(jì)數(shù)器運(yùn)行前,在數(shù)據(jù)寄存器中預(yù)先置入的常數(shù),稱為定時(shí)常數(shù)或計(jì)數(shù)常數(shù)TC。由于計(jì)數(shù)器是加 1(向上)計(jì)數(shù)的,故而預(yù)先置入的常數(shù)均應(yīng)為補(bǔ)碼。 其中: t:定時(shí)時(shí)間。 Tc:機(jī)器周期。 Fosc:晶體振蕩器頻率。 L:計(jì)

24、數(shù)器的長(zhǎng)度,6.5 定時(shí)器/計(jì)數(shù)器的應(yīng)用編程 6.5.1 定時(shí)器的應(yīng)用,T0及T1: 方式0 L=13 2138 192 方式1 L16 21665 536 方式2 L8 28256 TC:定時(shí)器計(jì)數(shù)器初值,即定時(shí)常數(shù)或計(jì)數(shù)常數(shù)。 定時(shí)時(shí)間的倒數(shù)即為溢出率,即,根據(jù)要求的定時(shí)時(shí)間t、設(shè)定的定時(shí)器工作方式(確定L) 及晶體振蕩頻率fosc,可計(jì)算出TC值(十進(jìn)制數(shù)),再將其轉(zhuǎn)換成二進(jìn)制數(shù)TCB,然后再分別送入THi、TLi,對(duì)于T0、T1: 方式0時(shí):TCB=TCHTCL,TCH:高8位,TCL:低5位 MOV THi,TCH;送高8位 MOV TLi,TCL;送低5位(高3位為0) 方式1時(shí):

25、TCB=TCHTCL,TCH : 高8位,TCL: 低8位 MOVTHi,TCH;送高8位 MOVTLi,TCL;送低8位。 方式2時(shí):TCB 8位重裝載 MOV THi,TCB;送高8位 MOV TLi,TCB;送低8位,已知晶體振蕩器的頻率為fosc=6MHz。可使用T0作定時(shí)器,設(shè)為方式0,設(shè)定1ms的定時(shí),每隔1ms使P1.0引腳上的電平變反。 (1) 解:定時(shí)常數(shù)計(jì)算 振蕩器的頻率fosc6MHz,機(jī)器周期為2s,方式0計(jì)數(shù)器長(zhǎng)度L13(2138 192),定時(shí)時(shí)間 t1ms0.001s 定時(shí)常數(shù),例 要求在 P10引腳上產(chǎn)生周期為2 ms的方波輸出,TC為76921E0CH, 二進(jìn)

26、制數(shù)TCB0 0 0 1 1 1 1 0 0 0 0 0 1 1 0 0 B,取低13位,其中高8位TCHF0H,低5位為TCL0CH.計(jì)數(shù)長(zhǎng)度為1E0CH=7692,定時(shí)為(81927692)2s=0.001S TMOD的設(shè)定,2) 編 程 ORG0000H AJMPMAIN ORG000BH;T0中斷矢量 AJMP INQP ORG0030H MAIN:MOV TMOD,00H ;設(shè)T0為定時(shí)器方式0 MOV TH0,0F0H ;寫定時(shí)常數(shù)(定時(shí)1ms) MOV TL0,0CH,SETB TR0 ;啟動(dòng) T0 SETB ET0 ;允許T0中斷 SETB EA ;開放CPU中斷 AJMP $

27、 ;定時(shí)中斷等待 ORG2000 H ;T0中斷服務(wù)程序 INQP:MOV TH0,0F0H ;重寫定時(shí)常數(shù) MOV TL0,0CH CPL P10 ;P10變反輸出 RETI ;中斷返回,使用T1的方式1,設(shè)定1ms的定時(shí)。在P10引腳上產(chǎn)生周期為2 ms的方波輸出。晶體振蕩器的頻率為fosc6 MHz。 解: 定時(shí)常數(shù)計(jì)算 振蕩器的頻率fosc6MHz6106Hz,方式1計(jì)數(shù)器長(zhǎng)度 L16,2L21665536 定時(shí)時(shí)間 t1ms0.001s,例,定時(shí)常數(shù)TC轉(zhuǎn)換成二進(jìn)制TCB1 1 1 1 1 1 1 0 0 0 0 0 1 1 0 0 BF E 0 CH TCHFEH,TCL0CH T

28、MOD的設(shè)定,定時(shí)常數(shù),ORG 0000H AJMP MAIN ORG 001BH ;T1中斷矢量 AJMP INQP ORG 100H ;主程序入口 MAIN:MOV TMOD,10H ;T1為定時(shí)器方式1 MOV TH1,0FEH ;寫定時(shí)常數(shù) ,定時(shí)1ms MOV TL1,0CH SETB TR1 ;啟動(dòng)T1,SETB ET1 ;允許T1中斷 SETB EA ;開放CPU中斷 AJMP ORG 2000 H ;T1中斷服務(wù)程序 INQP:MOV TH1,0FEH ;重寫定時(shí)常數(shù) MOV TL1,0CH CPL P10 ;P10變反輸出 RETI ;中斷返回,欲用80C51產(chǎn)生兩個(gè)方波,一

29、個(gè)方波周期為200s,另一個(gè)方波周期為400s,該80C51同時(shí)使用串行口,用定時(shí)器計(jì)數(shù)器作為波特率發(fā)生器。 這時(shí)T0采用方式3工作,其中,TL0產(chǎn)生100s定時(shí),由 P10輸出方波1;TH0產(chǎn)生200s定時(shí),由Pl1輸出方波2;T1設(shè)置為方式2,作波特率發(fā)生器用。fOCC9216 MHz,例3,定時(shí)常數(shù)計(jì)算 TL0定時(shí)常數(shù)為 TCL0:TL0100s,單位s,為十進(jìn)數(shù)制數(shù)值。十六進(jìn)制數(shù)值為TL0B3H。 TH0定時(shí)常數(shù)為TCH0:定時(shí)時(shí)間為TH0200s,單位s,為十進(jìn)制數(shù)值。十六進(jìn)制的值為TH066 H。TH1的波特率(詳細(xì)計(jì)算見串行口部分)設(shè)波特率為2400,則定時(shí)常數(shù)為TC2F6H,編

30、 程ORG 0000H AJMPMAIN ORG 000BH ;TL0的中斷入口 AJMP ITL0 ORG 00lBH;TH0的中斷入口 AJMP ITH0 ORG 0100H MAIN:MOV SP, 60H;設(shè)棧指針 MOV TMOD, 23H ;設(shè)T0為方式3,TI為2,MOV TL0,0B3H ;設(shè)TL0初值(100s定時(shí)) MOVTH0,66H ;設(shè)TH0初值(200s定時(shí)) MOV TL1,0F6H ;設(shè)TL1初值(波特率為2400) MOV TH1, 0F6H ;設(shè) TH1初值 SETB TR0 ;啟動(dòng) TL0 SETB TR1 ;啟動(dòng)TH0 SETB ET0 ;允許TL0中斷

31、 SETB ET1 ;允許TH0中斷 SETB EA ;CPU中斷開放 AJMP,ORG 0200H ITL0:MOV TL0, 0B3H ;重裝定時(shí)常數(shù) CPL P10 ;輸出方波1(200s) RETI ITH0:MOV TH0,66H ;重裝定時(shí)常數(shù) CPL P11 ;輸出方波2(400s) RETI,當(dāng)TMOD寄存器中C/T位設(shè)置為“1”時(shí),作為計(jì)數(shù)器使用,可對(duì)來自單片微機(jī)引腳T0或T1上的負(fù)跳變脈沖進(jìn)行計(jì)數(shù),計(jì)數(shù)溢出時(shí)可申請(qǐng)中斷,也可查詢溢出標(biāo)志位TFx。 例假如一個(gè)用戶系統(tǒng)已使用了兩個(gè)外部中斷源,即INT0和INT1,用戶系統(tǒng)要求從P1.0引腳上輸出一個(gè)5kHz的方波,并要求采用定

32、時(shí)器/計(jì)數(shù)器作為串行口的波特率發(fā)生器,另外還需要再增加一個(gè)外部中斷源,6.5.2 計(jì)數(shù)器的應(yīng)用,把T0設(shè)置為方式3, 把T0作為外部中斷源,TL0設(shè)置為計(jì)數(shù)器,計(jì)數(shù)器的定時(shí)常數(shù)設(shè)為FFH,相當(dāng)于一個(gè)邊沿觸發(fā)的外部中斷源。 而在T0方式3下,TH0只能做8位定時(shí)器,用來產(chǎn)生5KHz方波的定時(shí)。 當(dāng)T0設(shè)置為方式3之后,T1就作為串行口的波特率發(fā)生器,設(shè)為方式2。 由P1.0引腳上輸出5kHz頻率的方波,而方波周期為200s,則要求定時(shí)時(shí)間為100s,若采用12MHz的晶體振蕩器,則機(jī)器周期為1s,計(jì)算時(shí)間常數(shù): (28TC)1s100s TC256100156 編程:ORG0000H SJMPM

33、AIN ORG000BH AJMPTL0INT;TL0中斷入口 ORG001BH AJMPTH0INT;TH0中斷入口,ORG0030H MAIN:MOVTMOD,#27H ;設(shè)T0為方式3,TL0為計(jì)數(shù) ;器方式,TH0為定時(shí)器方式,; T1作波特率發(fā)生器,方式2 MOVTH0,#156;TH0定時(shí)常數(shù) MOVTL0, #0FFH;TL0計(jì)數(shù)常數(shù) MOVTL1,#BAUD;BAUD根據(jù)波特率算出MOVTH1,#BAUD MOVTCON,#55H ;置TR0和TR1為“1”,啟;動(dòng)TL0和TH0,SETBET0;允許TL0中斷 SETBET1;允許TH0中斷 SETBEA;允許CPU中斷 SJ

34、MP$;中斷等待 ORG0100H TL0INT:MOVTL0,#0FFH;重置計(jì)數(shù)長(zhǎng)度 (中斷處理) RETI TH0INT:MOVTH0,#156;重置定時(shí)常數(shù) CPLP1.0;P1.0引腳輸出方波 RETI,門控位GATE可用作對(duì)INTx引腳上的高電平持續(xù)時(shí)間進(jìn)行計(jì)量。當(dāng)GATE位設(shè)為“1”,并設(shè)定時(shí)器/計(jì)數(shù)器啟動(dòng)位TRx為“1”,這時(shí)定時(shí)器/計(jì)數(shù)器定時(shí)完全取決于INTx引腳,僅當(dāng)INTx引腳電平為“1”時(shí),定時(shí)器才工作,換另一角度看,定時(shí)器實(shí)際記錄的時(shí)間就是相應(yīng)INTx引腳上高電平的持續(xù)時(shí)間,6.5.3 門控位GATE的應(yīng)用,通過反相器,則可測(cè)得相應(yīng)INTx引腳上低電平的持續(xù)時(shí)間。二個(gè)

35、時(shí)間的和即為INTx引腳上輸入波形的周期,其倒數(shù)即為INTx引腳上輸入波形的頻率。還可算出占空比等參數(shù)。 例利用定時(shí)器計(jì)數(shù)器測(cè)定圖611所示波形的一個(gè)周期長(zhǎng)度。 利用門控信號(hào)GATE啟動(dòng)定時(shí)器的方法。T1為定時(shí)器時(shí),當(dāng)TR1=1且為高電平時(shí),才啟動(dòng)定時(shí)器;而定時(shí)器計(jì)數(shù)器 T1為計(jì)數(shù)器時(shí),T1的電平由 1到 0,計(jì)數(shù)器計(jì)數(shù),TR1清零,圖611 波形脈沖寬度測(cè)試原理,查詢法ORG0000H START:MOVTMOD,#90H;設(shè)置T1為定時(shí)器, ;方式1,GATE位置1 MOVTL1,#00H;置為最大定時(shí)值 MOVTH1,#00H LP1:JBP3.3,LP1;P3.3為高電平,等待 SET

36、B TR1 ;當(dāng)P3.3為低電平時(shí), ;置TR1位為1 LP2: JNBP3.3,LP2;當(dāng)P3.3為低電平時(shí),再等待,LP3:JBP3.3,LP3;當(dāng)P3.3為高電平時(shí),T1開始定;時(shí)計(jì)數(shù) CLRTR1;當(dāng)P3.3為低電平時(shí),高電平脈寬定;時(shí)計(jì)數(shù)結(jié)束 SJMP$ 當(dāng)fosc12MHz時(shí),機(jī)器周期為1s,最大被測(cè)脈沖寬度為65536s (65.536ms)。 若被測(cè)波形除了接至P3.3,另外同時(shí)通過一個(gè)反相器接至P3.2 (INT0) ,則通過編程同時(shí)可以測(cè)得波形的高電平寬度和低電平寬度,中斷法 對(duì)于脈沖寬度大于65.536ms的脈沖,可以采用對(duì)定時(shí)溢出次數(shù)進(jìn)行計(jì)數(shù)的方法。這樣,脈寬為 (定時(shí)溢出時(shí)間溢出次數(shù))定時(shí)時(shí)間。利用定時(shí)器/計(jì)數(shù)器來測(cè)定脈沖周期的方法參見圖6-12。 (1) 設(shè)定晶體振蕩器為 6 MHz,機(jī)器周期Tc為2s,定時(shí)器/計(jì)數(shù)器T0為方式1,定時(shí)溢出時(shí)間為 100 ms,則T0定時(shí)時(shí)間常數(shù)為:(TH0)3CH,(TL0)B0H 因?yàn)橥獠棵}沖同時(shí)接至T1的輸入引腳T1,所以T1腳上對(duì)下降沿計(jì)數(shù)二次,即為外部脈沖的一個(gè)周期時(shí)間?,F(xiàn)設(shè)T1為計(jì)數(shù)器。計(jì)數(shù)值為2,當(dāng)計(jì)數(shù)值為1時(shí),啟動(dòng)定時(shí)器;當(dāng)計(jì)數(shù)值為2時(shí),中斷計(jì)數(shù)器T1,并停止定時(shí)器T0的定時(shí)。T1中斷優(yōu)先級(jí)設(shè)為高于定時(shí)器T0。 計(jì)數(shù)初值為 FFFEH:(TH1)FFH,(TL0)FEH。 (2)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論