Segue programa que eu fiz para testar o conversor A/D do PIC16F877A, simulei no Proteus e funcionou conforme previsto.
list P=16F877A
#include "P16F877A.INC"
__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_ON
;__CONFIG 0x3F32
ERRORLEVEL -302 ; turn off bank bits warning
cblock H'20'
endc
; Inicio do Programa
ORG 0h
; Inicialização do PIC e do display
bcf STATUS,RP1
bsf STATUS,RP0 ; Habilita banco 1
clrf TRISD ; porta do display, de saída
movlw B'00000010' ; setup do conversor A/D
movwf ADCON1 ; left justify result
; port A = analogue inputs
bcf STATUS,RP0 ; Habilita banco 0
clrf PORTD ; zera saídas do display
movlw B'01000001' ; setup da entrada
movwf ADCON0 ; f/8, AN0, DONE, A/D On
;
; Loop principal
;
start:
call read_ad
call display
goto start
;
; Conversor A/D
;
read_ad:
bsf ADCON0,GO ; Iniciar conversão
wait:
btfsc ADCON0,GO ; Testa se terminou conversão
goto wait
movf ADRESH,W
return
;
; Display de LEDs
;
display:
movwf PORTD
return
END
Diagrama elétrico:
[attachthumb=1]