版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、增強(qiáng)型8051單片機(jī)實(shí)用開(kāi)發(fā)技術(shù)1/16增強(qiáng)型8051單片機(jī)實(shí)用開(kāi)發(fā)技術(shù)2/16 STC12C5A60S2單片機(jī)集成有單片機(jī)集成有8路路10位高速模數(shù)轉(zhuǎn)換器位高速模數(shù)轉(zhuǎn)換器ADC),速度可達(dá)到),速度可達(dá)到250KHz25萬(wàn)次萬(wàn)次/秒,可做溫度檢測(cè)、壓秒,可做溫度檢測(cè)、壓力檢測(cè)、電池電壓檢測(cè)、按鍵掃描、頻譜力檢測(cè)、電池電壓檢測(cè)、按鍵掃描、頻譜檢測(cè)等。檢測(cè)等。增強(qiáng)型8051單片機(jī)實(shí)用開(kāi)發(fā)技術(shù)3/16 STC12C5A60S2 STC12C5A60S2單片機(jī)片內(nèi)集成單片機(jī)片內(nèi)集成8 8通道通道1010位模位模數(shù)轉(zhuǎn)換器數(shù)轉(zhuǎn)換器ADCADC)。)。ADCADC輸入通道與輸入通道與P1P1口復(fù)用,上口復(fù)
2、用,上電復(fù)位后電復(fù)位后P1P1口為弱上拉型口為弱上拉型I/OI/O口,用戶可以通過(guò)口,用戶可以通過(guò)軟件設(shè)置將軟件設(shè)置將8 8路中的任何一路設(shè)置為路中的任何一路設(shè)置為A/DA/D轉(zhuǎn)換,不轉(zhuǎn)換,不需作為需作為A/D A/D 使用的口可繼續(xù)作為使用的口可繼續(xù)作為I/OI/O口使用??谑褂谩T鰪?qiáng)型8051單片機(jī)實(shí)用開(kāi)發(fā)技術(shù)4/169.1.1 模數(shù)轉(zhuǎn)換器的結(jié)構(gòu)模數(shù)轉(zhuǎn)換器的結(jié)構(gòu)STC12C5A60S2單片機(jī)的模數(shù)轉(zhuǎn)換器由多路選擇開(kāi)關(guān)、比較器、逐次比較寄存器、單片機(jī)的模數(shù)轉(zhuǎn)換器由多路選擇開(kāi)關(guān)、比較器、逐次比較寄存器、10位位ADC、轉(zhuǎn)、轉(zhuǎn)換結(jié)果寄存器換結(jié)果寄存器ADC_RES和和ADC_RESL以及以及AD
3、C控制寄存器控制寄存器ADC_CONTR構(gòu)成。構(gòu)成。ADC7/P1.7ADC6/P1.6ADC5/P1.5ADC4/P1.4ADC3/P1.3ADC2/P1.2ADC1/P1.1ADC0/P1.0比較器模擬輸入信號(hào)通道選擇開(kāi)關(guān)10-bit DACA/D轉(zhuǎn)換結(jié)果寄存器ADC_RES和ADC_RESLCHS2/CHS1/CHS0ADC_POWERSPEED1 SPEED0ADC_FLAG ADC_STARTCHS2CHS1CHS0逐次比較寄存器ADC控制寄存器ADC_CONTR增強(qiáng)型8051單片機(jī)實(shí)用開(kāi)發(fā)技術(shù)5/16 STC12C5A60S2 STC12C5A60S2單片機(jī)單片機(jī)A/DA/D轉(zhuǎn)換模
4、塊的參考電壓源是輸入工作電壓轉(zhuǎn)換模塊的參考電壓源是輸入工作電壓VccVcc,所以一般不用外接參考,所以一般不用外接參考電壓源。如三端穩(wěn)壓電路電壓源。如三端穩(wěn)壓電路78057805的輸出電壓是的輸出電壓是5V5V,但實(shí)際電壓可能是,但實(shí)際電壓可能是4.88V4.88V到到4.96V4.96V,如果用戶需要的,如果用戶需要的精度比較高,可在應(yīng)用產(chǎn)品出廠前將實(shí)際測(cè)出的工作電壓值記錄在單片機(jī)內(nèi)部的精度比較高,可在應(yīng)用產(chǎn)品出廠前將實(shí)際測(cè)出的工作電壓值記錄在單片機(jī)內(nèi)部的EEPROMEEPROM里面,以供里面,以供程序校正使用。程序校正使用。 如果如果VccVcc不穩(wěn)定例如電池供電的系統(tǒng)中,電池電壓常常在不
5、穩(wěn)定例如電池供電的系統(tǒng)中,電池電壓常常在5.3V-4.2V5.3V-4.2V之間漂移),之間漂移), 則需則需要在要在8 8路路A/DA/D轉(zhuǎn)換的一個(gè)通道外接一個(gè)穩(wěn)定的參考電壓源,來(lái)計(jì)算出此時(shí)的工作電壓轉(zhuǎn)換的一個(gè)通道外接一個(gè)穩(wěn)定的參考電壓源,來(lái)計(jì)算出此時(shí)的工作電壓VccVcc,再計(jì)算出,再計(jì)算出其他幾路其他幾路A/DA/D轉(zhuǎn)換通道的電壓。例如,可在轉(zhuǎn)換通道的電壓。例如,可在ADCADC轉(zhuǎn)換通道的第七通道外接一個(gè)轉(zhuǎn)換通道的第七通道外接一個(gè) 1.25V 1.25V的基準(zhǔn)參考電壓的基準(zhǔn)參考電壓源,由此求出此時(shí)的工作電壓源,由此求出此時(shí)的工作電壓VccVcc,再計(jì)算出其它幾路,再計(jì)算出其它幾路A/DA
6、/D轉(zhuǎn)換通道的電壓。轉(zhuǎn)換通道的電壓。 增強(qiáng)型8051單片機(jī)實(shí)用開(kāi)發(fā)技術(shù)6/161P1口模擬功能控制寄存器口模擬功能控制寄存器P1ASF地址為地址為9DH,復(fù)位值為,復(fù)位值為00H)2ADC控制寄存器控制寄存器ADC_CONTR地址為地址為BCH,復(fù)位值為,復(fù)位值為00H)CHS0CHS1CHS2ADC_STARTADC_FLAGSPEED0SPEED1ADC_POWER位名稱位名稱D0D1D2D3D4D5D6D7位號(hào)位號(hào)1ADC_POWER:ADC電源控制位。電源控制位。 0:關(guān)閉:關(guān)閉ADC電源。電源。 1:打開(kāi):打開(kāi)ADC電源。電源。 2SPEED1、SPEED0:ADC轉(zhuǎn)換速度控制位。各
7、種設(shè)置如表轉(zhuǎn)換速度控制位。各種設(shè)置如表9-1所示。所示。3ADC_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)換完成后由該位申請(qǐng)產(chǎn)生中斷,還是由軟件查詢?cè)摌?biāo)志位判斷轉(zhuǎn)換完成后由該位申請(qǐng)產(chǎn)生中斷,還是由軟件查詢?cè)摌?biāo)志位判斷A/D轉(zhuǎn)換是轉(zhuǎn)換是否結(jié)束,當(dāng)否結(jié)束,當(dāng)A/D轉(zhuǎn)換完成后,轉(zhuǎn)換完成后,ADC_FLAG = 1,一定要軟件清,一定要軟件清0。4ADC_START:A/D轉(zhuǎn)換啟動(dòng)控制位,轉(zhuǎn)換啟動(dòng)控制位,ADC_START=1,開(kāi)始轉(zhuǎn)換;,開(kāi)始轉(zhuǎn)換;ADC_START=0,停止轉(zhuǎn)換。停止轉(zhuǎn)換。5
8、CHS2、CHS1、CHS0:模擬輸入通道選擇,如表:模擬輸入通道選擇,如表9-2所示。所示。P10ASFP11ASFP12ASFP13ASFP14ASFP15ASFP16ASFP17ASF位名稱D0D1D2D3D4D5D6D7位號(hào)如果要使用相應(yīng)口的模擬功能,需將如果要使用相應(yīng)口的模擬功能,需將P1ASF特殊功能寄存器中的相應(yīng)位置為特殊功能寄存器中的相應(yīng)位置為1。如,若要使。如,若要使用用P1.6的模擬量功能,則需要將的模擬量功能,則需要將P16ASF設(shè)置為設(shè)置為1。(注意,。(注意,P1ASF寄存器不能位尋址,可以使寄存器不能位尋址,可以使用匯編語(yǔ)言指令用匯編語(yǔ)言指令ORL P1ASF, #
9、40H,也可以使用,也可以使用C語(yǔ)言語(yǔ)句語(yǔ)言語(yǔ)句P1ASF |= 0 x40;)增強(qiáng)型8051單片機(jī)實(shí)用開(kāi)發(fā)技術(shù)7/163A/D轉(zhuǎn)換結(jié)果寄存器轉(zhuǎn)換結(jié)果寄存器ADC_RES、ADC_RESL特殊功能寄存器特殊功能寄存器ADC_RES地址為地址為BDH,復(fù)位值為,復(fù)位值為00H和和ADC_RESL地址為地址為BEH,復(fù)位值為,復(fù)位值為00H用于保存用于保存A/D轉(zhuǎn)換結(jié)果。轉(zhuǎn)換結(jié)果。A/D轉(zhuǎn)換結(jié)果存儲(chǔ)格式由輔助寄存器轉(zhuǎn)換結(jié)果存儲(chǔ)格式由輔助寄存器AUXR1地址為地址為A2H,復(fù)位值為,復(fù)位值為00H中的中的ADRJ控制,控制,ADRJ是是AUXR1中的中的D2位。位。(1當(dāng)當(dāng)ADRJ=0時(shí),時(shí),10位
10、位A/D轉(zhuǎn)換結(jié)果的高轉(zhuǎn)換結(jié)果的高8位放在位放在ADC_RES寄存器,低寄存器,低2位放在位放在ADC_RESL寄存器。存儲(chǔ)格式如下:寄存器。存儲(chǔ)格式如下:ADRJ=0AUXR1ADC_RES0ADC_RES1ADC_RESLADC_RES2ADC_RES3ADC_RES4ADC_RES5ADC_RES6ADC_RES7ADC_RES8ADC_RES9ADC_RESD0D1D2D3D4D5D6D7增強(qiáng)型8051單片機(jī)實(shí)用開(kāi)發(fā)技術(shù)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_R
11、ES寄存器的低寄存器的低2位位,低,低8位放在位放在ADC_RESL寄存器。存儲(chǔ)格式如下:寄存器。存儲(chǔ)格式如下:ADRJ=1AUXR1ADC_RES0ADC_RES1ADC_RES2ADC_RES3ADC_RES4ADC_RES5ADC_RES6ADC_RES7ADC_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:
12、0 = 256 Vin / VccADRJ = 1時(shí),取時(shí),取10位結(jié)果位結(jié)果 (ADC_RES1:0,ADC_RESL7:0) = 1024 Vin / VccVin為模擬輸入通道輸入電壓,為模擬輸入通道輸入電壓,Vcc為單片機(jī)實(shí)際工作電壓,用單片機(jī)工作電壓作為為單片機(jī)實(shí)際工作電壓,用單片機(jī)工作電壓作為模擬參考電壓。模擬參考電壓。 4與與A/D轉(zhuǎn)換中斷有關(guān)的寄存器轉(zhuǎn)換中斷有關(guān)的寄存器 中斷允許控制寄存器中斷允許控制寄存器IE中的中的EADC位位D5位用于開(kāi)放位用于開(kāi)放ADC中斷,中斷,EA位位D7位用于開(kāi)放位用于開(kāi)放CPU中斷;中斷優(yōu)先級(jí)寄存器中斷;中斷優(yōu)先級(jí)寄存器IP中的中的PADC位位D
13、5位和位和IPH中的中的PADCH位位D5位用于設(shè)置位用于設(shè)置A/D中斷的優(yōu)先級(jí)。在中斷的優(yōu)先級(jí)。在中斷服務(wù)程序中,要使用軟件將中斷服務(wù)程序中,要使用軟件將A/D中斷標(biāo)志位中斷標(biāo)志位ADC_FLAG也是也是A/D轉(zhuǎn)轉(zhuǎn)換結(jié)束標(biāo)志位清換結(jié)束標(biāo)志位清0。 增強(qiáng)型8051單片機(jī)實(shí)用開(kāi)發(fā)技術(shù)9/169.2 模數(shù)轉(zhuǎn)換器的應(yīng)用模數(shù)轉(zhuǎn)換器的應(yīng)用STC12C5A60S2單片機(jī)單片機(jī)ADC模塊的使用編程要點(diǎn)如下:模塊的使用編程要點(diǎn)如下:1打開(kāi)打開(kāi)ADC電源,第一次使用時(shí)要打開(kāi)內(nèi)部模擬電源設(shè)置電源,第一次使用時(shí)要打開(kāi)內(nèi)部模擬電源設(shè)置ADC_CONTR)。)。2適當(dāng)延時(shí),等內(nèi)部模擬電源穩(wěn)定。一般延時(shí)適當(dāng)延時(shí),等內(nèi)部模
14、擬電源穩(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中的中的CHS2CHS0)。)。5根據(jù)需要設(shè)置轉(zhuǎn)換結(jié)果存儲(chǔ)格式設(shè)置根據(jù)需要設(shè)置轉(zhuǎn)換結(jié)果存儲(chǔ)格式設(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ù)處理。
15、如果是多通道模擬量進(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)阻有關(guān),如果輸入電壓信號(hào)源的內(nèi)阻在即可,與輸入電壓源的內(nèi)阻有關(guān),如果輸入電壓信號(hào)源的內(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ù)程序中讀取
16、ADC轉(zhuǎn)換結(jié)果,并將轉(zhuǎn)換結(jié)果,并將ADC中斷請(qǐng)求標(biāo)志中斷請(qǐng)求標(biāo)志ADC_FLAG清零。清零。 增強(qiáng)型8051單片機(jī)實(shí)用開(kāi)發(fā)技術(shù)10/16【例【例9-1】編程實(shí)現(xiàn)利用】編程實(shí)現(xiàn)利用STC12C5A60S2單片機(jī)單片機(jī)ADC通道通道2采集外部模擬電壓信號(hào),采集外部模擬電壓信號(hào),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ù)位后,的值。由于
17、復(fù)位后,ADRJ=0,因而,按照,因而,按照ADC的編程要點(diǎn)進(jìn)行初始化后,直接判斷的編程要點(diǎn)進(jìn)行初始化后,直接判斷ADC_FLAG標(biāo)志是否為標(biāo)志是否為1,若為若為1,則讀出,則讀出ADC_RES寄存器的值,并存入寄存器的值,并存入30H即可;若為即可;若為0,則繼續(xù)等待。,則繼續(xù)等待。 匯編語(yǔ)言程序代碼如下:匯編語(yǔ)言程序代碼如下:$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,
18、#70H ;設(shè)置堆棧設(shè)置堆棧 ORL ADC_CONTR, #80H ;開(kāi)開(kāi)A/D轉(zhuǎn)換電源轉(zhuǎn)換電源,第一次使用時(shí)要打開(kāi)內(nèi)部模擬電源第一次使用時(shí)要打開(kāi)內(nèi)部模擬電源 MOV A, #20H LCALL DELAY ;開(kāi)開(kāi)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í) 增強(qiáng)型8051單
19、片機(jī)實(shí)用開(kāi)發(fā)技術(shù)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, 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:
20、 ;延時(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í)201906個(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 ;
21、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 增強(qiáng)型8051單片機(jī)實(shí)用開(kāi)發(fā)技術(shù)12/16C語(yǔ)言程序代碼如下:語(yǔ)言程序代碼如下:#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; unsi
22、gned char status; ADC_CONTR|=0 x80; /開(kāi)開(kāi)A/D轉(zhuǎn)換電源轉(zhuǎn)換電源,第一次使用時(shí)要打開(kāi)內(nèi)部模擬電源第一次使用時(shí)要打開(kāi)內(nèi)部模擬電源 for (i=0;i10000;i+);/適當(dāng)延時(shí)適當(dāng)延時(shí) 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é)束
23、轉(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é)果 增強(qiáng)型8051單片機(jī)實(shí)用開(kāi)發(fā)技術(shù)13/16【例【例9-2】 編程實(shí)現(xiàn)利用編程實(shí)現(xiàn)利用STC12C5A60S2單片機(jī)單片機(jī)ADC通道通道2采集外部模擬電壓信號(hào),采集外部模擬電壓信號(hào),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í),
24、可設(shè)置解:按照編程要點(diǎn)進(jìn)行初始化時(shí),可設(shè)置ADRJ=1。在中斷服務(wù)程序中讀出。在中斷服務(wù)程序中讀出ADC_RES寄存寄存器的值,屏蔽高器的值,屏蔽高6位后存入位后存入31H單元,讀出單元,讀出ADC_RESL寄存器的值,存入寄存器的值,存入30H單元。單元。匯編語(yǔ)言程序代碼如下:匯編語(yǔ)言程序代碼如下:$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 OR
25、G 002BH LJMP ADC_ISR ;ADC中斷服務(wù)程序入口中斷服務(wù)程序入口 ORG 0050H MAIN: MOV SP, #70H ;設(shè)置堆棧設(shè)置堆棧 ORL ADC_CONTR, #80H ;開(kāi)開(kāi)A/D轉(zhuǎn)換電源轉(zhuǎn)換電源,第一次使用時(shí)要打開(kāi)內(nèi)部模擬電源第一次使用時(shí)要打開(kāi)內(nèi)部模擬電源 MOV A, #20H LCALL DELAY ;開(kāi)開(kāi)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)換通道
26、MOV A, #05H LCALL DELAY ;如果切換如果切換A/D轉(zhuǎn)換通道轉(zhuǎn)換通道,則需要加延時(shí)則需要加延時(shí) ORL AUXR1,#04H ;設(shè)置設(shè)置ADC轉(zhuǎn)換結(jié)果存儲(chǔ)格式轉(zhuǎn)換結(jié)果存儲(chǔ)格式ADRJ=1) ORL ADC_CONTR, #00001000B ;啟動(dòng)啟動(dòng)A/D轉(zhuǎn)換轉(zhuǎn)換 SETB EADC ;EADC=1, 開(kāi)放開(kāi)放ADC的中斷控制位的中斷控制位 增強(qiáng)型8051單片機(jī)實(shí)用開(kāi)發(fā)技術(shù)14/16 SETB EA ;開(kāi)放開(kāi)放CPU總中斷總中斷 SJMP $ ;循環(huán)等待中斷循環(huán)等待中斷ADC_ISR: ;ADC中斷服務(wù)程序入口中斷服務(wù)程序入口 ANL ADC_CONTR, #111001
27、11B ;將將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, 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 ;將寄存
28、器組將寄存器組0 的的 R3 入棧入棧 PUSH 04 ;將寄存器組將寄存器組0 的的 R4 入棧入棧 MOV R4, A DELAY_LOOP0: ;DELAY_LOOP0循環(huán)延時(shí)循環(huán)延時(shí)201906個(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, DE
29、LAY_LOOP0 ;4個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期 POP 04 POP 03 POP 02 RET END增強(qiáng)型8051單片機(jī)實(shí)用開(kāi)發(fā)技術(shù)15/16C語(yǔ)言程序代碼如下:語(yǔ)言程序代碼如下:#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; ADC_CONTR|=0 x80; /開(kāi)開(kāi)A/D轉(zhuǎn)換電源轉(zhuǎn)換電源,第一次使用時(shí)要打開(kāi)內(nèi)部模擬電源第一次使用時(shí)要打開(kāi)內(nèi)部模擬電源 for (i=
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版國(guó)有土地臨時(shí)用地合同3篇
- 二零二五版高級(jí)別別墅居住權(quán)購(gòu)置與買賣合同3篇
- 醫(yī)院2025年度物流配送服務(wù)合同2篇
- 二零二五年度交通樞紐“四害”滅治與旅客健康服務(wù)合同3篇
- 二零二五版數(shù)字藝術(shù)版權(quán)保護(hù)與侵權(quán)處理合同范本3篇
- 二零二五版宅基地使用權(quán)轉(zhuǎn)讓及農(nóng)村土地流轉(zhuǎn)收益分配合同2篇
- 二零二五年戶外廣告牌場(chǎng)地租賃及新媒體營(yíng)銷合同3篇
- 二零二五年投影機(jī)采購(gòu)與燈光音響租賃服務(wù)合同3篇
- 二零二五版建筑工程項(xiàng)目招投標(biāo)代理中介費(fèi)合同3篇
- 二零二五版汽車零部件鈑金加工及機(jī)加服務(wù)采購(gòu)合同模板3篇
- 退學(xué)費(fèi)和解協(xié)議書(shū)模板
- 2024至2030年中國(guó)對(duì)氯甲苯行業(yè)市場(chǎng)全景調(diào)研及發(fā)展趨勢(shì)分析報(bào)告
- 智能教育輔助系統(tǒng)運(yùn)營(yíng)服務(wù)合同
- 心功能分級(jí)及護(hù)理
- DLT 572-2021 電力變壓器運(yùn)行規(guī)程
- 重慶育才中學(xué)2025屆化學(xué)九上期末教學(xué)質(zhì)量檢測(cè)試題含解析
- 成都市2022級(jí)(2025屆)高中畢業(yè)班摸底測(cè)試(零診)數(shù)學(xué)試卷(含答案)
- 【云南省中藥材出口現(xiàn)狀、問(wèn)題及對(duì)策11000字(論文)】
- 服裝板房管理制度
- 河北省興隆縣盛嘉恒信礦業(yè)有限公司李杖子硅石礦礦山地質(zhì)環(huán)境保護(hù)與治理恢復(fù)方案
- 第七章力與運(yùn)動(dòng)第八章壓強(qiáng)第九章浮力綜合檢測(cè)題(一)-2023-2024學(xué)年滬科版物理八年級(jí)下學(xué)期
評(píng)論
0/150
提交評(píng)論