#include "adc.h" /* ADCON0: bit 7 - bit 0 (11-1 pg 111) * ADCS1:ADCS0:CHS2:CHS1:CHS0:GO/DONE:-:ADON * * ADCON1: bit 7 - bit 0 * ADFM:-:-:-:PCFG3:PCFG2:PCFG1:PCFG0 */ void Adc_Init(void) { ADCON0 = 0x00; // A/D Off, GO_DONE not in progress, Channel 0, Fosc/2 ADCS0 = 0; // A/D Conversion Fosc/32 ADCS1:ADCS0 (0b10) (Table 11-1) ADCS1 = 1; //ADCON1 ADFM = 1; // results right justified //16F887 //VCFG0 = VCFG1 = 0; // AN0-AN7 Analog input, Vref+/- Vdd/Vss //16F877A PCFG0 = PCFG1 = PCFG2 = 0; } unsigned int Adc_Read(unsigned int channel) { ADCON0bits.CHS = channel; // Set CHS bits for channel (pg111) ADCON0bits.ADON = 1; // Turn on ADC __delay_us(5); // Enough time for A/D acquisition ADCON0bits.GO_DONE = 1; // A/D Conversion bit set 1 (conversion in progress) while (ADCON0bits.GO_DONE == 1); // Wait for conversion to finish return ((ADRESH << 8) + ADRESL); // return combined 10 bits of conversion }