第7章定時(shí)計(jì)數(shù)器及可編程計(jì)數(shù)器陣列_第1頁
第7章定時(shí)計(jì)數(shù)器及可編程計(jì)數(shù)器陣列_第2頁
第7章定時(shí)計(jì)數(shù)器及可編程計(jì)數(shù)器陣列_第3頁
第7章定時(shí)計(jì)數(shù)器及可編程計(jì)數(shù)器陣列_第4頁
第7章定時(shí)計(jì)數(shù)器及可編程計(jì)數(shù)器陣列_第5頁
已閱讀5頁,還剩45頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、1/50中國石油大學(xué)生理學(xué)院第第7 7章章 定時(shí)定時(shí)/ /計(jì)數(shù)器計(jì)數(shù)器 2/50中國石油大學(xué)生理學(xué)院在計(jì)算機(jī)控制中可供選擇的定時(shí)方法在計(jì)算機(jī)控制中可供選擇的定時(shí)方法 (1 1)軟件定時(shí))軟件定時(shí) 執(zhí)行一個(gè)循環(huán)程序來實(shí)現(xiàn)。執(zhí)行一個(gè)循環(huán)程序來實(shí)現(xiàn)。 (2 2)硬件定時(shí))硬件定時(shí) 定時(shí)全部由硬件電路完成,不占用定時(shí)全部由硬件電路完成,不占用CPUCPU時(shí)間,但需要通過改變電路時(shí)間,但需要通過改變電路的元件參數(shù)來調(diào)節(jié)定時(shí)時(shí)間,在使用控制上不夠方便,同時(shí)增加了開的元件參數(shù)來調(diào)節(jié)定時(shí)時(shí)間,在使用控制上不夠方便,同時(shí)增加了開發(fā)成本。發(fā)成本。 (3 3)可編程定時(shí)器定時(shí))可編程定時(shí)器定時(shí) 由單片機(jī)內(nèi)部的定時(shí)模

2、塊單元完成。由單片機(jī)內(nèi)部的定時(shí)模塊單元完成。 STC12C5A60S2單片機(jī)內(nèi)部有單片機(jī)內(nèi)部有: 1)兩個(gè))兩個(gè)16位的定時(shí)位的定時(shí)/計(jì)數(shù)器,不僅可以方便地用于定時(shí)控制,而計(jì)數(shù)器,不僅可以方便地用于定時(shí)控制,而且還可以用作分頻器和用于事件記錄;且還可以用作分頻器和用于事件記錄; 2)可編程時(shí)鐘輸出功能,可用于給外部器件提供時(shí)鐘;)可編程時(shí)鐘輸出功能,可用于給外部器件提供時(shí)鐘; 3)兩路可編程計(jì)數(shù)器陣列()兩路可編程計(jì)數(shù)器陣列(Programmable Counter Array,PCA)。可用于軟件定時(shí)器、外部脈沖的捕捉、高速輸出以及脈寬調(diào))??捎糜谲浖〞r(shí)器、外部脈沖的捕捉、高速輸出以及脈寬

3、調(diào)制(制(Pulse Width Modulation ,PWM)輸出。)輸出。3/50中國石油大學(xué)生理學(xué)院7.1 STC12C5A60S27.1 STC12C5A60S2單片機(jī)的定時(shí)單片機(jī)的定時(shí)/ /計(jì)數(shù)器計(jì)數(shù)器 7.1.1 7.1.1 定時(shí)定時(shí)/ /計(jì)數(shù)器的結(jié)構(gòu)及工作原理計(jì)數(shù)器的結(jié)構(gòu)及工作原理 OSC12分頻或不分頻TX端C/T=0C/T=1控制信號(hào)加1計(jì)數(shù)器TFX中斷 定時(shí)定時(shí)/計(jì)數(shù)器的核心是一個(gè)加計(jì)數(shù)器的核心是一個(gè)加1計(jì)數(shù)器,加計(jì)數(shù)器,加1計(jì)數(shù)器的脈沖有兩計(jì)數(shù)器的脈沖有兩個(gè)來源,一個(gè)是外部脈沖源,另一個(gè)是系統(tǒng)的時(shí)鐘振蕩器。計(jì)數(shù)個(gè)來源,一個(gè)是外部脈沖源,另一個(gè)是系統(tǒng)的時(shí)鐘振蕩器。計(jì)數(shù)器對

4、兩個(gè)脈沖源之一進(jìn)行輸入計(jì)數(shù),每輸入一個(gè)脈沖,計(jì)數(shù)值加器對兩個(gè)脈沖源之一進(jìn)行輸入計(jì)數(shù),每輸入一個(gè)脈沖,計(jì)數(shù)值加1。當(dāng)計(jì)數(shù)到計(jì)數(shù)器為全。當(dāng)計(jì)數(shù)到計(jì)數(shù)器為全1時(shí),再輸入一個(gè)脈沖就使計(jì)數(shù)值回零,同時(shí),再輸入一個(gè)脈沖就使計(jì)數(shù)值回零,同時(shí)從最高位溢出一個(gè)脈沖使特殊功能寄存器時(shí)從最高位溢出一個(gè)脈沖使特殊功能寄存器TCON(定時(shí)器控制(定時(shí)器控制寄存器)的某一位寄存器)的某一位TF0或或TF1置置1,作為計(jì)數(shù)器的溢出中斷標(biāo)志。,作為計(jì)數(shù)器的溢出中斷標(biāo)志。 4/50中國石油大學(xué)生理學(xué)院 單片機(jī)中的微處理器、寄存器單片機(jī)中的微處理器、寄存器TCONTCON和和TMODTMOD與定時(shí)與定時(shí)/ /計(jì)數(shù)器計(jì)數(shù)器T0T0

5、、T1T1之間的關(guān)系之間的關(guān)系 CPU內(nèi)部總線TH1TL1TH0TL0TMODTCON07070707P3.4P3.5AUXR5/50中國石油大學(xué)生理學(xué)院7.1.2 7.1.2 定時(shí)定時(shí)/ /計(jì)數(shù)器計(jì)數(shù)器的相關(guān)的相關(guān)寄存器寄存器1 1、定時(shí)器工作方式控制寄存器、定時(shí)器工作方式控制寄存器TMODTMOD(地址為(地址為89H,復(fù)位值為,復(fù)位值為00H) M0M1C/ TGATEM0M1C/ TGATE定時(shí)器定時(shí)器0定時(shí)器定時(shí)器1定時(shí)器定時(shí)器D0D1D2D3D4D5D6D7位號(hào)位號(hào)M1 M0工作方式工作方式功能說明功能說明0 0013位計(jì)數(shù)器位計(jì)數(shù)器0 1116位計(jì)數(shù)器位計(jì)數(shù)器1 02可自動(dòng)裝入的

6、可自動(dòng)裝入的8位計(jì)數(shù)器位計(jì)數(shù)器1 13定時(shí)器定時(shí)器0:分成兩個(gè):分成兩個(gè)8位計(jì)數(shù)器位計(jì)數(shù)器定時(shí)器定時(shí)器1:停止計(jì)數(shù):停止計(jì)數(shù)1)M1和和M0:方式選擇控制位。:方式選擇控制位。 T2)C/:功能選擇位。:功能選擇位。用于用于“計(jì)數(shù)器計(jì)數(shù)器”或或“定時(shí)器定時(shí)器”功能的選擇。功能的選擇。3)GATE:門控位。:門控位。GATE用于選通控制。用于選通控制。位名稱位名稱6/50中國石油大學(xué)生理學(xué)院2、定時(shí)器控制寄存器、定時(shí)器控制寄存器 TCON(地址為(地址為88H,復(fù)位值為,復(fù)位值為00H)1)TF1:定時(shí)器:定時(shí)器/計(jì)數(shù)器計(jì)數(shù)器1溢出標(biāo)志位。溢出標(biāo)志位。 2)TR1:定時(shí)器:定時(shí)器T1的運(yùn)行控制位

7、。的運(yùn)行控制位。 3)TF0:定時(shí)器:定時(shí)器/計(jì)數(shù)器計(jì)數(shù)器0溢出標(biāo)志位。溢出標(biāo)志位。 4)TR0:定時(shí)器:定時(shí)器T0的的運(yùn)行運(yùn)行控制位??刂莆?。TCON的的03位與外部中斷有關(guān)。位與外部中斷有關(guān)。IT0IE0IT1IE1TR0TF0TR1TF1位名稱位名稱D0D1D2D3D4D5D6D7位號(hào)位號(hào)7/50中國石油大學(xué)生理學(xué)院3、AUXR:輔助寄存器(地址為:輔助寄存器(地址為8EH,復(fù)位值為,復(fù)位值為00H)-ELVDIESPIEADCIUART_M0 x6UART_M0 x6T1x12T1x12T0 x12位名稱位名稱D0D1D2D3D4D5D6D7位號(hào)位號(hào) 與定時(shí)器速度相關(guān)的控制位有:與定時(shí)

8、器速度相關(guān)的控制位有: 1)T0 x12:定時(shí)器:定時(shí)器0速度控制位。速度控制位。 0:定時(shí)器:定時(shí)器0的速度是傳統(tǒng)的速度是傳統(tǒng)8051單片機(jī)定時(shí)器的速度,即單片機(jī)定時(shí)器的速度,即12分頻。分頻。 1:定時(shí)器:定時(shí)器0的速度是傳統(tǒng)的速度是傳統(tǒng)8051單片機(jī)定時(shí)器速度的單片機(jī)定時(shí)器速度的12倍,即不分頻。倍,即不分頻。 2)T1x12:定時(shí)器:定時(shí)器1速度控制位。速度控制位。 0:定時(shí)器:定時(shí)器1的速度是傳統(tǒng)的速度是傳統(tǒng)8051單片機(jī)定時(shí)器的速度,即單片機(jī)定時(shí)器的速度,即12分頻。分頻。 1:定時(shí)器:定時(shí)器1的速度是傳統(tǒng)的速度是傳統(tǒng)8051單片機(jī)定時(shí)器速度的單片機(jī)定時(shí)器速度的12倍,即不分頻。倍

9、,即不分頻。 如果如果UART串口用串口用T1作為波特率發(fā)生器,作為波特率發(fā)生器,T1x12位決定位決定UART串口是串口是12T 還是還是1T。 UART_M0 x6、BRTR、S2SMOD、BRTx12和和S1BRS用于控制用于控制UART串口的速串口的速度。度。EXTRAM用于設(shè)置是否允許使用內(nèi)部用于設(shè)置是否允許使用內(nèi)部1024字節(jié)的擴(kuò)展字節(jié)的擴(kuò)展RAM。8/50中國石油大學(xué)生理學(xué)院7.1.3 7.1.3 定時(shí)定時(shí)/ /計(jì)數(shù)器的工作方式計(jì)數(shù)器的工作方式 方式方式0 和方式和方式112分頻OSC/12不分頻OSC計(jì)數(shù)源P3.4/P3.5外部中斷INT0/INT1TR0/TR1OSCGATE

10、T0 x12/T1x1201C/T1CLKTF0/TF1047TL0/TL1方式0方式107TH0/TH1INT串口(只對T1有效)09/50中國石油大學(xué)生理學(xué)院方式方式2 CLKTF0/TF107TL0/TL1INT07TH0/TH1重載12分頻OSC/12不分頻OSC計(jì)數(shù)源P3.4/P3.5外部中斷INT0/INT1TR0/TR1OSCGATET0 x12/T1x1201C/T1010/50中國石油大學(xué)生理學(xué)院方式方式3OSC12分頻OSC/12T0 x12 01不分頻OSC/1OSC12分頻OSC/12T0 x12 01不分頻OSC/1TF0TL0(8位)C/T=0C/T=1T0(P3.

11、4)TR0GATEINT0(P3.2)TF1TH0(8位)TR1中斷中斷11/50中國石油大學(xué)生理學(xué)院當(dāng)工作于定時(shí)狀態(tài)時(shí),定時(shí)當(dāng)工作于定時(shí)狀態(tài)時(shí),定時(shí)/計(jì)數(shù)器是對時(shí)鐘周期進(jìn)行計(jì)數(shù),若對時(shí)鐘計(jì)數(shù)器是對時(shí)鐘周期進(jìn)行計(jì)數(shù),若對時(shí)鐘進(jìn)行進(jìn)行12分頻,則對每分頻,則對每12個(gè)時(shí)鐘周期計(jì)數(shù)。當(dāng)晶振頻率為個(gè)時(shí)鐘周期計(jì)數(shù)。當(dāng)晶振頻率為6MHz,采用,采用12分分頻時(shí),計(jì)數(shù)的單位時(shí)間間隔為頻時(shí),計(jì)數(shù)的單位時(shí)間間隔為單位時(shí)間間隔單位時(shí)間間隔Tu=定時(shí)時(shí)間為:定時(shí)時(shí)間為:TC=XTu。其中,。其中,Tu為單位時(shí)間間隔,為單位時(shí)間間隔,TC為定時(shí)時(shí)間。為定時(shí)時(shí)間。7.1.4 定時(shí)定時(shí)/計(jì)數(shù)器量程的擴(kuò)展計(jì)數(shù)器量程的擴(kuò)展

12、 STC12C5A60S2 STC12C5A60S2單片機(jī)中提供的定時(shí)單片機(jī)中提供的定時(shí)/ /計(jì)數(shù)器可以使用戶很方便地實(shí)現(xiàn)定計(jì)數(shù)器可以使用戶很方便地實(shí)現(xiàn)定時(shí)和對外部事件計(jì)數(shù)。但是在實(shí)際應(yīng)用中,需要的定時(shí)時(shí)間或計(jì)數(shù)值可能超時(shí)和對外部事件計(jì)數(shù)。但是在實(shí)際應(yīng)用中,需要的定時(shí)時(shí)間或計(jì)數(shù)值可能超過定時(shí)過定時(shí)/ /計(jì)數(shù)器的定時(shí)或計(jì)數(shù)能力,特別是當(dāng)單片機(jī)的系統(tǒng)時(shí)鐘頻率較高時(shí),計(jì)數(shù)器的定時(shí)或計(jì)數(shù)能力,特別是當(dāng)單片機(jī)的系統(tǒng)時(shí)鐘頻率較高時(shí),定時(shí)能力就更為有限。為了滿足需要,有時(shí)需要對單片機(jī)的定時(shí)計(jì)數(shù)能力進(jìn)定時(shí)能力就更為有限。為了滿足需要,有時(shí)需要對單片機(jī)的定時(shí)計(jì)數(shù)能力進(jìn)行擴(kuò)展。定時(shí)能力和計(jì)數(shù)能力擴(kuò)展的方法相同,在

13、此主要對定時(shí)能力的擴(kuò)展行擴(kuò)展。定時(shí)能力和計(jì)數(shù)能力擴(kuò)展的方法相同,在此主要對定時(shí)能力的擴(kuò)展進(jìn)行討論,計(jì)數(shù)能力的擴(kuò)展可參考定時(shí)能力擴(kuò)展的方法進(jìn)行。進(jìn)行討論,計(jì)數(shù)能力的擴(kuò)展可參考定時(shí)能力擴(kuò)展的方法進(jìn)行。晶振頻率12600000012s=2s STC12C5A60S2單片機(jī)的定時(shí)器單片機(jī)的定時(shí)器/計(jì)數(shù)器計(jì)數(shù)器0或或1是對脈沖進(jìn)行不斷加是對脈沖進(jìn)行不斷加1進(jìn)行計(jì)數(shù)的,因此,不能直接將實(shí)際的計(jì)數(shù)值作為計(jì)數(shù)初值送入計(jì)數(shù)寄進(jìn)行計(jì)數(shù)的,因此,不能直接將實(shí)際的計(jì)數(shù)值作為計(jì)數(shù)初值送入計(jì)數(shù)寄存器存器THX、TLX中,而必須將實(shí)際計(jì)數(shù)值以中,而必須將實(shí)際計(jì)數(shù)值以28、213、216為模求補(bǔ),以補(bǔ)為模求補(bǔ),以補(bǔ)碼作為計(jì)數(shù)

14、初值設(shè)置碼作為計(jì)數(shù)初值設(shè)置THX和和TLX。即應(yīng)裝入計(jì)數(shù)。即應(yīng)裝入計(jì)數(shù)/定時(shí)器的初值為:定時(shí)器的初值為: TcN2Tunn=8,13或16=12/50中國石油大學(xué)生理學(xué)院系統(tǒng)時(shí)鐘頻率為系統(tǒng)時(shí)鐘頻率為6MHz,6MHz,進(jìn)行進(jìn)行12分頻分頻時(shí)時(shí), ,定時(shí)器的最大定時(shí)能力定時(shí)器的最大定時(shí)能力 T(216 0)2s131072s131.072ms16T(213 0)2s16384s16.384ms13T(28 0)2s512s8最大定時(shí)能力最大定時(shí)能力位數(shù)位數(shù)擴(kuò)展方法:擴(kuò)展方法:(1 1)軟件擴(kuò)展方法)軟件擴(kuò)展方法 擴(kuò)展方法是在定時(shí)器中斷服務(wù)程序中對定時(shí)器中斷請求進(jìn)行擴(kuò)展方法是在定時(shí)器中斷服務(wù)程序中

15、對定時(shí)器中斷請求進(jìn)行計(jì)數(shù),當(dāng)中斷請求的次數(shù)達(dá)到要求的值時(shí)才進(jìn)行相應(yīng)的處理。計(jì)數(shù),當(dāng)中斷請求的次數(shù)達(dá)到要求的值時(shí)才進(jìn)行相應(yīng)的處理。例例如,某事件的處理周期為如,某事件的處理周期為1s,但由于受到最大定時(shí)時(shí)間的限制,但由于受到最大定時(shí)時(shí)間的限制,無法一次完成定時(shí),此時(shí)可以將定時(shí)器的定時(shí)時(shí)間設(shè)為以無法一次完成定時(shí),此時(shí)可以將定時(shí)器的定時(shí)時(shí)間設(shè)為以10ms為一個(gè)單位,啟動(dòng)定時(shí)器后的每一次定時(shí)器溢出中斷產(chǎn)生為一個(gè)單位,啟動(dòng)定時(shí)器后的每一次定時(shí)器溢出中斷產(chǎn)生10ms的定時(shí),進(jìn)入中斷服務(wù)程序后,對定時(shí)器的中斷次數(shù)進(jìn)行統(tǒng)計(jì),的定時(shí),進(jìn)入中斷服務(wù)程序后,對定時(shí)器的中斷次數(shù)進(jìn)行統(tǒng)計(jì),每每100次定時(shí)器溢出中斷進(jìn)行

16、一次事件的處理,然后再以同樣的次定時(shí)器溢出中斷進(jìn)行一次事件的處理,然后再以同樣的方式進(jìn)入下一個(gè)周期的事件處理。方式進(jìn)入下一個(gè)周期的事件處理。 13/50中國石油大學(xué)生理學(xué)院(2 2)硬件擴(kuò)展方法)硬件擴(kuò)展方法 硬件擴(kuò)展方法可以使用外接通用定時(shí)器芯片對單片機(jī)的定時(shí)硬件擴(kuò)展方法可以使用外接通用定時(shí)器芯片對單片機(jī)的定時(shí)能力進(jìn)行擴(kuò)展,如使用定時(shí)能力進(jìn)行擴(kuò)展,如使用定時(shí)/ /計(jì)數(shù)器芯片計(jì)數(shù)器芯片82538253,也可以利用單片,也可以利用單片機(jī)自身的資源對定時(shí)能力進(jìn)行擴(kuò)展。機(jī)自身的資源對定時(shí)能力進(jìn)行擴(kuò)展。 由于單片機(jī)的定時(shí)器沒有對外輸出引腳,所以兩個(gè)由于單片機(jī)的定時(shí)器沒有對外輸出引腳,所以兩個(gè)16位的定

17、位的定時(shí)時(shí)/計(jì)數(shù)器不能直接連在一起,可以通過單片機(jī)的端口計(jì)數(shù)器不能直接連在一起,可以通過單片機(jī)的端口P0P3實(shí)實(shí)現(xiàn)連接。下圖給出了一種具體的連接方法。現(xiàn)連接。下圖給出了一種具體的連接方法。 T0定時(shí)器方式 P1.0T1計(jì)數(shù)器方式T1(P3.5) 1)T0設(shè)置為設(shè)置為16位定時(shí)器方式,當(dāng)位定時(shí)器方式,當(dāng)T0溢出時(shí),執(zhí)行溢出時(shí),執(zhí)行T0的中斷服務(wù)的中斷服務(wù)程序。在程序。在T0的中斷服務(wù)程序中將的中斷服務(wù)程序中將P1.0取反。這樣在取反。這樣在P1.0將輸出一個(gè)方將輸出一個(gè)方波,其周期為波,其周期為T0定時(shí)時(shí)間的定時(shí)時(shí)間的2倍。設(shè)倍。設(shè)T0的定時(shí)時(shí)間為的定時(shí)時(shí)間為TIME,則由,則由P1.0輸出的方

18、波的周期為輸出的方波的周期為2TIME。 2)T1設(shè)置為設(shè)置為16位計(jì)數(shù)器方式,將位計(jì)數(shù)器方式,將P1.0輸出的方波接到輸出的方波接到T1的定時(shí)的定時(shí)器外部輸入端器外部輸入端T1(P3.5),作為定時(shí)),作為定時(shí)/計(jì)數(shù)器計(jì)數(shù)器1的外部計(jì)數(shù)脈沖,其每個(gè)的外部計(jì)數(shù)脈沖,其每個(gè)周期的下降沿使周期的下降沿使T1加加1。設(shè)計(jì)數(shù)器。設(shè)計(jì)數(shù)器T1的計(jì)數(shù)脈沖數(shù)為的計(jì)數(shù)脈沖數(shù)為COUNT,則當(dāng),則當(dāng)T1溢出時(shí),總定時(shí)時(shí)間溢出時(shí),總定時(shí)時(shí)間T為:為:T = 2TIMECOUNT。 14/50中國石油大學(xué)生理學(xué)院7.1.5 定時(shí)定時(shí)/計(jì)數(shù)器編程舉例計(jì)數(shù)器編程舉例 定時(shí)定時(shí)/計(jì)數(shù)器的應(yīng)用編程主要有兩點(diǎn):一是能正確初始

19、化,包計(jì)數(shù)器的應(yīng)用編程主要有兩點(diǎn):一是能正確初始化,包括寫入控制字,進(jìn)行時(shí)間常數(shù)的計(jì)算并裝入;二是中斷服務(wù)程序的括寫入控制字,進(jìn)行時(shí)間常數(shù)的計(jì)算并裝入;二是中斷服務(wù)程序的編寫,即在中斷服務(wù)程序中編寫實(shí)現(xiàn)定時(shí)完成的任務(wù)代碼。一般情編寫,即在中斷服務(wù)程序中編寫實(shí)現(xiàn)定時(shí)完成的任務(wù)代碼。一般情況下,定時(shí)況下,定時(shí)/計(jì)數(shù)器初始化部分的步驟大致如下:計(jì)數(shù)器初始化部分的步驟大致如下: (1)設(shè)置工作方式,將控制字寫入)設(shè)置工作方式,將控制字寫入TMOD寄存器。寄存器。 (2)設(shè)置分頻方式,將控制字寫入)設(shè)置分頻方式,將控制字寫入AUXR寄存器。默認(rèn)的情寄存器。默認(rèn)的情況是況是12分頻(兼容傳統(tǒng)分頻(兼容傳統(tǒng)

20、8051單片機(jī)),因此,如果使用傳統(tǒng)單片機(jī)),因此,如果使用傳統(tǒng)8051單片機(jī)模式,可以不進(jìn)行設(shè)置。單片機(jī)模式,可以不進(jìn)行設(shè)置。 (3)把定時(shí))把定時(shí)/計(jì)數(shù)初值裝入計(jì)數(shù)初值裝入TLX、THX寄存器。寄存器。 (4)置位)置位ETX允許定時(shí)允許定時(shí)/計(jì)數(shù)器中斷(如果需要)。計(jì)數(shù)器中斷(如果需要)。 (5)置位)置位EA使使CPU開放中斷。開放中斷。 (6)置位)置位TRX以啟動(dòng)定時(shí)以啟動(dòng)定時(shí)/計(jì)數(shù)。計(jì)數(shù)。15/50中國石油大學(xué)生理學(xué)院 【例例7-17-1】 設(shè)系統(tǒng)時(shí)鐘頻率為設(shè)系統(tǒng)時(shí)鐘頻率為6MHz6MHz,利用定時(shí)器,利用定時(shí)器T0T0定時(shí),每隔定時(shí),每隔1s1s將將P2.0P2.0的狀態(tài)取反。

21、的狀態(tài)取反。 思路:思路:將定時(shí)器的定時(shí)時(shí)間設(shè)為將定時(shí)器的定時(shí)時(shí)間設(shè)為50ms50ms,在中斷服務(wù)程序中對定時(shí)器,在中斷服務(wù)程序中對定時(shí)器溢溢出中斷請求進(jìn)行計(jì)數(shù),當(dāng)計(jì)夠出中斷請求進(jìn)行計(jì)數(shù),當(dāng)計(jì)夠2020次時(shí),將次時(shí),將P2.0P2.0的狀態(tài)取反,否則直接的狀態(tài)取反,否則直接返回主程序。返回主程序。 選擇定時(shí)器選擇定時(shí)器T0T0的工作方式:軟件啟動(dòng)、定時(shí)方式、的工作方式:軟件啟動(dòng)、定時(shí)方式、1616位定時(shí)器,位定時(shí)器,方式字為方式字為01H01H。由于系統(tǒng)時(shí)鐘頻率為。由于系統(tǒng)時(shí)鐘頻率為6MHz6MHz,1212分頻時(shí),計(jì)數(shù)單位為分頻時(shí),計(jì)數(shù)單位為2s2s。定時(shí)器。定時(shí)器T0T0的裝入初值為的裝入

22、初值為9E58H2500065536)10)/(21050(2TpTcMX631616/50中國石油大學(xué)生理學(xué)院匯編語言程序代碼如下:匯編語言程序代碼如下:$INCLUDE (STC12C5A.INC) ;包含包含STC12C5A60S2寄存器定義文件寄存器定義文件ORG0000HLJMP MAIN ;轉(zhuǎn)主程序轉(zhuǎn)主程序ORG000BH;T0中斷服務(wù)程序入口地址中斷服務(wù)程序入口地址LJMPT0_ISRORG 0100HMAIN: MOV SP,#60H ;設(shè)置堆棧指針設(shè)置堆棧指針 MOV TMOD,#01H ;T0初始化初始化MOV TL0,#58HMOV TH0,#9EHMOV A,#20 ;

23、累加器累加器A置置20SETB ET0 ;允外允外T0中斷中斷SETB EA;CPU開中斷開中斷SETB TR0 ;啟動(dòng)啟動(dòng)T0計(jì)數(shù)計(jì)數(shù)SJMP $ ;等待等待T0_ISR:MOV TL0,#58H MOV TH0,#9EH ;重新裝入時(shí)間常數(shù)重新裝入時(shí)間常數(shù)DEC A ; 累加器累加器A內(nèi)容減內(nèi)容減1JNZEXITCPL P2.0MOV A,#20 ;累加器累加器A重載重載20EXIT:RETIEND17/50中國石油大學(xué)生理學(xué)院對應(yīng)的對應(yīng)的C C語言程序如下:語言程序如下:#include “stc12c5a.h”/包含包含STC12C5A60S2的寄存器定義文件的寄存器定義文件sbit

24、P20=P20;/聲明聲明P2.0的引腳位變量的引腳位變量unsigned char i;/聲明計(jì)數(shù)變量。在聲明計(jì)數(shù)變量。在C語言程序中,盡量不要使用語言程序中,盡量不要使用ACCvoid main (void) /SP=0 x60;/使用使用C語言設(shè)計(jì)程序時(shí),可以不設(shè)置堆棧指針語言設(shè)計(jì)程序時(shí),可以不設(shè)置堆棧指針 TMOD=0 x01; TL0=0 x58; TH0=0 x9E; i=20;/計(jì)數(shù)變量賦初值計(jì)數(shù)變量賦初值ET0=1;/允許允許T0中斷中斷 EA = 1;/開放總的中斷開放總的中斷TR0=1;/啟動(dòng)啟動(dòng)T0計(jì)數(shù)計(jì)數(shù) while(1); /等待中斷等待中斷void T0_ISR (

25、void) interrupt 1 /定時(shí)器定時(shí)器T0中斷函數(shù)中斷函數(shù)TL0=0 x58;/重新裝入時(shí)間常數(shù)重新裝入時(shí)間常數(shù) TH0=0 x9E;i-;/計(jì)數(shù)變量減計(jì)數(shù)變量減1if(i=0) /若減到若減到0,則將,則將P2.0取反取反 P20 = !P20; /將將P2.0取反取反 i = 20;/重新給計(jì)數(shù)變量賦值重新給計(jì)數(shù)變量賦值18/50中國石油大學(xué)生理學(xué)院 解:以解:以T0T0為例,下面列出實(shí)現(xiàn)這一方法的關(guān)鍵代碼,完整的程序,請讀者為例,下面列出實(shí)現(xiàn)這一方法的關(guān)鍵代碼,完整的程序,請讀者自行編寫。自行編寫。 MOV TMOD,#09H ; T0MOV TMOD,#09H ; T0初始

26、化,初始化,T0T0工作于方式工作于方式1 1、定時(shí)、定時(shí)、GATEGATE置置1 1 MOV TL0,#00H MOV TL0,#00H MOV TH0,#00H MOV TH0,#00H JNB P3.2,$ ; JNB P3.2,$ ;等待升高等待升高 SETB TR0 SETB TR0 JB P3.2,$ ; JB P3.2,$ ;等待下降等待下降 CLR TR0 ; CLR TR0 ;關(guān)關(guān)T0T0 MOV A,TL0 ;T0 MOV A,TL0 ;T0內(nèi)容高內(nèi)容高8 8位送位送B B,低,低8 8位送位送A A MOV B,TH0 MOV B,TH0 ; ;計(jì)算脈寬或送顯示器顯示計(jì)算

27、脈寬或送顯示器顯示 對T0初始化編程,GATE=1T0從0開始計(jì)數(shù)T0停止計(jì)數(shù),讀T0值 【例例7-27-2】利用定時(shí)器的門控方式可以實(shí)現(xiàn)正脈沖的脈寬測量。利用定時(shí)器的門控方式可以實(shí)現(xiàn)正脈沖的脈寬測量。當(dāng)當(dāng)GATE=1GATE=1,TRX=1TRX=1,只有只有/INTX/INTX引腳輸入高電平時(shí),引腳輸入高電平時(shí),TXTX才被允許計(jì)數(shù),利用這一特點(diǎn),可測量才被允許計(jì)數(shù),利用這一特點(diǎn),可測量/INTX/INTX引腳上正脈引腳上正脈沖的寬度,如下圖所示。沖的寬度,如下圖所示。注意教材上的思考問題!19/50中國石油大學(xué)生理學(xué)院定時(shí)定時(shí)/計(jì)數(shù)器應(yīng)用中應(yīng)注意的問題計(jì)數(shù)器應(yīng)用中應(yīng)注意的問題 (1)定時(shí)

28、定時(shí)/計(jì)數(shù)器的實(shí)時(shí)性計(jì)數(shù)器的實(shí)時(shí)性 大多數(shù)應(yīng)用場合可忽略不計(jì),但對某些要求實(shí)時(shí)性大多數(shù)應(yīng)用場合可忽略不計(jì),但對某些要求實(shí)時(shí)性苛刻的場合,應(yīng)采用補(bǔ)償措施??量痰膱龊希瑧?yīng)采用補(bǔ)償措施。 (2)動(dòng)態(tài)讀取運(yùn)行中的計(jì)數(shù)值動(dòng)態(tài)讀取運(yùn)行中的計(jì)數(shù)值 在動(dòng)態(tài)讀取運(yùn)行中的定時(shí)在動(dòng)態(tài)讀取運(yùn)行中的定時(shí)/計(jì)數(shù)器的計(jì)數(shù)值時(shí),如計(jì)數(shù)器的計(jì)數(shù)值時(shí),如果不加注意,就可能出錯(cuò)。這是因?yàn)椴豢赡茉谕粫r(shí)刻果不加注意,就可能出錯(cuò)。這是因?yàn)椴豢赡茉谕粫r(shí)刻同時(shí)讀取同時(shí)讀取THX和和TLX中的計(jì)數(shù)值。中的計(jì)數(shù)值。一種可避免讀錯(cuò)的方法是:先讀一種可避免讀錯(cuò)的方法是:先讀THX,后讀,后讀TLX,重讀,重讀THX,將兩次讀得的,將兩次讀得的T

29、HX進(jìn)行比較;若兩次讀得的值相進(jìn)行比較;若兩次讀得的值相等,則可確定讀的值是正確的,否則重復(fù)上述過程,重等,則可確定讀的值是正確的,否則重復(fù)上述過程,重復(fù)讀得的值一般不會(huì)再錯(cuò)。復(fù)讀得的值一般不會(huì)再錯(cuò)。20/50中國石油大學(xué)生理學(xué)院7.2 7.2 STC12C5A60S2單片機(jī)的可編程時(shí)鐘輸出單片機(jī)的可編程時(shí)鐘輸出STC12C5A60S2單片機(jī)提供了單片機(jī)提供了3路可編程時(shí)鐘輸出功能。路可編程時(shí)鐘輸出功能。7.2.1 可編程時(shí)鐘輸出的相關(guān)寄存器可編程時(shí)鐘輸出的相關(guān)寄存器1、掉電喚醒寄存器、掉電喚醒寄存器WAKE_CLKO(地址為(地址為8FH,復(fù)位值為,復(fù)位值為00000000B) T0CLKO

30、T1CLKOBRTCLKOLVD_WAKET1_PIN_IET1_PIN_IERXD_PIN_IEPCAWAKEUP位名稱D0D1D2D3D4D5D6D7位號(hào)1)BRTCLKO:是否允許:是否允許P1.0(CLKOUT2)腳輸出時(shí)鐘。)腳輸出時(shí)鐘。 0:不允許:不允許BRT在在P1.0(CLKOUT2)腳輸出時(shí)鐘。)腳輸出時(shí)鐘。1:允許:允許P1.0(CLKOUT2)腳輸出時(shí)鐘,輸出時(shí)鐘頻率)腳輸出時(shí)鐘,輸出時(shí)鐘頻率=BRT溢出率溢出率/22)T1CLKO:是否允許:是否允許T1(P3.5)腳輸出溢出脈沖。)腳輸出溢出脈沖。0:不允許:不允許T1(P3.5)腳輸出溢出脈沖。)腳輸出溢出脈沖。1

31、:允許:允許T1(P3.5)腳輸出溢出脈沖,輸出時(shí)鐘頻率)腳輸出溢出脈沖,輸出時(shí)鐘頻率 = T1溢出率溢出率/23)T0CLKO:是否允許:是否允許T0(P3.4)腳輸出溢出脈沖。)腳輸出溢出脈沖。0:不允許:不允許T0(P3.4)腳輸出溢出脈沖。)腳輸出溢出脈沖。1:允許:允許T0(P3.4)腳輸出溢出脈沖,輸出時(shí)鐘頻率)腳輸出溢出脈沖,輸出時(shí)鐘頻率 = T0溢出率溢出率/2 21/50中國石油大學(xué)生理學(xué)院2、輔助寄存器、輔助寄存器AUXR(地址為(地址為8EH,復(fù)位值為,復(fù)位值為00H)S1BRSEXTRAMBRTx12S2SMODBRTRUART_M0 x6T1x12T0 x12位名稱D

32、0D1D2D3D4D5D6D7位號(hào)其中,與其中,與CLKOUT2/P1.0時(shí)鐘輸出有關(guān)的位有:時(shí)鐘輸出有關(guān)的位有:1)BRTx12:CLKOUT2/P1.0的時(shí)鐘輸出頻率控制位。的時(shí)鐘輸出頻率控制位。 0:獨(dú)立波特率發(fā)生器工作在:獨(dú)立波特率發(fā)生器工作在12T模式。模式。CLKOUT2工作在工作在12T模式時(shí)的輸出頻率模式時(shí)的輸出頻率CLKOUT2 = (Fosc/2 ) / 12 / (256 - BRT) 1:獨(dú)立波特率發(fā)生器工作在:獨(dú)立波特率發(fā)生器工作在1T模式。模式。 CLKOUT2工作在工作在1T模式時(shí)的輸出頻率模式時(shí)的輸出頻率CLKOUT2 = ( Fosc/2 ) / (256 -

33、 BRT)2)BRTR:獨(dú)立波特率發(fā)生器運(yùn)行控制位。:獨(dú)立波特率發(fā)生器運(yùn)行控制位。 0:不允許獨(dú)立波特率發(fā)生器運(yùn)行。:不允許獨(dú)立波特率發(fā)生器運(yùn)行。 1:允許獨(dú)立波特率發(fā)生器運(yùn)行。:允許獨(dú)立波特率發(fā)生器運(yùn)行。如果需要從如果需要從CLKOUT2/P1.0腳輸出時(shí)鐘,需要在用戶程序中進(jìn)行下面的設(shè)置:腳輸出時(shí)鐘,需要在用戶程序中進(jìn)行下面的設(shè)置:1)對)對BRT寄存器送寄存器送8位重裝載值(使用位重裝載值(使用“BRT = #reload_data;”語句);語句);2)對)對AUXR寄存器中的寄存器中的BRTR位置位置1,讓獨(dú)立波特率發(fā)生器運(yùn)行;,讓獨(dú)立波特率發(fā)生器運(yùn)行;3)對)對WAKE_CLKO寄

34、存器中的寄存器中的BRTCLKO位置位置1,讓獨(dú)立波特率發(fā)生器的溢出在,讓獨(dú)立波特率發(fā)生器的溢出在P1.0口輸出時(shí)鐘。口輸出時(shí)鐘。22/50中國石油大學(xué)生理學(xué)院7.2.2 可編程時(shí)鐘輸出的編程實(shí)例可編程時(shí)鐘輸出的編程實(shí)例【例例7-3】 設(shè)時(shí)鐘頻率設(shè)時(shí)鐘頻率Fosc=18.432MHz,設(shè)計(jì)程序,從,設(shè)計(jì)程序,從P1.0/CLKOUT2引腳輸出頻率為引腳輸出頻率為124.540KHz的的時(shí)鐘;從時(shí)鐘;從T0(P3.4)引腳輸出頻率為)引腳輸出頻率為125KHz的時(shí)鐘;從的時(shí)鐘;從T1(P3.5)引腳輸出頻率為)引腳輸出頻率為38.4KHz的時(shí)鐘。的時(shí)鐘。解:使用解:使用STC12C5A60S2的

35、可編程時(shí)鐘輸出功能完成所需要求。在下面的程序設(shè)計(jì)中(在此只給出的可編程時(shí)鐘輸出功能完成所需要求。在下面的程序設(shè)計(jì)中(在此只給出C語語言程序),言程序),T0、T1和獨(dú)立波特率發(fā)生器和獨(dú)立波特率發(fā)生器BRT均工作在均工作在1T模式。模式。程序編制如下:程序編制如下:#include stc12c5a.h /包含包含STC12C5A60S2的寄存器定義頭文件的寄存器定義頭文件void main(void) TMOD = 0 x22; /T0和和T1工作在方式工作在方式2,8位自動(dòng)重裝計(jì)數(shù)器位自動(dòng)重裝計(jì)數(shù)器 AUXR = AUXR | 0 x80; /T0工作在工作在1T模式模式 AUXR = AU

36、XR | 0 x40; /T1工作在工作在1T模式模式 AUXR = AUXR | 0 x04; /獨(dú)立波特率發(fā)生器工作在獨(dú)立波特率發(fā)生器工作在1T模式模式/設(shè)置設(shè)置BRT的的8位自動(dòng)重裝計(jì)數(shù)初值,輸出時(shí)鐘頻率位自動(dòng)重裝計(jì)數(shù)初值,輸出時(shí)鐘頻率124.540KHz BRT = (256-74); /設(shè)置設(shè)置T0的的8位自動(dòng)重裝計(jì)數(shù)初值,輸出頻率位自動(dòng)重裝計(jì)數(shù)初值,輸出頻率18432000/2/74 = 124540.54約為約為125KHz TH0 = (256-74);/設(shè)置設(shè)置T1的的8位自動(dòng)重裝計(jì)數(shù)初值,輸出時(shí)鐘頻率位自動(dòng)重裝計(jì)數(shù)初值,輸出時(shí)鐘頻率18432000/2/240 = 3840

37、0Hz TH1 = (256-240); WAKE_CLKO=WAKE_CLKO|0 x07; /允許允許T0,T1,獨(dú)立波特率發(fā)生器輸出時(shí)鐘獨(dú)立波特率發(fā)生器輸出時(shí)鐘 TR0 = 1; /啟動(dòng)啟動(dòng)T0開始計(jì)數(shù),對系統(tǒng)時(shí)鐘進(jìn)行分頻輸出開始計(jì)數(shù),對系統(tǒng)時(shí)鐘進(jìn)行分頻輸出 TR1 = 1; /啟動(dòng)啟動(dòng)T1開始計(jì)數(shù),對系統(tǒng)時(shí)鐘進(jìn)行分頻輸出開始計(jì)數(shù),對系統(tǒng)時(shí)鐘進(jìn)行分頻輸出 AUXR =AUXR|0 x10; /啟動(dòng)啟動(dòng)BRT工作,對系統(tǒng)時(shí)鐘進(jìn)行分頻輸出工作,對系統(tǒng)時(shí)鐘進(jìn)行分頻輸出/至此時(shí)鐘已經(jīng)輸出,用戶可以通過示波器觀看到輸出的時(shí)鐘頻率至此時(shí)鐘已經(jīng)輸出,用戶可以通過示波器觀看到輸出的時(shí)鐘頻率 while(

38、1);23/50中國石油大學(xué)生理學(xué)院7.3 7.3 STC12C5A60S2的可編程計(jì)數(shù)器陣列模塊的可編程計(jì)數(shù)器陣列模塊7.3.1 7.3.1 PCA模塊的結(jié)構(gòu)模塊的結(jié)構(gòu) PCA/PWM含有一個(gè)特殊的含有一個(gè)特殊的16位定時(shí)器,有位定時(shí)器,有2個(gè)個(gè)16位的捕獲位的捕獲/比較模塊與之相連。比較模塊與之相連。16位PCA定時(shí)器/計(jì)數(shù)器模塊0模塊1P1.3/CEX0/PCA0/PWM0P1.4/CEX1/PCA1/PWM1 模塊模塊0連接到連接到P1.3/CCP0(可以通過(可以通過AUXR1寄存器設(shè)置切換到寄存器設(shè)置切換到P4.2/CCP0/MISO口),模塊口),模塊1連接到連接到P1.4/CC

39、P1(可以通過(可以通過AUXR1寄存器設(shè)置切換到寄存器設(shè)置切換到P4.3/CCP1/SCLK口)。每個(gè)模塊可編程工作在口)。每個(gè)模塊可編程工作在4種模式:上升種模式:上升/下降沿捕獲、軟件定下降沿捕獲、軟件定時(shí)器、高速輸出或可調(diào)制脈沖輸出。時(shí)器、高速輸出或可調(diào)制脈沖輸出。 24/50中國石油大學(xué)生理學(xué)院16位位PCA定時(shí)器定時(shí)器/計(jì)數(shù)器計(jì)數(shù)器的結(jié)構(gòu)的結(jié)構(gòu)16位計(jì)數(shù)器Fosc/12)Fosc定時(shí)器0溢出外部輸入ECI(P1.2)IDLECIDLCFCHCL至PCA模塊PCA中斷CRCCF3CCF2CCF1CCF0CPS1CPS0ECFCPS2CMODCCONFosc/2Fosc/4Fosc/8

40、Fosc/6 寄存器寄存器CH和和CL的內(nèi)容是自動(dòng)遞增計(jì)數(shù)的的內(nèi)容是自動(dòng)遞增計(jì)數(shù)的16位位PCA定時(shí)器的值。定時(shí)器的值。PCA定時(shí)器的時(shí)鐘源有定時(shí)器的時(shí)鐘源有以下幾種:以下幾種:1/12振蕩頻率、振蕩頻率、1/8振蕩頻率、振蕩頻率、1/6振蕩頻率、振蕩頻率、1/4振蕩頻率、振蕩頻率、1/2振蕩頻率、振蕩頻振蕩頻率、振蕩頻率、定時(shí)器率、定時(shí)器0溢出或溢出或ECI腳的輸入(腳的輸入(P1.2)。定時(shí)器的計(jì)數(shù)源可通過設(shè)置特殊功能寄存器)。定時(shí)器的計(jì)數(shù)源可通過設(shè)置特殊功能寄存器CMOD的的CPS2、CPS1和和CPS0位選擇其中一種。位選擇其中一種。 CMOD中的中的CIDL位用于控制空閑模式下是否允

41、許停止位用于控制空閑模式下是否允許停止PCA;CMOD中的中的ECF位用于中位用于中斷控制,置位時(shí),使能斷控制,置位時(shí),使能PCA中斷。當(dāng)中斷。當(dāng)PCA定時(shí)器溢出時(shí),定時(shí)器溢出時(shí),PCA計(jì)數(shù)溢出標(biāo)志計(jì)數(shù)溢出標(biāo)志CF置位。置位。 CCON中的中的CR位是位是PCA的運(yùn)行控制位。的運(yùn)行控制位。CR=1時(shí),運(yùn)行時(shí),運(yùn)行PCA。CR=0時(shí),關(guān)閉時(shí),關(guān)閉PCA。 CCON中還包括中還包括PCA定時(shí)器標(biāo)志(定時(shí)器標(biāo)志(CF)以及各個(gè)模塊的標(biāo)志()以及各個(gè)模塊的標(biāo)志(CCF1/CCF0)。當(dāng))。當(dāng)PCA計(jì)數(shù)器溢出時(shí),計(jì)數(shù)器溢出時(shí),CF位置位,如果位置位,如果CMOD寄存器的寄存器的ECF位置位,就產(chǎn)生中斷。

42、位置位,就產(chǎn)生中斷。CF位只能通過軟位只能通過軟件清除。件清除。CCON寄存器中的寄存器中的CCF0是是PCA模塊模塊0的標(biāo)志,的標(biāo)志,CCF1是模塊是模塊1的標(biāo)志。當(dāng)發(fā)生匹配或的標(biāo)志。當(dāng)發(fā)生匹配或比較時(shí)由硬件置位。這些標(biāo)志也只能通過軟件清除。所有模塊共用一個(gè)中斷向量,可以在中比較時(shí)由硬件置位。這些標(biāo)志也只能通過軟件清除。所有模塊共用一個(gè)中斷向量,可以在中斷服務(wù)程序中判斷斷服務(wù)程序中判斷CCF0和和CCF1,以確定到底是哪個(gè)模塊產(chǎn)生了中斷。,以確定到底是哪個(gè)模塊產(chǎn)生了中斷。25/50中國石油大學(xué)生理學(xué)院7.3.2 7.3.2 PCA/PWM模塊的特殊功能寄存器模塊的特殊功能寄存器1、PCA工作

43、模式寄存器工作模式寄存器CMOD(地址為(地址為D9H,復(fù)位值為,復(fù)位值為0XXX0000B)ECFCPS0CPS1CPS2-CIDL位名稱位名稱D0D1D2D3D4D5D6D7位號(hào)位號(hào) 1)CIDL:空閑模式下是否停止空閑模式下是否停止PCA計(jì)數(shù)的控制位。計(jì)數(shù)的控制位。CIDL=0時(shí),空閑時(shí),空閑模式下模式下PCA計(jì)數(shù)器繼續(xù)計(jì)數(shù)。計(jì)數(shù)器繼續(xù)計(jì)數(shù)。CIDL=1時(shí),空閑模式下時(shí),空閑模式下PCA計(jì)數(shù)器停止計(jì)數(shù)。計(jì)數(shù)器停止計(jì)數(shù)。 2)CPS2、CPS1、CPS0:PCA計(jì)數(shù)脈沖源選擇控制位。計(jì)數(shù)脈沖源選擇控制位。PCA計(jì)數(shù)脈計(jì)數(shù)脈沖選擇如表沖選擇如表7-3所示所示(見教材見教材)。 3)ECF:P

44、CA計(jì)數(shù)器溢出中斷使能位。計(jì)數(shù)器溢出中斷使能位。ECF=1時(shí),允許寄存器時(shí),允許寄存器CCON中中CF位的中斷。位的中斷。ECF=0時(shí),禁止寄存器時(shí),禁止寄存器CCON中中CF位的中斷。位的中斷。26/50中國石油大學(xué)生理學(xué)院2、PCA控制寄存器控制寄存器CCON(地址為(地址為D8H,復(fù)位值為,復(fù)位值為00XXXX00B)CCF0CCF1-CRCF位名稱位名稱D0D1D2D3D4D5D6D7位號(hào)位號(hào) 1)CF:PCA計(jì)數(shù)器溢出標(biāo)志位。當(dāng)計(jì)數(shù)器溢出標(biāo)志位。當(dāng)PCA計(jì)數(shù)器溢出時(shí),計(jì)數(shù)器溢出時(shí),CF位由硬位由硬件置位。如果件置位。如果CMOD寄存器的寄存器的ECF位置位,位置位,CF標(biāo)志可用來產(chǎn)生

45、中斷。標(biāo)志可用來產(chǎn)生中斷。CF位可通過硬件或軟件置位,但只能通過軟件清零。位可通過硬件或軟件置位,但只能通過軟件清零。 2)CR:PCA計(jì)數(shù)器的運(yùn)行控制位。通過軟件置位計(jì)數(shù)器的運(yùn)行控制位。通過軟件置位CR位時(shí),啟動(dòng)位時(shí),啟動(dòng)PCA計(jì)數(shù)器計(jì)數(shù);清零計(jì)數(shù)器計(jì)數(shù);清零CR位時(shí),關(guān)閉位時(shí),關(guān)閉PCA計(jì)數(shù)器。計(jì)數(shù)器。 3)CCF1/CCF0:PCA各個(gè)模塊的標(biāo)志(各個(gè)模塊的標(biāo)志(CCF0對應(yīng)模塊對應(yīng)模塊0,CCF1對對應(yīng)模塊應(yīng)模塊1)。當(dāng)發(fā)生匹配或比較時(shí)由硬件置位相應(yīng)的標(biāo)志位。這些標(biāo)志只)。當(dāng)發(fā)生匹配或比較時(shí)由硬件置位相應(yīng)的標(biāo)志位。這些標(biāo)志只能通過軟件清除。能通過軟件清除。27/50中國石油大學(xué)生理學(xué)院

46、3、PCA比較比較/捕獲工作模式寄存器捕獲工作模式寄存器CCAPMn(n=0,1,下同。地址分別對,下同。地址分別對應(yīng)應(yīng)DAH和和DBH,復(fù)位值均為,復(fù)位值均為X0000000B)1)ECOMn:允許比較器功能控制位。允許比較器功能控制位。ECOMn=1時(shí),允許比較器功能。時(shí),允許比較器功能。2)CAPPn:正捕獲控制位。正捕獲控制位。CAPPn=1時(shí),允許上升沿捕獲。時(shí),允許上升沿捕獲。3)CAPNn:負(fù)捕獲控制位。負(fù)捕獲控制位。CAPNn=1時(shí),允許下降沿捕獲。時(shí),允許下降沿捕獲。4)MATn:匹配控制位。匹配控制位。當(dāng)當(dāng)MATn=1時(shí),時(shí),PCA計(jì)數(shù)值與模塊的比較計(jì)數(shù)值與模塊的比較/捕獲

47、寄存器的值匹配時(shí),將置位捕獲寄存器的值匹配時(shí),將置位CCON寄存器的中斷標(biāo)志位寄存器的中斷標(biāo)志位CCFn。5)TOGn:翻轉(zhuǎn)控制位。翻轉(zhuǎn)控制位。當(dāng)當(dāng)TOGn=1時(shí),工作于時(shí),工作于PCA高速輸出模式,高速輸出模式,PCA計(jì)數(shù)器的值與模塊的比較計(jì)數(shù)器的值與模塊的比較/捕獲寄捕獲寄存器的值匹配時(shí),將使存器的值匹配時(shí),將使CEXn腳(腳(CEX0/P3.7,CEX1/P3.5,CEX2/P2.0,CEX3/P2.4) 翻轉(zhuǎn)。翻轉(zhuǎn)。6)PWMn:脈寬調(diào)制模式。當(dāng)脈寬調(diào)制模式。當(dāng)PWMn=1時(shí),時(shí),CEXn腳用作脈寬調(diào)制輸出。腳用作脈寬調(diào)制輸出。7)ECCFn:使能使能CCFn中斷。使能寄存器中斷。使能

48、寄存器CCON的比較的比較/捕獲標(biāo)志捕獲標(biāo)志CCFn,用來產(chǎn),用來產(chǎn)生中斷。生中斷。位名稱位名稱ECCFnPWMnTOGnMATnCAPNnCAPPnECOMn-位號(hào)位號(hào)D0D1D2D3D4D5D6D728/50中國石油大學(xué)生理學(xué)院PCA模塊的工作模式設(shè)定模塊的工作模式設(shè)定16位高速輸出4DHX01100116位軟件定時(shí)器49HX00100116位捕獲模式,由CEXn的跳變觸發(fā)31HX00011X16位捕獲模式,由CEXn的下降沿觸發(fā)11HX00010X16位捕獲模式,由CEXn的上升沿觸發(fā)21HX00001X8位PWM輸出,由低變高或者由高變低均可產(chǎn)生中斷73H11001118位PWM輸出,

49、由高變低可產(chǎn)生中斷53H11001018位PWM輸出,由低變高可產(chǎn)生中斷63H11000118位PWM,無中斷42H0100001無此操作00H0000000模塊功能可設(shè)數(shù)值ECCFnPWMnTOGnMATnCAPNnCAPPnECOMn29/50中國石油大學(xué)生理學(xué)院4、 PCA/PWM模塊寄存器模塊寄存器PCA_PWMn(n=0、1,分別對應(yīng)模塊,分別對應(yīng)模塊0和模塊和模塊1,地,地址分別為址分別為F2H和和F3H,復(fù)位值均為,復(fù)位值均為XXXXXX00B ) 1)EPCnH:在在PWM模式下,與模式下,與CCAPnH組成組成9位數(shù)。位數(shù)。 2)EPCnL:在在PWM模式下,與模式下,與CC

50、APnL組成組成9位數(shù)。位數(shù)。5、PCA的的16計(jì)數(shù)器低計(jì)數(shù)器低8位位CL和高和高8位位CH。它們用于保存。它們用于保存PCA的裝載值。的裝載值。6、PCA捕捉捕捉/比較寄存器比較寄存器CCAPnL(低位字節(jié))和(低位字節(jié))和CCAPnH(高位字節(jié))(高位字節(jié))用于保存各個(gè)模塊的捕捉計(jì)數(shù)值。用于保存各個(gè)模塊的捕捉計(jì)數(shù)值。EPCnLEPCnH-位名稱D0D1D2D3D4D5D6D7位號(hào)30/50中國石油大學(xué)生理學(xué)院7.3.3 7.3.3 PCA/PWM模塊的工作模式模塊的工作模式1 1、 捕獲模式捕獲模式CAPPn捕捉0CEXnECOMnCFCRCCF1CCF0PWMnECCFnCCONPCA中

51、斷CAPNnMATnTOGnCHCLCCAPnLCCAPnHCCAPMn00031/50中國石油大學(xué)生理學(xué)院2 2、1616位軟件定時(shí)器模式位軟件定時(shí)器模式CAPPn匹配0ECOMnCFCRCCF1CCF0PWMnECCFnCCONPCA中斷CAPNnMATnTOGnCHCLCCAPnLCCAPnHCCAPMn10001先寫CCAPnL后寫CCAPnH16位比較器0使能132/50中國石油大學(xué)生理學(xué)院3 3、高速輸出模式、高速輸出模式CAPPn匹配0ECOMnCFCRCCF1CCF0PWMnECCFnCCONPCA中斷CAPNnMATnTOGnCHCLCCAPnLCCAPnHCCAPMn110

52、01先寫CCAPnL后寫CCAPnH16位比較器0使能CEXn翻轉(zhuǎn)133/50中國石油大學(xué)生理學(xué)院4 4、脈寬調(diào)節(jié)模式、脈寬調(diào)節(jié)模式開漏開漏開漏開漏PWM無效無效僅為輸入僅為輸入/高阻高阻強(qiáng)推挽輸出強(qiáng)推挽輸出/強(qiáng)上拉輸出,要加輸出限流電阻強(qiáng)上拉輸出,要加輸出限流電阻1K-10K強(qiáng)推挽輸出強(qiáng)推挽輸出/強(qiáng)上拉輸出強(qiáng)上拉輸出強(qiáng)推挽輸出強(qiáng)推挽輸出/強(qiáng)上拉輸出,要加輸出限流電阻強(qiáng)上拉輸出,要加輸出限流電阻1K-10K弱上拉弱上拉/準(zhǔn)雙向口準(zhǔn)雙向口PWM輸出時(shí)的狀態(tài)輸出時(shí)的狀態(tài)PWM之前的狀態(tài)之前的狀態(tài) I/O口作為口作為PWM使用時(shí)的狀態(tài)使用時(shí)的狀態(tài) CAPPn0ECOMnPWMnECCFnCAPNnM

53、ATnTOGnCCAPMn1009位比較器(0,CL)=(EPCnL,CCAPnL)使能CL溢出輸出1)001(0,CL)(EPCnL,CCAPnL)輸出0PWMnCL0EPCnHCCAPnHEPCnLCCAPnL34/50中國石油大學(xué)生理學(xué)院7.3.4 7.3.4 PCA/PWM模塊的應(yīng)用模塊的應(yīng)用(1)設(shè)置)設(shè)置PCA模塊的工作方式,將控制字寫入模塊的工作方式,將控制字寫入CMOD、CCON和和CCAPMn寄存器。寄存器。(2)設(shè)置捕捉寄存器)設(shè)置捕捉寄存器CCAPnL(低位字節(jié))和(低位字節(jié))和CCAPnH(高位字節(jié))(高位字節(jié))初值。初值。(3)根據(jù)需要,開放)根據(jù)需要,開放PCA中斷

54、,將中斷,將ECF/ECCF0/ECCF1需要置需要置1的的置置1,并將,并將EA置置1。(4)啟動(dòng))啟動(dòng)PCA 計(jì)數(shù)器(計(jì)數(shù)器(CH,CL)計(jì)數(shù)(使)計(jì)數(shù)(使CR=1)。)。35/50中國石油大學(xué)生理學(xué)院【例例7-47-4】利用利用PCAPCA模塊擴(kuò)展外部中斷。將模塊擴(kuò)展外部中斷。將P1.3P1.3(PCAPCA模塊模塊0 0的外部輸入)擴(kuò)展為下的外部輸入)擴(kuò)展為下降沿觸發(fā)的外部中斷,將降沿觸發(fā)的外部中斷,將P1.4P1.4(PCAPCA模塊模塊1 1的外部輸入)擴(kuò)展為上升沿的外部輸入)擴(kuò)展為上升沿/ /下降沿都下降沿都可觸發(fā)的外部中斷。當(dāng)可觸發(fā)的外部中斷。當(dāng)P1.3P1.3出現(xiàn)下降沿時(shí)產(chǎn)生

55、中斷,對出現(xiàn)下降沿時(shí)產(chǎn)生中斷,對 P1.5 P1.5 取反;當(dāng)取反;當(dāng)P1.4P1.4出現(xiàn)出現(xiàn)下降沿或上升沿時(shí)都產(chǎn)生中斷,對下降沿或上升沿時(shí)都產(chǎn)生中斷,對P1.6P1.6取反。(取反。(P1.5P1.5和和P1.6P1.6可連接可連接LEDLED指示燈指指示燈指示狀態(tài)。)示狀態(tài)。)解:當(dāng)解:當(dāng)PCA模塊工作在捕獲模式時(shí),對外部輸入模塊工作在捕獲模式時(shí),對外部輸入CEXn的跳變進(jìn)行采樣。當(dāng)采樣的跳變進(jìn)行采樣。當(dāng)采樣到有效跳變時(shí),到有效跳變時(shí),PCA硬件將硬件將PCA計(jì)數(shù)器陣列寄存器(計(jì)數(shù)器陣列寄存器(CH和和CL)的值裝載到捕獲)的值裝載到捕獲寄存器(寄存器(CCAPnH和和CCAPnL)中。如

56、果)中。如果CCON中的中的CCFn位和位和CCAPMn中的中的ECCFn位被置位,將產(chǎn)生中斷。由此,可以將位被置位,將產(chǎn)生中斷。由此,可以將PCA模塊作為擴(kuò)展外部中斷使用。模塊作為擴(kuò)展外部中斷使用。按照要求,設(shè)置控制字時(shí),按照要求,設(shè)置控制字時(shí),PCA模塊模塊0應(yīng)設(shè)為下降沿捕獲(即應(yīng)設(shè)為下降沿捕獲(即CAPP0=0并且并且CAPN0=1),),PCA模塊模塊1應(yīng)設(shè)為上升沿和下降沿都能捕獲的方式(即應(yīng)設(shè)為上升沿和下降沿都能捕獲的方式(即CAPP1=1并且并且CAPN1=1)。)。36/50中國石油大學(xué)生理學(xué)院匯編語言程序清單如下:匯編語言程序清單如下:$INCLUDE (STC12C5A.IN

57、C) ;包含包含STC12C5A60S2寄存器定義文件寄存器定義文件LED_PCA0 EQU P1.5LED_PCA1 EQU P1.6ORG 0000H LJMP MAIN ;轉(zhuǎn)主程序轉(zhuǎn)主程序ORG 003BH ;PCA中斷中斷LJMP PCA_ISRORG 0050H MAIN: MOV SP, #70H;初始化初始化 PCAMOV CMOD,#10000000B ;空閑模式下停止空閑模式下停止PCA計(jì)數(shù)器工作計(jì)數(shù)器工作 ;PCA時(shí)鐘源為時(shí)鐘源為FOSC/12,禁止,禁止PCA計(jì)數(shù)器溢出時(shí)中斷計(jì)數(shù)器溢出時(shí)中斷MOV CCON, #00H ;清零清零 PCA計(jì)數(shù)器溢出中斷請求標(biāo)志位計(jì)數(shù)器溢出

58、中斷請求標(biāo)志位CF ;CR = 0, 不允許不允許PCA計(jì)數(shù)器計(jì)數(shù)計(jì)數(shù)器計(jì)數(shù);清零清零 PCA各模塊中斷請求標(biāo)志位各模塊中斷請求標(biāo)志位CCFnMOV CL, #00H ;清零清零PCA計(jì)數(shù)器計(jì)數(shù)器 MOV CH, #00H MOV CCAPM0, #11H ;設(shè)置設(shè)置PCA模塊模塊0下降沿觸發(fā)捕捉功能下降沿觸發(fā)捕捉功能, ECCF0=1MOV CCAPM1, #31H ;模塊模塊1上升上升/下降沿均可觸發(fā)捕捉功能下降沿均可觸發(fā)捕捉功能,ECCF1=1SETB EA ;開整個(gè)單片機(jī)所有中斷共享的總中斷控制位開整個(gè)單片機(jī)所有中斷共享的總中斷控制位SETB CR ;啟動(dòng)啟動(dòng)PCA計(jì)數(shù)器計(jì)數(shù)器(CH,

59、CL)計(jì)數(shù)計(jì)數(shù)SJMP $ ;循環(huán)等待中斷循環(huán)等待中斷37/50中國石油大學(xué)生理學(xué)院;- PCA中斷服務(wù)程序中斷服務(wù)程序-PCA_ISR:JNB CCF0, Not_PCA0 ;如果如果CCF0不等于不等于1,則不是,則不是PCA模塊模塊0中斷中斷 ;直接去判是否是直接去判是否是PCA模塊模塊1中斷中斷;PCA模塊模塊0中斷服務(wù)程序中斷服務(wù)程序 CPL LED_PCA0 ;LED_PCA0取反取反,表示表示PCA模塊模塊0發(fā)生了一次中斷發(fā)生了一次中斷CLR CCF0 ;清清PCA模塊模塊0中斷標(biāo)志中斷標(biāo)志Not_PCA0: JNB CCF1, PCA_Exit ;CCF1不等于不等于1,不是,

60、不是PCA模塊模塊1中斷,直接退出中斷,直接退出 ;PCA模塊模塊1中斷服務(wù)程序中斷服務(wù)程序CPL LED_PCA1 ;LED_PCA1取反取反, 表示表示PCA模塊模塊1發(fā)生了一次中斷發(fā)生了一次中斷CLR CCF1 ;清清PCA模塊模塊1中斷標(biāo)志中斷標(biāo)志PCA_Exit:RETI END38/50中國石油大學(xué)生理學(xué)院C語言版本的程序如下:語言版本的程序如下:#include “stc12c5a.h” /包含包含STC12C5A60S2寄存器定義文件寄存器定義文件sbit LED_PCA0=P15;sbit LED_PCA1=P16;void main (void)CMOD=0 x80; /空

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論