STC12C5A60S2 AD 轉換詳解

  STC系列單片機中的STC89LE516AD/X2提供了8路8位精度的高速A/D轉換器,位於P1口上,從而省去了片外ADC的麻煩。這8路ADC爲電壓輸入型,可做按鍵掃描,電池電壓檢測,頻譜檢測等。ADC轉換過程需要17個機器週期。通過對相關功能寄存器的適當配置,就可以控制其工作。下面就對相關功能寄存器進行介紹。

    A/D轉換寄存器總表:

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

P1.x作爲A/D轉換輸入通道來用允許特殊功能寄存器。相應位爲“1”時,對應的P1.x口作爲A/D轉換使用,內部上拉電阻自動斷開。

ADC_START是模擬/數字轉換(ADC)啓動控制位,設置爲1時,開始轉換。

      ADC_FLAG是模擬/數字轉換結束標誌位,當A/D轉換完成後,ADC_FLAG=1。

(3)       ADC_DATA: A/D轉換結果特殊功能寄存器

模擬/數字轉換結果計算公式爲 結果=256×Vin/Vcc

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

         

    內置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進制數,分別對應AD7~0,置1代表打開此路

{

 P1=P1|ADin;//要設置爲A/D轉換的P1.x口,先設爲高

 P1_ADC_EN=ADin; 

}

 

 

 

 

 

      _main.c:

#include

#include <stc_adc.h>

 

/*

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

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

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

*/

 

void delay(unsigned time)

{

 while(time--);

}

 

void main()

{

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

             //0110,0011,P1的P1.0,P1.1,P1.5,P1.6設置爲A/D轉換輸入腳

                     //斷開P1.0,P1.1,P1.5,P1.6內部上拉電阻

 while(1)

 {

  P2=GetAD(0);

  delay(10000);

  P2=GetAD(1);

  delay(10000);

  P2=GetAD(5);

  delay(10000);

  P2=GetAD(6);

  delay(10000);

 }

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章