A/D轉(zhuǎn)換寄存器總表:
(1) P1_ADC_EN:特殊功能寄存器
P1.x作為A/D轉(zhuǎn)換輸入通道來用允許特殊功能寄存器。相應位為“1”時,對應的P1.x口作為A/D轉(zhuǎn)換使用,內(nèi)部上拉電阻自動斷開。
ADC_START是模擬/數(shù)字轉(zhuǎn)換(ADC)啟動控制位,設置為1時,開始轉(zhuǎn)換。
ADC_FLAG是模擬/數(shù)字轉(zhuǎn)換結束標志位,當A/D轉(zhuǎn)換完成后,ADC_FLAG=1。
(3) ADC_DATA: A/D轉(zhuǎn)換結果特殊功能寄存器
模擬/數(shù)字轉(zhuǎn)換結果計算公式為 結果=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
/*
-------------------------------------------------
此程序用以說明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);
}
}