Pic16f877a Adc
Pic16f877a Adc
ADCON0 Register
ADCON1 Register
PCFG3: PCFG0 AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0 VREF+ VREF- C/R
0000 A A A A A A A A VDD VSS 8/0
0001 A A A A VREF+ A A A AN3 VSS 7/1
0010 D D D A A A A A VDD VSS 5/0
0011 D D D A VREF+ A A A AN3 VSS 4/1
0100 D D D D A D A A VDD VSS 3/0
0101 D D D D VREF+ D A A AN3 VSS 2/1
011X D D D D D D D D -- -- 0/0
1000 A A A A VREF+ VREF- A A AN3 AN2 6/2
1001 D D A A A A A A VDD VSS 6/0
1010 D D A A VREF+ A A A AN3 VSS 5/1
1011 D D A A VREF+ VREF- A A AN3 AN2 4/2
1100 D D D A VREF+ VREF- A A AN3 AN2 3/2
1101 D D D D VREF+ VREF- A A AN3 AN2 2/2
1110 D D D D D D D A VDD VSS 1/0
1111 D D D D VREF+ VREF- D A AN3 AN2 1/2
***A = Analog input - D = Digital I/O - C/R of analog input channels of A/D voltage references
ADRESH AND ADRESL REGISTERS
1. Initializing ANALOG-TO-DIGITAL CONVERTER (A/D) MODULE: Configure the ADCON1 and ADCON0
ADCinit:
banksel adcon1 ;SELECT BANK 1
movlw b'10001110'
movwf adcon1 ;RESULT IN LOW 10 BITS OF ADRESH - ADRESL / ONLY AN0 ANALOG / VREF+=VDD / VREF-=VSS
banksel adcon0 ;SELECT BANK 0
movlw b'10000001'
movwf adcon0 ;FOSC/32 - CHANNEL0(AN0)- A/D ON
call wait_for_40us
return
;**************************************************
ADCread:
banksel adcon0 ;SELECT BANK 0
bsf adcon0,2 ;START A/D CONVERSION. SET GO/DONE BIT
complete:
btfsc adcon0,2
goto complete ;WAIT FOR CONVERTION TO FINISH (WAIT FOR GO/DONE BIT TO CLEAR)
movf adresh,w ;MOVE ADRESH TO W
movwf dhigh
banksel adresl ;SELECT BANK 1
movf adresl,w ;MOVE ADRESL TO W
banksel adcon0 ;SELECT BANK 0
movwf dlow
return
;**********************************************
wait_for_40us:
....
....
....
return
;********************************************
int:
retfie
;*********************************************
end