hola Azucena
Tengo una subrutina de configuracion del A/D en un pic 16F871 el cual lo puedes adaptar al 16F877 nose que resultado tenga en el 16F877A pero tienes que probarlo. Suerte
list p=16f871
#include <p16f871.inc>
__config h"3939"
TEMP0 equ 0x21 ;DECLARA VARIABLES EN RAM
TEMP1 equ 0x22
Contador1 equ 0x23 ;variable para demora
org 0x00
goto princi
;;;;;;;;Configurar puertos de entrada y salida
;;;;;;;;;;configurar A/D
princi
bsf STATUS,RP0 ;Pasamos al banco1 de la memoria
clrf TRISD ;Puerto D sea como salida
clrf TRISC
movlw 0xFF
movwf TRISB
movlw 0x00
movwf OPTION_REG
bsf TRISA,0 ;ingreso RA0
bcf STATUS,RP0 ;Pasamos al banco 0
clrf PORTD ;Reset puerto D
clrf TEMP0 ;Enceramos registros temporales
clrf TEMP1
lup bsf STATUS,RP0 ;Pasamos al banco 1
movlw b"00001110" ;CONFIGURA ENTRADA ANALOGIA AN0
movwf ADCON1
bcf STATUS,RP0 ;bank0
movlw b"10000001" ; DE Fosc/32
movwf ADCON0
;;;;;demora de tiempo de adquisicion
call t_ad
;;;;START CONVERSION;;;;;;;;;;;;;;;;;;;;;;;;;;
bcf STATUS,RP0 ;bank0
bsf ADCON0,2 ;GO/DONE=1
;;;;;;;;;espera si se completa la conversion
lupe_con btfsc ADCON0,2
goto lupe_con
bsf STATUS,RP0 ;bank1
movf ADRESL,w ;COLOCA ADRESH:ADRESL
movwf TEMP0
bcf STATUS,RP0 ;bank0
movf ADRESH,w
movwf TEMP1
bcf STATUS,C
movf TEMP1,w
movwf PORTD ;mandamos dato a PORTD
call t_ad
call t_ad
goto lup
;Demora
t_ad movlw d"26"
movwf Contador1
bucle decfsz Contador1,f
goto bucle
return
end