模數(shù)轉(zhuǎn)換教程_第1頁
模數(shù)轉(zhuǎn)換教程_第2頁
模數(shù)轉(zhuǎn)換教程_第3頁
模數(shù)轉(zhuǎn)換教程_第4頁
模數(shù)轉(zhuǎn)換教程_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、中國石油大學(xué)勝利學(xué)院1/16中國石油大學(xué)勝利學(xué)院2/16 STC12C5A60S2單片機(jī)集成有單片機(jī)集成有8路路10位高速模數(shù)轉(zhuǎn)換器(位高速模數(shù)轉(zhuǎn)換器(ADC),速度可達(dá)到),速度可達(dá)到250KHz(25萬次萬次/秒,可做溫度檢測、壓秒,可做溫度檢測、壓力檢測、電池電壓檢測、按鍵掃描、頻譜力檢測、電池電壓檢測、按鍵掃描、頻譜檢測等。檢測等。中國石油大學(xué)勝利學(xué)院3/16 STC12C5A60S2單片機(jī)片內(nèi)集成單片機(jī)片內(nèi)集成8通道通道10位模數(shù)轉(zhuǎn)換器(位模數(shù)轉(zhuǎn)換器(ADC)。)。ADC輸入通道輸入通道與與P1口復(fù)用,上電復(fù)位后口復(fù)用,上電復(fù)位后P1口為弱上拉型口為弱上拉型I/O口,用戶可以通過軟件

2、設(shè)置將口,用戶可以通過軟件設(shè)置將8路中的路中的任何一路設(shè)置為任何一路設(shè)置為A/D轉(zhuǎn)換,不需作為轉(zhuǎn)換,不需作為A/D 使用的口可繼續(xù)作為使用的口可繼續(xù)作為I/O口使用??谑褂谩V袊痛髮W(xué)勝利學(xué)院4/169.1.1 模數(shù)轉(zhuǎn)換器的結(jié)構(gòu)模數(shù)轉(zhuǎn)換器的結(jié)構(gòu)STC12C5A60S2單片機(jī)的模數(shù)轉(zhuǎn)換器由多路選擇開關(guān)、比較器、逐次比較寄存器、單片機(jī)的模數(shù)轉(zhuǎn)換器由多路選擇開關(guān)、比較器、逐次比較寄存器、10位位ADC、轉(zhuǎn)、轉(zhuǎn)換結(jié)果寄存器(換結(jié)果寄存器(ADC_RES和和ADC_RESL)以及)以及ADC控制寄存器控制寄存器ADC_CONTR構(gòu)成。構(gòu)成。ADC7/P1.7ADC6/P1.6ADC5/P1.5ADC4

3、/P1.4ADC3/P1.3ADC2/P1.2ADC1/P1.1ADC0/P1.0比較器模擬輸入信號通道選擇開關(guān)10-bit DACA/D轉(zhuǎn)換結(jié)果寄存器ADC_RES和ADC_RESLCHS2/CHS1/CHS0ADC_POWERSPEED1 SPEED0ADC_FLAG ADC_STARTCHS2CHS1CHS0逐次比較寄存器ADC控制寄存器ADC_CONTR中國石油大學(xué)勝利學(xué)院5/16 STC12C5A60S2單片機(jī)單片機(jī)A/D轉(zhuǎn)換模塊的參考電壓源是轉(zhuǎn)換模塊的參考電壓源是輸入工作電壓輸入工作電壓Vcc,所以一般不用外接參考電壓源。如三,所以一般不用外接參考電壓源。如三端穩(wěn)壓電路端穩(wěn)壓電路7

4、805的輸出電壓是的輸出電壓是5V,但實(shí)際電壓可能是,但實(shí)際電壓可能是4.88V到到4.96V,如果用戶需要的精度比較高,可在應(yīng)用產(chǎn),如果用戶需要的精度比較高,可在應(yīng)用產(chǎn)品出廠前將實(shí)際測出的工作電壓值記錄在單片機(jī)內(nèi)部的品出廠前將實(shí)際測出的工作電壓值記錄在單片機(jī)內(nèi)部的EEPROM里面,以供程序校正使用。里面,以供程序校正使用。 如果如果Vcc不穩(wěn)定(例如電池供電的系統(tǒng)中,電池電壓不穩(wěn)定(例如電池供電的系統(tǒng)中,電池電壓常常在常常在5.3V-4.2V之間漂移),之間漂移), 則需要在則需要在8路路A/D轉(zhuǎn)換的一轉(zhuǎn)換的一個(gè)通道外接一個(gè)穩(wěn)定的參考電壓源,來計(jì)算出此時(shí)的工作個(gè)通道外接一個(gè)穩(wěn)定的參考電壓源,

5、來計(jì)算出此時(shí)的工作電壓電壓Vcc,再計(jì)算出其他幾路,再計(jì)算出其他幾路A/D轉(zhuǎn)換通道的電壓。例如,轉(zhuǎn)換通道的電壓。例如,可在可在ADC轉(zhuǎn)換通道的第七通道外接一個(gè)轉(zhuǎn)換通道的第七通道外接一個(gè) 1.25V的基準(zhǔn)參考的基準(zhǔn)參考電壓源,由此求出此時(shí)的工作電壓電壓源,由此求出此時(shí)的工作電壓Vcc,再計(jì)算出其它幾,再計(jì)算出其它幾路路A/D轉(zhuǎn)換通道的電壓。轉(zhuǎn)換通道的電壓。 中國石油大學(xué)勝利學(xué)院6/161P1口口模擬功能控制寄存器模擬功能控制寄存器P1ASF(地址為(地址為9DH,復(fù)位值為,復(fù)位值為00H)2ADC控制寄存器控制寄存器ADC_CONTR(地址為(地址為BCH,復(fù)位值為,復(fù)位值為00H)CHS0CH

6、S1CHS2ADC_STARTADC_FLAGSPEED0SPEED1ADC_POWER位名稱位名稱D0D1D2D3D4D5D6D7位號位號1)ADC_POWER:ADC電源控制位。電源控制位。 0:關(guān)閉:關(guān)閉ADC電源。電源。 1:打開:打開ADC電源。電源。 2)SPEED1、SPEED0:ADC轉(zhuǎn)換速度控制位。各種設(shè)置如表轉(zhuǎn)換速度控制位。各種設(shè)置如表9-1所示。所示。3)ADC_FLAG:A/D轉(zhuǎn)換結(jié)束標(biāo)志位。轉(zhuǎn)換結(jié)束標(biāo)志位。A/D轉(zhuǎn)換完成后,轉(zhuǎn)換完成后,ADC_FLAG = 1,要由軟件,要由軟件清清0。不管。不管A/D轉(zhuǎn)換完成后由該位申請產(chǎn)生中斷,還是由軟件查詢該標(biāo)志位判斷轉(zhuǎn)換完成后

7、由該位申請產(chǎn)生中斷,還是由軟件查詢該標(biāo)志位判斷A/D轉(zhuǎn)換是轉(zhuǎn)換是否結(jié)束,當(dāng)否結(jié)束,當(dāng)A/D轉(zhuǎn)換完成后,轉(zhuǎn)換完成后,ADC_FLAG = 1,一定要軟件清,一定要軟件清0。4)ADC_START:A/D轉(zhuǎn)換啟動(dòng)控制位,轉(zhuǎn)換啟動(dòng)控制位,ADC_START=1,開始轉(zhuǎn)換;,開始轉(zhuǎn)換;ADC_START=0,停止轉(zhuǎn)換。停止轉(zhuǎn)換。5)CHS2、CHS1、CHS0:模擬輸入通道選擇,如表:模擬輸入通道選擇,如表9-2所示。所示。P10ASFP11ASFP12ASFP13ASFP14ASFP15ASFP16ASFP17ASF位名稱D0D1D2D3D4D5D6D7位號如果要使用相應(yīng)口的模擬功能,需將如果要使用

8、相應(yīng)口的模擬功能,需將P1ASF特殊功能寄存器中的相應(yīng)位置為特殊功能寄存器中的相應(yīng)位置為1。如,若要使。如,若要使用用P1.6的模擬量功能,則需要將的模擬量功能,則需要將P16ASF設(shè)置為設(shè)置為1。(注意,。(注意,P1ASF寄存器不能位尋址,可以使寄存器不能位尋址,可以使用匯編語言指令用匯編語言指令ORL P1ASF, #40H,也可以使用,也可以使用C語言語句語言語句P1ASF |= 0 x40;)中國石油大學(xué)勝利學(xué)院7/163A/D轉(zhuǎn)換結(jié)果寄存器轉(zhuǎn)換結(jié)果寄存器ADC_RES、ADC_RESL特殊功能寄存器特殊功能寄存器ADC_RES(地址為(地址為BDH,復(fù)位值為,復(fù)位值為00H)和)和

9、ADC_RESL(地址為(地址為BEH,復(fù)位值為,復(fù)位值為00H)用于保存)用于保存A/D轉(zhuǎn)換結(jié)果。轉(zhuǎn)換結(jié)果。A/D轉(zhuǎn)換結(jié)果存儲格式由輔助寄存器轉(zhuǎn)換結(jié)果存儲格式由輔助寄存器AUXR1(地址為(地址為A2H,復(fù)位值為,復(fù)位值為00H)中的)中的ADRJ控制,控制,ADRJ是是AUXR1中的中的D2位。位。(1)當(dāng))當(dāng)ADRJ=0時(shí),時(shí),10位位A/D轉(zhuǎn)換結(jié)果的高轉(zhuǎn)換結(jié)果的高8位放在位放在ADC_RES寄存器,低寄存器,低2位放在位放在ADC_RESL寄存器。存儲格式如下:寄存器。存儲格式如下:ADRJ=0AUXR1ADC_RES0ADC_RES1ADC_RESLADC_RES2ADC_RES3A

10、DC_RES4ADC_RES5ADC_RES6ADC_RES7ADC_RES8ADC_RES9ADC_RESD0D1D2D3D4D5D6D7中國石油大學(xué)勝利學(xué)院8/163A/D轉(zhuǎn)換結(jié)果寄存器轉(zhuǎn)換結(jié)果寄存器ADC_RES、ADC_RESL(2)當(dāng))當(dāng)ADRJ=1時(shí),時(shí),10位位A/D轉(zhuǎn)換結(jié)果的最高轉(zhuǎn)換結(jié)果的最高2位放在位放在ADC_RES寄存器的低寄存器的低2位位,低,低8位放在位放在ADC_RESL寄存器。存儲格式如下:寄存器。存儲格式如下:ADRJ=1AUXR1ADC_RES0ADC_RES1ADC_RES2ADC_RES3ADC_RES4ADC_RES5ADC_RES6ADC_RES7AD

11、C_RESLADC_RES8ADC_RES9ADC_RESD0D1D2D3D4D5D6D7模模/數(shù)轉(zhuǎn)換結(jié)果計(jì)算公式如下:數(shù)轉(zhuǎn)換結(jié)果計(jì)算公式如下:ADRJ = 0時(shí),取時(shí),取10位結(jié)果位結(jié)果 (ADC_RES7:0,ADC_RESL1:0) = 1024 Vin / VccADRJ = 0時(shí),取時(shí),取8位結(jié)果位結(jié)果 ADC_RES7:0 = 256 Vin / VccADRJ = 1時(shí),取時(shí),取10位結(jié)果位結(jié)果 (ADC_RES1:0,ADC_RESL7:0) = 1024 Vin / VccVin為模擬輸入通道輸入電壓,為模擬輸入通道輸入電壓,Vcc為單片機(jī)實(shí)際工作電壓,用單片機(jī)工作電壓作為為

12、單片機(jī)實(shí)際工作電壓,用單片機(jī)工作電壓作為模擬參考電壓。模擬參考電壓。 4與與A/D轉(zhuǎn)換中斷有關(guān)的寄存器轉(zhuǎn)換中斷有關(guān)的寄存器 中斷允許控制寄存器中斷允許控制寄存器IE中的中的EADC位(位(D5位)用于開放位)用于開放ADC中斷,中斷,EA位位(D7位)用于開放位)用于開放CPU中斷;中斷優(yōu)先級寄存器中斷;中斷優(yōu)先級寄存器IP中的中的PADC位(位(D5位)和位)和IPH中的中的PADCH位(位(D5位)用于設(shè)置位)用于設(shè)置A/D中斷的優(yōu)先級。在中斷服務(wù)程序中,要使用中斷的優(yōu)先級。在中斷服務(wù)程序中,要使用軟件將軟件將A/D中斷標(biāo)志位中斷標(biāo)志位ADC_FLAG(也是(也是A/D轉(zhuǎn)換結(jié)束標(biāo)志位)清轉(zhuǎn)

13、換結(jié)束標(biāo)志位)清0。 中國石油大學(xué)勝利學(xué)院9/169.2 模數(shù)轉(zhuǎn)換器的應(yīng)用模數(shù)轉(zhuǎn)換器的應(yīng)用STC12C5A60S2單片機(jī)單片機(jī)ADC模塊的使用編程要點(diǎn)如下:模塊的使用編程要點(diǎn)如下:1)打開)打開ADC電源,第一次使用時(shí)要打開內(nèi)部模擬電源(設(shè)置電源,第一次使用時(shí)要打開內(nèi)部模擬電源(設(shè)置ADC_CONTR)。)。2)適當(dāng)延時(shí),等內(nèi)部模擬電源穩(wěn)定。一般延時(shí))適當(dāng)延時(shí),等內(nèi)部模擬電源穩(wěn)定。一般延時(shí)1ms以內(nèi)即可。以內(nèi)即可。3)設(shè)置)設(shè)置P1口中的相應(yīng)口線作為口中的相應(yīng)口線作為A/D轉(zhuǎn)換通道(設(shè)置轉(zhuǎn)換通道(設(shè)置P1ASF寄存器)。寄存器)。4)選擇)選擇ADC通道(設(shè)置通道(設(shè)置ADC_CONTR中的中

14、的CHS2CHS0)。)。5)根據(jù)需要設(shè)置轉(zhuǎn)換結(jié)果存儲格式(設(shè)置)根據(jù)需要設(shè)置轉(zhuǎn)換結(jié)果存儲格式(設(shè)置AUXR1中的中的ADRJ位)。位)。6)查詢)查詢A/D轉(zhuǎn)換結(jié)束標(biāo)志轉(zhuǎn)換結(jié)束標(biāo)志ADC_FLAG,判斷,判斷A/D轉(zhuǎn)換是否完成,若完成,則讀出結(jié)轉(zhuǎn)換是否完成,若完成,則讀出結(jié)果(結(jié)果保存在果(結(jié)果保存在ADC_RES和和ADC_RESL寄存器中),并進(jìn)行數(shù)據(jù)處理。如果是多通寄存器中),并進(jìn)行數(shù)據(jù)處理。如果是多通道模擬量進(jìn)行轉(zhuǎn)換,則更換道模擬量進(jìn)行轉(zhuǎn)換,則更換A/D轉(zhuǎn)換通道后要適當(dāng)延時(shí),使輸入電壓穩(wěn)定,延時(shí)量取轉(zhuǎn)換通道后要適當(dāng)延時(shí),使輸入電壓穩(wěn)定,延時(shí)量取20s200s即可,與輸入電壓源的內(nèi)阻有

15、關(guān),如果輸入電壓信號源的內(nèi)阻在即可,與輸入電壓源的內(nèi)阻有關(guān),如果輸入電壓信號源的內(nèi)阻在10K 以下,可不加延時(shí);如果是單通道模擬量轉(zhuǎn)換,則不需要更換以下,可不加延時(shí);如果是單通道模擬量轉(zhuǎn)換,則不需要更換A/D轉(zhuǎn)換通道,也就不轉(zhuǎn)換通道,也就不需要加延時(shí)。需要加延時(shí)。8)若采用中斷方式,還需進(jìn)行中斷設(shè)置()若采用中斷方式,還需進(jìn)行中斷設(shè)置(EADC置置1,EA置置1)。)。9)在中斷服務(wù)程序中讀?。┰谥袛喾?wù)程序中讀取ADC轉(zhuǎn)換結(jié)果,并將轉(zhuǎn)換結(jié)果,并將ADC中斷請求標(biāo)志中斷請求標(biāo)志ADC_FLAG清零。清零。 中國石油大學(xué)勝利學(xué)院10/16【例例9-1】編程實(shí)現(xiàn)利用編程實(shí)現(xiàn)利用STC12C5A60

16、S2單片機(jī)單片機(jī)ADC通道通道2采集外部模擬電壓信號,采集外部模擬電壓信號,8位精度,位精度,采用查詢方式循環(huán)進(jìn)行轉(zhuǎn)換,并將轉(zhuǎn)換結(jié)果保存于采用查詢方式循環(huán)進(jìn)行轉(zhuǎn)換,并將轉(zhuǎn)換結(jié)果保存于30H單元中。假設(shè)時(shí)鐘頻率為單元中。假設(shè)時(shí)鐘頻率為18.432MHz。 解:解:取取8位精度時(shí),可設(shè)置位精度時(shí),可設(shè)置ADRJ=0,直接使用轉(zhuǎn)換結(jié)果寄存器,直接使用轉(zhuǎn)換結(jié)果寄存器ADC_RES的值。由于復(fù)位后,的值。由于復(fù)位后,ADRJ=0,因此,按照,因此,按照ADC的編程要點(diǎn)進(jìn)行初始化后,直接判斷的編程要點(diǎn)進(jìn)行初始化后,直接判斷ADC_FLAG標(biāo)志是否為標(biāo)志是否為1,若為若為1,則讀出,則讀出ADC_RES寄存

17、器的值,并存入寄存器的值,并存入30H即可;若為即可;若為0,則繼續(xù)等待。,則繼續(xù)等待。 匯編語言程序代碼如下:匯編語言程序代碼如下:$INCLUDE (STC12C5A.INC) ;包含包含STC12C5A60S2單片機(jī)寄存器定義文件單片機(jī)寄存器定義文件ADC_DAT EQU 30H ;A/D轉(zhuǎn)換結(jié)果轉(zhuǎn)換結(jié)果 ORG 0000H LJMP MAIN ORG 0050H MAIN: MOV SP, #70H ;設(shè)置堆棧設(shè)置堆棧 ORL ADC_CONTR, #80H ;開開A/D轉(zhuǎn)換電源轉(zhuǎn)換電源,第一次使用時(shí)要打開內(nèi)部模擬電源第一次使用時(shí)要打開內(nèi)部模擬電源 MOV A, #20H LCALL

18、DELAY ;開開A/D轉(zhuǎn)換電源后要加適當(dāng)延時(shí),轉(zhuǎn)換電源后要加適當(dāng)延時(shí),1ms以內(nèi)即可以內(nèi)即可 MOV P1ASF,#04H ;設(shè)置設(shè)置P1.2的模擬量功能的模擬量功能 MOV ADC_CONTR,#11100010B ;選擇選擇P1.2作為作為A/D轉(zhuǎn)換通道轉(zhuǎn)換通道 MOV A, #05H LCALL DELAY ;如果切換如果切換A/D轉(zhuǎn)換通道轉(zhuǎn)換通道,則需要加延時(shí)則需要加延時(shí) 中國石油大學(xué)勝利學(xué)院11/16WAIT_AD: ORL ADC_CONTR, #00001000B ;啟動(dòng)啟動(dòng)A/D轉(zhuǎn)換轉(zhuǎn)換 MOV A, #00010000B ;判斷判斷A/D轉(zhuǎn)換是否完成轉(zhuǎn)換是否完成 ANL A

19、, ADC_CONTR JZ WAIT_AD ;A/D 轉(zhuǎn)換尚未完成轉(zhuǎn)換尚未完成, 繼續(xù)等待繼續(xù)等待 ANL ADC_CONTR, #11100111B ;將將ADC_FLAG清零清零 MOV A, ADC_RES ;讀取讀取A/D轉(zhuǎn)換結(jié)果轉(zhuǎn)換結(jié)果 MOV ADC_DAT, A ;保存保存A/D轉(zhuǎn)換結(jié)果轉(zhuǎn)換結(jié)果 LJMP WAIT_AD ;等待下一次轉(zhuǎn)換完成等待下一次轉(zhuǎn)換完成DELAY: ;延時(shí)子程序延時(shí)子程序 PUSH 02 ;將寄存器組將寄存器組0 的的 R2 入棧入棧 PUSH 03 ;將寄存器組將寄存器組0 的的 R3 入棧入棧 PUSH 04 ;將寄存器組將寄存器組0 的的 R4 入

20、棧入棧 MOV R4, A DELAY_LOOP0: ;DELAY_LOOP0循環(huán)延時(shí)循環(huán)延時(shí)200406個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期 MOV R3, #200 ;2個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期Delay_LOOP1: ;DELAY_LOOP1循環(huán)延時(shí)循環(huán)延時(shí)1002個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期 MOV R2, #249 ;2個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期DELAY_LOOP: DJNZ R2, DELAY_LOOP ;4個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期 DJNZ R3, DELAY_LOOP1 ;4個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期 DJNZ R4, DELAY_LOOP0 ;4個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期 POP 04 POP 03 POP 02 RET

21、END 中國石油大學(xué)勝利學(xué)院12/16C語言程序代碼如下:語言程序代碼如下:#include “stc12c5a.h” /包含包含STC12C5A60S2單片機(jī)寄存器定義文件單片機(jī)寄存器定義文件unsigned char data adc_dat _at_ 0 x30; /A/D轉(zhuǎn)換結(jié)果變量轉(zhuǎn)換結(jié)果變量void main(void) unsigned long i; unsigned char status; ADC_CONTR|=0 x80; /開開A/D轉(zhuǎn)換電源轉(zhuǎn)換電源,第一次使用時(shí)要打開內(nèi)部模擬電源第一次使用時(shí)要打開內(nèi)部模擬電源 for (i=0;i10000;i+);/適當(dāng)延時(shí)適當(dāng)延時(shí)

22、 P1ASF=0 x04; /選擇選擇P1.2作為作為A/D轉(zhuǎn)換通道轉(zhuǎn)換通道 ADC_CONTR=0 xE2; for (i=0;i10000;i+); /適當(dāng)延時(shí)適當(dāng)延時(shí) while(1) /循環(huán)進(jìn)行循環(huán)進(jìn)行A/D 轉(zhuǎn)換轉(zhuǎn)換 ADC_CONTR|=0 x08; /重新啟動(dòng)重新啟動(dòng) A/D 轉(zhuǎn)換轉(zhuǎn)換 status=0; while(status=0) /等待等待A/D轉(zhuǎn)換結(jié)束轉(zhuǎn)換結(jié)束 status=ADC_CONTR&0 x10; ADC_CONTR&=0 xE7; /將將ADC_FLAG清零清零 adc_dat=ADC_RES; /保存保存A/D轉(zhuǎn)換結(jié)果轉(zhuǎn)換結(jié)果 中國石油大學(xué)

23、勝利學(xué)院13/16【例例9-2】 編程實(shí)現(xiàn)利用編程實(shí)現(xiàn)利用STC12C5A60S2單片機(jī)單片機(jī)ADC通道通道2采集外部模擬電壓信號,采集外部模擬電壓信號,10位精位精度,采用中斷方式進(jìn)行轉(zhuǎn)換,并將轉(zhuǎn)換結(jié)果保存于度,采用中斷方式進(jìn)行轉(zhuǎn)換,并將轉(zhuǎn)換結(jié)果保存于30H和和31H單元中。假設(shè)時(shí)鐘頻率為單元中。假設(shè)時(shí)鐘頻率為18.432MHz。解:按照編程要點(diǎn)進(jìn)行初始化時(shí),可設(shè)置解:按照編程要點(diǎn)進(jìn)行初始化時(shí),可設(shè)置ADRJ=1。在中斷服務(wù)程序中讀出。在中斷服務(wù)程序中讀出ADC_RES寄存寄存器的值,屏蔽高器的值,屏蔽高6位后存入位后存入31H單元,讀出單元,讀出ADC_RESL寄存器的值,存入寄存器的值,

24、存入30H單元。單元。匯編語言程序代碼如下:匯編語言程序代碼如下:$INCLUDE (STC12C5A.INC) ;包含包含STC12C5A60S2單片機(jī)寄存器定義文件單片機(jī)寄存器定義文件ADC_HI EQU 31H ;A/D轉(zhuǎn)換結(jié)果高轉(zhuǎn)換結(jié)果高2位位ADC_LOW EQU 30H ;A/D轉(zhuǎn)換結(jié)果低轉(zhuǎn)換結(jié)果低8位位 ORG 0000H LJMP MAIN ORG 002BH LJMP ADC_ISR ;ADC中斷服務(wù)程序入口中斷服務(wù)程序入口 ORG 0050H MAIN: MOV SP, #70H ;設(shè)置堆棧設(shè)置堆棧 ORL ADC_CONTR, #80H ;開開A/D轉(zhuǎn)換電源轉(zhuǎn)換電源,第一

25、次使用時(shí)要打開內(nèi)部模擬電源第一次使用時(shí)要打開內(nèi)部模擬電源 MOV A, #20H LCALL DELAY ;開開A/D轉(zhuǎn)換電源后要加適當(dāng)延時(shí),轉(zhuǎn)換電源后要加適當(dāng)延時(shí),1ms以內(nèi)即可以內(nèi)即可 MOV P1ASF,#04H ;設(shè)置設(shè)置P1.2的模擬量功能的模擬量功能 MOV ADC_CONTR,#11100010B ;選擇選擇P1.2作為作為A/D轉(zhuǎn)換通道轉(zhuǎn)換通道 MOV A, #05H LCALL DELAY ;如果切換如果切換A/D轉(zhuǎn)換通道轉(zhuǎn)換通道,則需要加延時(shí)則需要加延時(shí) ORL AUXR1,#04H ;設(shè)置設(shè)置ADC轉(zhuǎn)換結(jié)果存儲格式(轉(zhuǎn)換結(jié)果存儲格式(ADRJ=1) ORL ADC_CON

26、TR, #00001000B ;啟動(dòng)啟動(dòng)A/D轉(zhuǎn)換轉(zhuǎn)換 SETB EADC ;EADC=1, 開放開放ADC的中斷控制位的中斷控制位 中國石油大學(xué)勝利學(xué)院14/16 SETB EA ;開放開放CPU總中斷總中斷 SJMP $ ;循環(huán)等待中斷循環(huán)等待中斷ADC_ISR: ;ADC中斷服務(wù)程序入口中斷服務(wù)程序入口 ANL ADC_CONTR, #11100111B ;將將ADC_FLAG清零清零 MOV A, ADC_RES ;讀取讀取A/D轉(zhuǎn)換結(jié)果高轉(zhuǎn)換結(jié)果高2位位 ANL A,#03H ;屏蔽高屏蔽高6位位 MOV ADC_HI, A ;保存保存A/D轉(zhuǎn)換結(jié)果高轉(zhuǎn)換結(jié)果高2位位 MOV A,

27、ADC_RESL ;讀取讀取A/D轉(zhuǎn)換結(jié)果低轉(zhuǎn)換結(jié)果低8位位 MOV ADC_LOW, A ;保存保存A/D轉(zhuǎn)換結(jié)果低轉(zhuǎn)換結(jié)果低8位位 ORL ADC_CONTR, #00001000B ;重新啟動(dòng)重新啟動(dòng)A/D轉(zhuǎn)換轉(zhuǎn)換 RETIDELAY: ;延時(shí)子程序延時(shí)子程序 PUSH 02 ;將寄存器組將寄存器組0 的的 R2 入棧入棧 PUSH 03 ;將寄存器組將寄存器組0 的的 R3 入棧入棧 PUSH 04 ;將寄存器組將寄存器組0 的的 R4 入棧入棧 MOV R4, A DELAY_LOOP0: ;DELAY_LOOP0循環(huán)延時(shí)循環(huán)延時(shí)200406個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期 MOV R3, #2

28、00 ;2個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期Delay_LOOP1: ;DELAY_LOOP1循環(huán)延時(shí)循環(huán)延時(shí)1002個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期 MOV R2, #249 ;2個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期DELAY_LOOP: DJNZ R2, DELAY_LOOP ;4個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期 DJNZ R3, DELAY_LOOP1 ;4個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期 DJNZ R4, DELAY_LOOP0 ;4個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期 POP 04 POP 03 POP 02 RET END中國石油大學(xué)勝利學(xué)院15/16C語言程序代碼如下:語言程序代碼如下:#include “stc12c5a.h” /包含包含STC12C5A60S2單片機(jī)寄存器定義文件單片機(jī)寄存器定義文件unsigned char data adc_hi _at_ 0 x31; /A/D轉(zhuǎn)換結(jié)果變量高轉(zhuǎn)換結(jié)果變量高2位位unsigned char data adc_low _at_ 0 x30; /A/D轉(zhuǎn)換結(jié)果變量低轉(zhuǎn)換結(jié)果變量低8位位void main(void) unsigned long i; A

溫馨提示

  • 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)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論