刚入坑,把学到的巩固下,方便以后查阅
adc采集的有两种方式。1种是用基准电压来检测4095*Vdd/Vref,另外一种是是通过间隙电压来检测
基准检测:
Set_All_GPIO_Quasi_Mode;
Enable_ADC_AIN1;
ADCDLY=0xff;
ADCCON2|=0x01; //使用adc1通道
unsigned int ReadADC()
{
uint data;
clr_ADCF;
set_ADCS;
while(ADCF==0)
{
data=ADCRH<<4+ADCRL;
}
return data;
}
间隙检测:
Set_All_GPIO_Quasi_Mode;
Enable_ADC_AIN1;
Enable_ADC_BandGap;
ADCCON2|=0x01; //使用adc1通道
uint16_t AdValue(uint8_t ch){//通道CH电压值 10次和
uint16_t AdTemp1=0,AdTemp2=0;
uint8_t i=0;
ADCCON0 &=0XF0;
ADCCON0 |= ch;
ADCS=1;
while(ADCF==0);//除出上一次的结果
ADCF=0;
for(i=0;i<10;i++){
ADCS = 1; //使能adc
while(ADCF==0);
ADCF=0;
AdTemp1=ADCRL;
AdTemp1 += ADCRH<<4;
AdTemp2 += AdTemp1;
}
return AdTemp2;
}
uint16_t VbatValue(uint8_t ch){ //通道ch电压
return ((uint32_t)1220*(uint32_t)AdValue(ch)/(uint32_t)AdValue(8)); //Advalue(8) 是内部带隙电压(band-gap)1.22v,(需BODEN=1,band-gap才会有效)
}