/*--- Initialise A/D convertor ---*/
void init_ad(void)
{
ADCON0 = 0x80U; /* Conversion clock Fosc/32 */
ADCON1 = 0x80U; /* 10 bit Right justified result, all analog inputs, Vdd as ref */
}
/*--- Read A/D conversion ---*/
int read_ad(unsigned char channel)
{
int result = 0U;
unsigned char acquisition_time = 3U;
ADCON0 = 0x01U; /* Turn on A/D */
ADCON0 |= (channel << 3U); /* Select channel */
while(acquisition_time--){ /* Sample channel */
;
}
GODONE = 1U; /* Start conversion */
while(GODONE){ /* Wait for conversion end */
;
}
result = ADRESH;
result <<= 8U;
result += ADRESL;
return result;
}