新聞中心

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

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

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

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

本文引用地址:http://www.butianyuan.cn/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)換輸入通道來用允許特殊功能寄存器。相應位為“1”時,對應的P1.x口作為A/D轉(zhuǎn)換使用,內(nèi)部上拉電阻自動斷開。

(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)啟動控制位,設置為1時,開始轉(zhuǎn)換。

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

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

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

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

內(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為要取的通道號(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進制數(shù),分別對應AD7~0,置1代表打開此路

{

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

P1_ADC_EN=ADin;

}

_main.c:

#include

#include adc.h>

/*

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

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

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

*/

void delay(unsigned time)

{

while(time--);

}

void main()

{

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

//0110,0011,P1的P1.0,P1.1,P1.5,P1.6設置為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);

}

}



評論


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

關閉