nuvoton ADC采集

刚入坑,把学到的巩固下,方便以后查阅

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;

    ADCDLY=0xff;
    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才会有效)
}



你可能感兴趣的:(硬件)