27.2.5 ADC Conversion Procedure
This is an example procedure for using the ADC to perform an analog-to-digital conversion:
- Configure port:- Disable the pin output driver (refer to the TRISx register)
- Configure the pin as analog (refer to the ANSELx register)
 
- Configure the ADC module:- Select the ADC conversion clock
- Configure the voltage reference
- Select the ADC input channel
- Configure result format
- Turn on the ADC module
 
- Configure ADC interrupt (optional):- Clear the ADC interrupt flag
- Enable the ADC interrupt
- Enable the peripheral interrupt (PEIE bit)
- Enable the global interrupt (GIE bit)(1)
 
- Wait the required acquisition time(2)
- Start conversion by setting the GO bit
- Wait for ADC conversion to complete by
                one of the following:- Polling the GO bit
- Waiting for the ADC interrupt (if interrupt is enabled)
 
- Read ADC Result
- Clear the ADC interrupt flag (if interrupt is enabled)
Note: 
            
        - With global interrupts disabled (GIE
                    = 0), the device will wake from Sleep but will not enter an Interrupt Service Routine.
- Refer to ADC Acquisition Requirements for more details.
ADC Conversion (assembly)
; This code block configures the ADC for polling,
; VDD and VSS references,
; ADCRC oscillator, and AN0 input.
; Conversion start & polling for completion are included.
    BANKSEL TRISA
    BSF     TRISA,0     ; Set RA0 to input
    BANKSEL ANSEL
    BSF     ANSEL,0     ; Set RA0 to analog
    BANKSEL ADCON0
    CLRF    ADCON0
    CLRF    ADCON1
    CLRF    ADACT       ; Auto-conversion disabled
    BSF     ADCON0,0    ; CHS = RA0, ADC ON
    MOVLW   B’11110000’ ; FM = Right-justified, CS = ADCRC, PREF = VDD
    MOVWF   ADCON1
    CALL    SampleTime  ; Acquisition delay
    BANKSEL ADCON0
    BSF     ADCON0,GO   ; Start conversion
    BTFSC   ADCON0,GO   ; Is conversion done?
    GOTO    $-1         ; No, test again
    BANKSEL ADRESH
    MOVF    ADRESH,W    ; Read upper byte
    MOVWF   RESULTHI    ; Store in GPR space
    MOVF    ADRESL,W    ; Read lower byte
    MOVWF   RESULTLO    ; Store in GPR spaceADC Conversion (C)
/*This code block configures the ADC
for polling, VDD and VSS references,
ADCRC oscillator and AN0 input.
Conversion start & polling for completion
are included.
  */
    void main() {
        //System Initialize
        initializeSystem();
        // Configure Port
        TRISAbits.TRISA0 = 1;      // Set RA0 to input
        ANSELAbits.ANSELA0 = 1;    // Set RA0 to analog
        // Configure ADC
        ADCON1bits.CS = 1;         // ADCRC Clock
        ADCON1bits.PREF = ‘b11;    // VDD
        ADCON0bits.CHS = ‘b000000; // RA0
        ADCON1bits.FM = 1;         // Right justify
        ADCON0bits.ON = 1;         // Turn ADC On
    while (1) {
        ADCON0bits.GO = 1;         // Start conversion
        while (ADCON0bits.GO);     // Wait for conversion done
        resultHigh = ADRESH;       // Read result
        resultLow = ADRESL;        // Read result
    }
 }