新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STC單片機(jī)內(nèi)置ADC的使用方法

        STC單片機(jī)內(nèi)置ADC的使用方法

        作者: 時(shí)間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
        STC系列單片機(jī)中的STC89LE516AD/X2提供了8路8位精度的高速A/D轉(zhuǎn)換器,位于P1口上,從而省去了片外ADC的麻煩。這8路ADC為電壓輸入型,可做按鍵掃描,電池電壓檢測(cè),頻譜檢測(cè)等。ADC轉(zhuǎn)換過程需要17個(gè)機(jī)器周期。通過對(duì)相關(guān)功能寄存器的適當(dāng)配置,就可以控制其工作。下面就對(duì)相關(guān)功能寄存器進(jìn)行介紹。

        A/D轉(zhuǎn)換寄存器總表:

        本文引用地址:http://www.104case.com/article/201611/316198.htm

        寄存器

        地址

        名稱

        7

        6

        5

        4

        3

        2

        1

        0

        初始初

        P1_ADC_EN

        97H

        允許P1.x

        成為A/D口

        P17

        P16

        P15

        P14

        P13

        P12

        P11

        P10

        0000

        0000

        ADC_

        CONTR

        C5H

        A/D轉(zhuǎn)換

        控制寄存器

        ADC_FLAG

        ADC_START

        CHS2

        CHS1

        CHS0

        xxx0

        0000

        ADC_DATA

        C6H

        A/D轉(zhuǎn)換

        結(jié)果寄存器

        0000

        0000

        (1) P1_ADC_EN:特殊功能寄存器

        P1.x作為A/D轉(zhuǎn)換輸入通道來用允許特殊功能寄存器。相應(yīng)位為“1”時(shí),對(duì)應(yīng)的P1.x口作為A/D轉(zhuǎn)換使用,內(nèi)部上拉電阻自動(dòng)斷開。

        (2) ADC_CONTR:特殊功能寄存器

        CHS2/CHS1/CHS0是模擬輸入通道選擇,CHS2/CHS1/CHS0的取值如下表所示:

        CHS2

        CHS1

        CHS0

        模擬輸入通道選擇

        0

        0

        0

        選擇P1.0為A/D輸入

        0

        0

        1

        選擇P1.1為A/D輸入

        0

        1

        0

        選擇P1.2為A/D輸入

        0

        1

        1

        選擇P1.3為A/D輸入

        1

        0

        0

        選擇P1.4為A/D輸入

        1

        0

        1

        選擇P1.5為A/D輸入

        1

        1

        0

        選擇P1.6為A/D輸入

        1

        1

        1

        選擇P1.7為A/D輸入

        ADC_START是模擬/數(shù)字轉(zhuǎn)換(ADC)啟動(dòng)控制位,設(shè)置為1時(shí),開始轉(zhuǎn)換。

        ADC_FLAG是模擬/數(shù)字轉(zhuǎn)換結(jié)束標(biāo)志位,當(dāng)A/D轉(zhuǎn)換完成后,ADC_FLAG=1。

        (3) ADC_DATA: A/D轉(zhuǎn)換結(jié)果特殊功能寄存器

        模擬/數(shù)字轉(zhuǎn)換結(jié)果計(jì)算公式為 結(jié)果=256×Vin/Vcc

        Vin是模擬輸入通道輸入電壓,Vcc為單片機(jī)實(shí)際工作電壓,用單片機(jī)工作電壓作為模擬參考電壓。

        內(nèi)置ADC的使用例程:

        STC_ADC.h:

        sfr P1_ADC_EN=0x97;

        sfr ADC_CONTR=0xc5;

        sfr ADC_DATA=0xc6;

        int GetAD(unsigned char channel)//channel為要取的通道號(hào)(0~7)

        {

        unsigned char AD_finished=0;

        ADC_DATA=0;

        ADC_CONTR=channel;

        ADC_CONTR|=0x08;

        while(!AD_finished)

        AD_finished=(ADC_CONTR&0x10);

        ADC_CONTR&=0xF7;

        return (ADC_DATA);

        }

        void AD_Init(unsigned char ADin)// ADC初始化,ADin為八位2進(jìn)制數(shù),分別對(duì)應(yīng)AD7~0,置1代表打開此路

        {

        P1=P1|ADin;//要設(shè)置為A/D轉(zhuǎn)換的P1.x口,先設(shè)為高

        P1_ADC_EN=ADin;

        }

        _main.c:

        #include

        #include adc.h>

        /*

        -------------------------------------------------

        此程序用以說明STC單片機(jī)ADC的使用方法

        -------------------------------------------------

        */

        void delay(unsigned time)

        {

        while(time--);

        }

        void main()

        {

        AD_Init(0x63);//0110,0011,要設(shè)置為A/D轉(zhuǎn)換的P1.x口,先設(shè)置為高

        //0110,0011,P1的P1.0,P1.1,P1.5,P1.6設(shè)置為A/D轉(zhuǎn)換輸入腳

        //斷開P1.0,P1.1,P1.5,P1.6內(nèi)部上拉電阻

        while(1)

        {

        P2=GetAD(0);

        delay(10000);

        P2=GetAD(1);

        delay(10000);

        P2=GetAD(5);

        delay(10000);

        P2=GetAD(6);

        delay(10000);

        }

        }



        關(guān)鍵詞: STC單片機(jī)內(nèi)置AD

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 乌兰浩特市| 米泉市| 黄山市| 仙游县| 寻乌县| 隆安县| 东乡族自治县| 阿拉尔市| 东莞市| 饶河县| 南漳县| 清远市| 德江县| 正镶白旗| 焦作市| 内乡县| 灌南县| 浦江县| 浮梁县| 白城市| 虎林市| 佛坪县| 盐源县| 获嘉县| 遂昌县| 本溪| 澄迈县| 定南县| 永登县| 安徽省| 得荣县| 红安县| 台中县| 延津县| 祥云县| 赣榆县| 金山区| 常德市| 湘潭县| 阳谷县| 夹江县|