This is an example procedure for using the ADC to perform an analog-to-digital conversion:
0
), the device will wake from Sleep but will not enter an
Interrupt Service Routine.; 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 space
/*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
}
}