試驗(yàn)5STC單片機(jī)ADC轉(zhuǎn)換試驗(yàn)-V20170317_第1頁(yè)
試驗(yàn)5STC單片機(jī)ADC轉(zhuǎn)換試驗(yàn)-V20170317_第2頁(yè)
試驗(yàn)5STC單片機(jī)ADC轉(zhuǎn)換試驗(yàn)-V20170317_第3頁(yè)
試驗(yàn)5STC單片機(jī)ADC轉(zhuǎn)換試驗(yàn)-V20170317_第4頁(yè)
試驗(yàn)5STC單片機(jī)ADC轉(zhuǎn)換試驗(yàn)-V20170317_第5頁(yè)
已閱讀5頁(yè),還剩9頁(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)介

.實(shí)驗(yàn)?zāi)康膶W(xué)習(xí)STC12C5A單片機(jī)ADC知識(shí);.實(shí)驗(yàn)設(shè)備硬件:12號(hào)節(jié)點(diǎn),串口線;軟件:KeiluVision4編譯軟件,STC下載軟件STC_ISP;芯片手冊(cè):配套光盤'附件'芯片手冊(cè)\S件單片機(jī)手冊(cè)源碼路徑:hex路徑:.實(shí)驗(yàn)原理A/D相關(guān)寄存器介紹與A/D轉(zhuǎn)換有關(guān)的寄存器如表3.1所示:表3.1A/D相關(guān)寄存器P1ASF:P1口的模擬功能控制器。STC12C5A16S2系列單片機(jī)的A/D轉(zhuǎn)換口,在P1口(P1.7-P1.0),上電復(fù)位后P1口默認(rèn)為弱上拉型I/O口,用戶可以通過軟件設(shè)置將8路中的任何一路設(shè)置為A/D轉(zhuǎn)換,不需作為A/D使用的P1口可繼續(xù)作為I/O口使用(建議只作為輸入)。需作為A/D使用的口需先將P1ASF特殊功能寄存器中的相應(yīng)位置為‘1’,將相應(yīng)的口設(shè)置為模擬功能。P1ASF寄存器的定義如表3.2所示:表3.2P1ASF寄存器定義ADC_CONTR:ADC控制寄存器。該寄存器的描述如表3.3所示:表3.3ADC_CONTR寄存器定義對(duì)ADC_CONTR寄存器的操作建議使用直接賦值語(yǔ)句,不要使用“與”和“或”語(yǔ)句。ADC_POWER:?ADC電源控制位。0:關(guān)閉A/D轉(zhuǎn)換器電源1:打開A/D轉(zhuǎn)換器電源建議進(jìn)入空閑模式時(shí),將ADC電源關(guān)閉,即ADC_POWER?=0。啟動(dòng)A/D轉(zhuǎn)換前一定要確認(rèn)A/D電源已打開,A/D轉(zhuǎn)換結(jié)束后關(guān)閉A/D電源可降低功耗,也可不關(guān)閉。初次打開內(nèi)部A/D轉(zhuǎn)換模擬電源,需適當(dāng)延時(shí),等內(nèi)部模擬電源穩(wěn)定后,再啟動(dòng)A/D轉(zhuǎn)換。建議啟動(dòng)A/D轉(zhuǎn)換后,在A/D轉(zhuǎn)換結(jié)束之前,不改變?nèi)魏蜪/O口的狀態(tài),有利于高精度A/D?轉(zhuǎn)換,若能將定時(shí)器/串行口/中斷系統(tǒng)關(guān)閉更好。SPEED1,SPEED0:模數(shù)轉(zhuǎn)換器轉(zhuǎn)換速度控制位,其描述如表3.4所示:表3.4SPEED1、SPEED0描述人口^尸1人6:模數(shù)轉(zhuǎn)換器轉(zhuǎn)換結(jié)束標(biāo)志位,當(dāng)A/D轉(zhuǎn)換完成后,ADC_FLAG=1,要由軟件清0。不管是A/D轉(zhuǎn)換完成后由該位申請(qǐng)產(chǎn)生中斷,還是由軟件查詢?cè)摌?biāo)志位A/D轉(zhuǎn)換是否結(jié)束,當(dāng)A/D轉(zhuǎn)換完成后,ADC_FLAG=1,一定要軟件清0。ADC_START:模數(shù)轉(zhuǎn)換器(ADC)轉(zhuǎn)換啟動(dòng)控制位,設(shè)置為“1”時(shí),開始轉(zhuǎn)換,轉(zhuǎn)換結(jié)束后為0。CHS2/CHS?/CHS0:模擬輸入通道選擇,CHS2/CHS1/CH0描述如表3.5所示:圖3.5CHS2/CHS1/CH0定義ADC_RES、ADC_RESL:ADC結(jié)果寄存器。該寄存器用于存A/D轉(zhuǎn)換結(jié)果,其定義如表3.6所示:表3.6ADC_RES、ADC_RESL寄存器定義AUXR1寄存器的ADRJ位是A/D轉(zhuǎn)換結(jié)果寄存器(ADC_RES,ADC_RESL)的數(shù)據(jù)格式調(diào)整控制位。當(dāng)ADRJ=0時(shí),10位A/D轉(zhuǎn)換結(jié)果的高8位存放在ADC_RES中,低2位存放在ADC_RESL的低2位中,如表3.7所示:表3.7ADRJ=0時(shí)AD結(jié)果此時(shí),如果用戶需需取完整10位結(jié)果,按下面公式計(jì)算:如果用戶只需要8位結(jié)果,按下面公式計(jì)算:式中,Vin為模擬輸入通道輸入電壓,Vcc為單片機(jī)實(shí)際工作電壓,用單片機(jī)工作電壓作為模擬參考電壓。當(dāng)ADRJ=1時(shí),10位A/D轉(zhuǎn)換結(jié)果的高2位存放在ADC_RES的低2位中,低8位存放在ADC_RESL中。此時(shí),如果用戶需要完整10位結(jié)果,按下面公式計(jì)算:式中,Vin為模擬輸入通道輸入電壓,Vcc為單片機(jī)實(shí)際工作電壓,用單片機(jī)工作電壓作為模擬參考電壓。IE:中斷允許控制寄存器。該寄存器的描述如表3.8所示:表3.8IE寄存器定義EA:CPU的中斷開放標(biāo)志,EA=1,CPU開放中斷,EA=0,CPU屏蔽所有的中斷申請(qǐng)。EA的作用是使中斷允許形成多級(jí)控制。即各中斷源首先受EA控制;其次還受各中斷源自己的中斷允許控制位控制。EADC:A/D轉(zhuǎn)換中斷允許位EADC=1,允許A/D轉(zhuǎn)換中斷EADC=0,禁止A/D轉(zhuǎn)換中斷如果要允許A/D轉(zhuǎn)換中斷則需要將相應(yīng)的控制位置1:1、將EADC置1,允許ADC中斷,這是ADC中斷的中斷控制位。2、將EA置1,打開單片機(jī)總中斷控制位,此位不打開,也是無(wú)法產(chǎn)生ADC中斷的A/D中斷服務(wù)程序中要用軟件清A/D中斷請(qǐng)求標(biāo)志位ADC_FLAG(也是A/D轉(zhuǎn)換結(jié)束標(biāo)志位)。IPH、玨:中斷優(yōu)先級(jí)控制寄存器,該寄存器的定義如表3.9所示:表3.9IPH、IP寄存器定義PADCH,PADC,A/D轉(zhuǎn)換中斷優(yōu)先級(jí)控制位。當(dāng)PADCH=0且PADC=0時(shí),A/D轉(zhuǎn)換中斷為最低優(yōu)先級(jí)中斷(優(yōu)先級(jí)0)當(dāng)PADCH=0且PADC=1時(shí),A/D轉(zhuǎn)換中斷為較低優(yōu)先級(jí)中斷(優(yōu)先級(jí)1)當(dāng)PADCH=1且PADC=0時(shí),A/D轉(zhuǎn)換中斷為較高優(yōu)先級(jí)中斷(優(yōu)先級(jí)2)當(dāng)PADCH=1且PADC=1時(shí),A/D轉(zhuǎn)換中斷為最高優(yōu)先級(jí)中斷(優(yōu)先級(jí)3)4.實(shí)驗(yàn)步驟編寫實(shí)驗(yàn)源代碼文件打開Keil集成開發(fā)環(huán)境,打開下的工程文件,編譯源碼,生成ADC.hex可執(zhí)行文件,該可執(zhí)行文件自動(dòng)保存在目錄下。(注意:請(qǐng)根據(jù)該目錄下ADC.hex文件的生成時(shí)間,判斷該文件是否是自己剛剛編譯完成的)將12號(hào)節(jié)點(diǎn)的開關(guān)S1撥打到左邊,讓STC單片機(jī)與DB9相連。根據(jù)配套光盤'第三方應(yīng)用軟件萬(wàn)TC用SP件TC-ISP軟件使用說(shuō)明書實(shí)驗(yàn)源代碼解析ADC.c源代碼*A**A**A**A**A**A**A**A**A**A**A**A**A**A**X**X**X**X**A**A**A**A**x*/晶振頻率 :選取用RC11.0592MHz文件名 :ADC.c功能說(shuō)明 :STC12C5A16$2單片機(jī)的A/D轉(zhuǎn)換演示實(shí)驗(yàn)變更記錄 :2013.05.5變更內(nèi)容:新建造*A**A**X**X**X**X**X**X**A**X**X**X**A**A**A**X**X**X**X**A**A**A**A**A**A**X**X**X**X**X**X**A**X**X**X**X**X**X**X**X**X**X**A**A**A**A**A**A**X**X**X**X**X**X**A**x**x**x**x**x**x**x*///*************用戶系統(tǒng)配置**************/

/*************以下宏定義用戶請(qǐng)勿修改**************/#includereg51.H#defineucharunsignedchar#defineuintunsignedint/***************特殊寄存器聲明c***********************/sfrP1ASF=0x9D;〃12C5A60人口/$2系列模擬輸入瓜口或LVD)選擇sfrADC_CONTR=0xBC;//帶AD系列sfrADC_RES=0xBD;//帶AD系列sfrADC_RESL=0xBE;〃帶AD系列#defineADC_OFF()ADC_CONTR=0〃AD轉(zhuǎn)換關(guān)#defineADC_ON(1<<7) 〃ADC轉(zhuǎn)換開#defineADC_90T(3<<5)#defineADC_180T(2<<5)#defineADC_360T(1<<5)#defineADC_90T(3<<5)#defineADC_180T(2<<5)#defineADC_360T(1<<5)#defineADC_540T0defineADC_FLAG(1<<4)defineADC_START (1<<defineADC_CH0 0defineADC_CH1 1defineADC_CH2 2defineADC_CH3 3defineADC_CH4 4defineADC_CH5 5//90個(gè)時(shí)鐘周期轉(zhuǎn)換一次//18個(gè)時(shí)鐘周期轉(zhuǎn)換一次//36個(gè)時(shí)鐘周期轉(zhuǎn)換一次〃540個(gè)時(shí)鐘周期轉(zhuǎn)換一次軟件清0/開始ADC轉(zhuǎn)換〃P1_0作為AD轉(zhuǎn)換通道〃P1_1作為AD轉(zhuǎn)換通道〃P1_2作為AD轉(zhuǎn)換通道〃P1_3作為AD轉(zhuǎn)換通道〃P1_4作為AD轉(zhuǎn)換通道〃P1_5作為AD轉(zhuǎn)換通道#defineADCCH66〃P1_6作為#defineADCCH66〃P1_6作為AD轉(zhuǎn)換通道#defineADCCH77〃P1_7作為AD轉(zhuǎn)換通道/*************本地變量聲明**************/sbitP_TXD1=P31;/*************本地函數(shù)聲明**************/voidTx1Send(uchardat);voidPrintString(unsignedcharcode*puts);voiddelay_ms(unsignedcharms);uintadc10_start(ucharchannel);//channel=0~7/ *A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**X**X**X**X**A**A**A**A**A**A**A**A**A**A**A**x**x**x*/函數(shù)名:main(void)輸入:無(wú)輸出:無(wú)功能描述:串口初始化參數(shù)為6008N1.值通過串口輸出A**A**X**X**X**X**X**X**X**A**A**A**A**A**A**X**X**X**X**A**A**A**A**A**A**X**X**X**X**X**X**A**X**X**X**X**X**X**X**X**X**X**A**A**A**A**A**A**X**X**X**X**X**X**A**x**x**x**x**x**x**x*//voidmain(void){uintj;P1ASF=(1<<ADC_CH0); //STC12C5A16S2的模擬輸入依口轉(zhuǎn)換通道選擇ADC_ON;ADC_CONTR=ADC_360TADC_ON;while(1)delay_ms(250);delay_ms(250);delay_ms(250);delay_ms(250);j=adc10_start(0);//P1_0開啟AD轉(zhuǎn)換TxlSend('A');TxlSend('D');Tx1Send('0');Tx1Send('=');Tx1Send(j/1000+'0');Tx1Send(j%1000/100+'0');Tx1Send(j%100/10+'0');Tx1Send(j%10+'0');Tx1Send(0x0d);Tx1Send(0x0a);}}/ *A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**x**x**x*/函數(shù)名:adc10_start(ucharchannel)輸入:需要轉(zhuǎn)換的ADC通道輸出:無(wú)功能描述:串口初始化參數(shù)為6008N1.值通過串口輸出*A**A**X**X**X**X**X**X**A**X**X**X**A**A**A**X**X**X**X**A**A**A**A**A**A**X**X**X**X**X**X**A**X**X**X**X**X**X**X**X**X**X**A**A**A**A**A**A**X**X**X**X**X**X**A**x**x**x**x**x**x**x*//uintadc10_start(ucharchannel){uintadc;uchari;ADC_RES=0; //AD轉(zhuǎn)換結(jié)果高位寄存器清零ADC_RESL=0; //AD轉(zhuǎn)換結(jié)果低位寄存器清零ADC_CONTR=(ADC_CONTR&0xe0)|ADC_START|channel;//AD轉(zhuǎn)換控制寄存器設(shè)置i=250;do(if(ADC_CONTR&ADC_FLAG) //如果AD轉(zhuǎn)換結(jié)束{ADC_CONTR&=~ADC_FLAG; /軟件清0AD轉(zhuǎn)換結(jié)束標(biāo)志位adc=(uint)ADC_RES; /獲取AD轉(zhuǎn)換的高位adc=(adc<<2)|(ADC_RESL&3);//獲取AD轉(zhuǎn)換的低位returnadc; 〃返回AD轉(zhuǎn)換值})while(--i);return1024;}/*X**A**A**A**A**A**A**A**A**A**A**A**X**X**X**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**x**x**x*/函數(shù)名:delay_ms(unsignedcharms)輸入:延時(shí)數(shù)輸出:無(wú)功能描述:產(chǎn)生毫秒級(jí)別延時(shí)*X**X**X**A**X**X**X**A**A**A**X**X**X**X**A**A**A**A**A**A**X**X**X**X**X**X**A**X**X**X**X**X**X**X**X**X**X**A**A**A**A**A**A**X**X**X**X**X**X**A**x**x**x**x**x**x**x*//voiddelay_ms(unsignedcharms){unsignedinti;do(i=MAIN_Fosc/14000;while(--i); //14Tperloop)while(--ms);}/*X**A**A**A**A**A**A**A**A**A**A**A**X**X**X**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**x**x**x*/函數(shù)名:BitTime(void)輸入:無(wú)輸出:無(wú)功能描述:位操作時(shí)間函數(shù)A**A**X**X**X**X**X**X**A**X**X**X**A**A**A**X**X**X**X**A**A**A**A**A**A**X**X**X**X**X**X**A**X**X**X**X**X**X**X**X**X**X**A**A**A**A**A**A**X**X**X**X**X**X**A**x**x**x**x**x**x**x*//voidBitTime(void)//位時(shí)間函數(shù){uinti;i=((MAIN_Fosc/100)*104)/140000L-1;//根據(jù)主時(shí)鐘來(lái)計(jì)算位時(shí)間while(--i);}/*X**A**A**A**A**A**A**A**A**A**A**A**X**X**X**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**A**x**x**x*/函數(shù)名: Tx1Send(uchardat)輸入:發(fā)送字符輸出:無(wú)功能描述:串口初始化參數(shù)為6008N1.通過串口發(fā)送一個(gè)字符A**A**X**X**X**X**X**X**A**X**X**X**A**A**A**X**X**X**X**A**A**A**A**A**A**X**X**X**X**X**X**A**X**X**X**X**X**X**X**X**X**X**A**A**X**X**X**X**X**X**X**X**X**X**A**x**x**x**x**x**x**x*//voidTx1Send(uchardat){uchari;EA=0;P_TXD1=0;BitTime();for(i=0;i<8;i++){if(dat&1)P_TXD1=1;elseP_TXD1

溫馨提示

  • 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ù)覽,若沒有圖紙預(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)論