www.pudn.com > STC.rar > STC12C5A32AD_ADC.C, change:2009-08-28,size:1150b


#ifndef		_STC12C5A32AD_ADC_C_ 
#define		_STC12C5A32AD_ADC_C_ 
#include <intrins.h> 
sfr ADC_CONTR	= 0XBC; 
sfr P1ASF		= 0X9D; 
sfr ADC_RES		= 0XBD; 
sfr ADC_RESL	= 0XBE; 
#define AD_SPEED   0x60 
 
void init_adc() 
{ 
	ADC_CONTR = ADC_CONTR|0x80; //打开adc电源 
	P1ASF = 0X01;  //设置P1.7为模拟功能 
} 
 
void adc_delay(unsigned char delay_time)        // 延时函数 
{ 
    unsigned int n; 
    while(delay_time--)  
    {  
        n = 6000; 
        while(--n); 
    } 
} 
unsigned int get_AD_result(unsigned char channel) 
{ 
    unsigned char AD_finished=0;       
	unsigned int h_val; 
	unsigned int l_val; 
    ADC_RES = 0; 
    ADC_RESL = 0; 
 
    channel &= 0x07;       
    ADC_CONTR = AD_SPEED; 
    _nop_(); 
    ADC_CONTR |= channel;        
    _nop_(); 
    ADC_CONTR |= 0x80;     
    adc_delay(1);             
    ADC_CONTR |= 0x08;       
    AD_finished = 0; 
    while ( AD_finished ==0 )    
    { 
        AD_finished = (ADC_CONTR & 0x10);  
    } 
    ADC_CONTR &= 0xE7;          
    h_val = ADC_RES; 
	h_val = h_val<<2; 
	l_val = ADC_RESL & 0X03; 
	h_val = h_val | l_val; 
	return (h_val);                
} 
 
 
#endif