Buenas, soy nuevo en este foro. Les cuanto mi problema
Estoy realizando una practica con mi pic 16f877a para aprender a utilizar el adc, coloque un potenciometro en el Ra0 para varialo y ver los distintos valores del adc en una pantalla lcd, pero los valores en la pantalla se vuelven locos, suben y bajan, segun queria que al momento de tener 5v en ra0 el valor de la lcd fuera 1024 que son 2^10 que son los bits que posee este pic para el adc.. 
Les anexo mi codigo para ver si alguien me puede ayudar
Agradecido con el que me eche una mano.
;******************************************************************************************************************************************
;             PRACTICA PARA EL ADC, UTILIZO UN POTENCIOMETRO EN RA0 Y EL VALOR EN BINARIO LO VISUALIZO EN LA LCD
;
;
;
;******************************************************************************************************************************************
      INCLUDE   <P16F877A.INC>
      LIST P=16F877A
        __CONFIG _XT_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF & _BOREN_ON & _LVP_OFF   
;REDIFINICION DE NOMBRE
#DEFINE  PUERTO_A	PORTA                         
#DEFINE  PUERTO_B  	PORTB
#DEFINE  PUERTO_C  	PORTC
#DEFINE	 LCD_RS	   	PORTC,7
#DEFINE	 LCD_RW	   	PORTC,6
#DEFINE	 LCD_E	   	PORTC,5
#DEFINE	 LCD_PUERTO	PORTB 
		        CBLOCK	H'20'             ;BLOQUE DE VARIABLES O REGISTROS 
			CONT1	
			CONT2
			CONT3
			CONTX
			
			LOOPS
		       	LOOPS1
		       	LOOPS2
    		   	REGA0		   		;lsb
			REGA1                   
			REGA2       
			REGA3				;msb
			REGB0				;lsb
			REGB1		
			REGB2		
			REGB3				;msb
			REGC0				;lsb
			REGC1		
			REGC2			
			REGC3				;msb
			DSIGN				;Digit Sign. 0=positive,1=negative
			DIGIT1				;MSD
			DIGIT2      
			DIGIT3      
			DIGIT4      
			DIGIT5				;Decimal (BCD) digits
			DIGIT6      
			DIGIT7      
			DIGIT8      
			DIGIT9      
			DIGIT10				;LSD
			MTEMP       
			MCOUNT    
               		CONTA             
                        ENDC
  		    	ORG	H'00'
			GOTO        	COMIENZO
			ORG     H'100'
COMIENZO	                CALL	PUERTO 		        ;LLAMDA A PUERTO. 
				CALL	CONFIG_LCD		;LLAMO A CONFIGURACION DE LCD
				CALL    RETARDO3		;ESPERA DE 3 SEGUNDOS
				CALL	VISUALIZAR_LCD		;VISUALIZO EN LA L1 "ING. MECATRONICA"
CICLO				CALL	CONFIG_ADC		;CONFIGURACION DE ADCON 0
				CALL	ADC			;CONFIGURO 
				CALL	VALOR_ADC
				GOTO	CICLO
				
							
 
 
			
								
;*****************************************************************************************************************************************
;          	BLOQUE DE RUTINAS 			BLOQUE DE RUTINAS
;*****************************************************************************************************************************************
PUERTO				BSF 	STATUS,RP0
               			BCF    	STATUS,RP1        
 				MOVLW  	B'111111'
				MOVWF	TRISA
	        		MOVLW  	B'00000000'
				MOVWF	TRISB
				MOVLW	B'00000000'
	          		MOVWF	TRISC
	        		MOVLW	B'00000000' 
	        		MOVWF	TRISD
	        		MOVLW	B'111' 
	        		MOVWF	TRISE
	        		CLRF    OPTION_REG
				NOP
				MOVLW  	B'10000000'  	          
				MOVWF 	ADCON1     	;1PARA ADRSH=2 Y ADRESL=8,0 OSCILADO/8,1110= TODOS D MENOS RAO=a
 	        		BSF     PIE1,ADIE 	; HABILITADA LA CONVERSION
	        		BCF 	STATUS,RP0
				MOVLW   B'00000000' 
	       			MOVWF   INTCON
	        		RETURN
;******************************************************************************************************************************************
;RUTINA PARA LA CONFIGURACION DE LAS OPERACIONES DE LA LCD
CONFIG_LCD			MOVLW	0X01		;EQUIVALENTE A BORRAR LA LCD
				CALL	CONTROL_LCD	;LLAMO LA HABILITACION DE CONTROL
				MOVLW	0X02		;EQUIVALENTE A RETORDAR EL CURSOR AL INICIO
				CALL	CONTROL_LCD	;LLAMO LA HABILITACION DE CONTROL
				MOVLW	0X06		;CONFIGURA EL MODO DE ENTRADA COMO EL INCREMENTO DEL CURSOR Y MODO NORMAL(AQUIPUEDOACTIVAR DESZPLAZAMIENTO)
				CALL	CONTROL_LCD	;LLAMO LA HABILITACION DE CONTROL
				MOVLW	0X0F		;COFIG DISPLAY CONTROL: DISPALY=ON,CURSOR=ON,PARPADEO DEL CURSOR=ON
				CALL	CONTROL_LCD	;LLAMO LA HABILITACION DE CONTROL
				MOVLW	0X38		;FUNCTION SET:BUS DE 8 BIT,LCD DE 2 LINEAS,CARACTER DE 5X7 PUNTOS
				CALL	CONTROL_LCD	;LLAMO LA HABILITACION DE CONTROL
				MOVLW	0X01		;EQUIVALENTE A BORRAR LA LCD
				CALL	CONTROL_LCD	;LLAMO LA HABILITACION DE CONTROL
				RETURN
;******************************************************************************************************************************************
;RUTINIA DE HABILATACION DE CONTROL Y DATOS PARA LA CONFIGURACION DEL LCD
CONTROL_LCD			MOVWF	LCD_PUERTO	;MUEVO EL VALOR DE W QUE POSEE EL CONTROL AL PUERTO PARA CONFIGURARLO
				BCF	LCD_RW		;COLOCO RW=0 PARA ACTIVAR LA ESCRITURA
				BCF	LCD_RS		;COLOCO RS=0 PARA ACTIVAR EL CONTROL
SALTOX				BSF	LCD_E		;COLOCO	E=0 PARA DAR EL PULSO
				NOP
				NOP			
				BCF	LCD_E		;PARA DAR POR TERMINADO EL PULSO
				BCF	LCD_RW		;PARA LIMPIARLO
				BCF	LCD_RS		;PARA LIMPIARLO
				GOTO	RETARDO1	;VOY AL RETARDO DE 5m SEGUNDOS PARA LA ESPERA DE LA LCD 
DATO_LCD			MOVWF	LCD_PUERTO	;MUEVO EL VALOR DE W QUE POSEE EL DATO A VISUALIZAR EN LA LCD
				BCF	LCD_RW		;COLOCO RW=0 PARA LA ESCRITURA
				BSF	LCD_RS		;COLOCO	RS=1 PARA ACTIVAR EL MODO DE DATOS
				GOTO	SALTOX		;ME VOY A SALTOX PARA DAR EL PULSO DE ACTIVACION Y LIMPIAR LOS REGISTROS
;******************************************************************************************************************************************
VISUALIZAR_LCD			CALL	BORRAR_LCD	;BORRO LA LCD POR SI TENGO ALGO EN ELLA
				MOVLW	'I'		;SEGMENTO 1 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS	
				MOVLW	'N'		;SEGMENTO 2 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS	
				MOVLW	'G'		;SEGMENTO 3 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS	
				MOVLW	'.'		;SEGMENTO 4 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	' '		;SEGMENTO 5 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	'M'		;SEGMENTO 6 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	'E'		;SEGMENTO 7 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	'C'		;SEGMENTO 8 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	'A'		;SEGMENTO 9 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	'T'		;SEGMENTO 10 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	'R'		;SEGMENTO 11 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	'O'		;SEGMENTO 12 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	'N'		;SEGMENTO 13 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	'I'		;SEGMENTO 14 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	'C'		;SEGMENTO 15 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	'A'		;SEGMENTO 16 LINEA 1
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
			
				MOVLW	0XC0		;LO UTILIZO PARA MOVERME A LA LINEA 2
				CALL	CONTROL_LCD	;HABILITACION DE CONTROL
				MOVLW	'A'		;SEGMENTO 1 LINEA 2
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS	
				MOVLW	'D'		;SEGMENTO 2 LINEA 2
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS	
				MOVLW	'C'		;SEGMENTO 3 LINEA 2
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS	
				MOVLW	'='		;SEGMENTO 4 LINEA 2
				CALL	DATO_LCD	;LLAMO LA HABILITACION DE DATOS
				MOVLW	' '		;SEGMENTO 5 LINEA 2
				CALL	DATO_LCD	;LLAMO LA HABILITAION DE DATOS
				RETURN
;******************************************************************************************************************************************
;RUTINA PARA BORRAR LA LCD
BORRAR_LCD			MOVLW	0X01		;EQUIVALENTE AL CONTROL BORRAR LCD
				GOTO	CONTROL_LCD	;LLAMO LA HABILITACION DE CONTROL	
;******************************************************************************************************************************************
;RUTINA PARA REGRESAR EL CURSOR AL INICIO
REGRESAR_LCD			MOVLW	0X02		;EQUIVALENTE A RETORDAR EL CURSOR AL INICIO
				GOTO	CONTROL_LCD	;LLAMO LA HABILITACION DE CONTROL
;******************************************************************************************************************************************
CONFIG_ADC			CALL	clrdig		;BORRO LOS VALORES DEL ADC
				MOVWF	B'01000001'
				MOVWF	ADCON0		;CONFIGURO OSCILADO/8,CANAL 0, DONE, ENCIENDO
				GOTO	RETARDO4	;ESPERA EL TIEMPO DE ADQUISICION
				
;******************************************************************************************************************************************
ADC				BSF	ADCON0,2	;INICIA EL PROCESO
				NOP
				NOP
REPETIR				BTFSS	ADCON0,2	;CHEQUEO SI LA CONVERSION TERMINO
				GOTO	REPETIR
				MOVF	ADRESH,W	;MUEVO LOS 2 BITS MAS SIGNIFICATIVOS A W
				MOVWF	REGA1		;CARGO LOS 2 BITS MAS SIGNIFICATVIOS A REG0
				CLRF	REGA2		;LIMPIO REGA1
				CLRF	REGA3		;LIMPIO REGA2
				BSF	STATUS,RP0	;ME MUEVO AL BANCO 1`PARA UTILIZAR EL ADRESL
				MOVF	ADRESL,W	;PASO LOS 8 BITS RESTANTES A W
				BCF	STATUS,RP0	;ME MUEVO AL BANCO 0 PARA UTILIZAR LOS REGISTROS DE PROPOSITOS GENERALES
				MOVWF	REGA0		;CARGO EL VALOR DEL ADRESL EN REGA0
				BCF	ADCON0,0	;TERMINO LA CONVERSION ASI QUE LO APAGO
				GOTO	BIN_BCD
				
;****************************************************************************************************************************************
BIN_BCD 			clrf	MTEMP		;Reset sign flag
				call	absa		;Make REGA positive
				skpnc
				return			;Overflow
				call	clrdig		;Clear all digits
				movlw	D'32'		;Loop counter
				movwf	MCOUNT
b2dloop				rlf 	REGA0,f		;Shift msb into carry
				rlf 	REGA1,f
				rlf 	REGA2,f
				rlf 	REGA3,f
				movlw	DIGIT10
				movwf	FSR		;Pointer to digits
				movlw	D'10'		;10 digits to do
				movwf	CONTA
adjlp				rlf  	INDF,f		;Shift digit and carry 1 bit left
				movlw	D'10'
				subwf	INDF,w		;Check and adjust for decimal overflow
				skpnc
				movwf	INDF
				decf	FSR,f		;Next digit
				decfsz	CONTA,f
				goto	adjlp
				decfsz	MCOUNT,f	;Next bit
				goto	b2dloop
				btfsc	MTEMP,0		;Check sign
				bsf	DSIGN,0		;Negative
				clrc
				return
clrdig				clrf	DSIGN
				clrf	DIGIT1
				clrf	DIGIT2
				clrf	DIGIT3
				clrf	DIGIT4
				clrf	DIGIT5
				clrf	DIGIT6
				clrf	DIGIT7
				clrf	DIGIT8
				clrf	DIGIT9
				clrf	DIGIT10
				return
absa				rlf	REGA3,w
				skpc
				return			;Positive
;****************************************************************************************************************************************
VALOR_ADC			MOVLW	0X30
				ADDWF   DIGIT7,W
				CALL	DATO_LCD
				MOVLW	0X30
				ADDWF   DIGIT8,W
				CALL	DATO_LCD
				MOVLW	0X30
				ADDWF   DIGIT9,W
				CALL	DATO_LCD
				MOVLW	0X30
				ADDWF   DIGIT10,W
				CALL	DATO_LCD
				MOVLW	0X0C		;COFIG DISPLAY CONTROL: DISPALY=ON,CURSOR=OFF,PARPADEO DEL CURSOR=OFF
				CALL	CONTROL_LCD
				MOVLW	B'11000101'
				GOTO	CONTROL_LCD
;******************************************************************************************************************************************
RETARDO1		   	MOVLW 	.41		;RETARDO DE 5MILISEGUNDOS
				MOVWF 	CONT1
				MOVlW	.41
				MOVWF	CONT2
DEMORA1				DECFSZ 	CONT1,F 
				GOTO 	DEMORA1	
				DECFSZ 	CONT2,F
				GOTO	DEMORA1
				RETURN
;****************************************************************************************************************************************
RETARDO2		  	MOVLW 	.183		;RETARDO DE 1 SEGUNDOS
				MOVWF 	CONT1
				MOVlW	.183
				MOVWF	CONT2
				MOVLW 	.11
				MOVWF 	CONT3
DEMORA2				DECFSZ 	CONT1,F 
				GOTO 	DEMORA2	
				DECFSZ 	CONT2,F
				GOTO	DEMORA2
				DECFSZ 	CONT3,F
				GOTO	DEMORA2
				RETURN
;****************************************************************************************************************************************
RETARDO3		   	CLRF	CONT1		;RETARDO DE 3 SEGUNDOS PARA MOSTRAR EL NUMERO
				CLRF	CONT2
				MOVLW 	.16
				MOVWF 	CONT3
DEMORA3				DECFSZ 	CONT1,F 
				GOTO 	DEMORA3	
				DECFSZ 	CONT2,F
				GOTO	DEMORA3
				DECFSZ 	CONT3,F
				GOTO	DEMORA3
				RETURN
;****************************************************************************************************************************************
RETARDO4			MOVLW 	.18		;RETARDO DE 1MILISEGUNDOS
				MOVWF 	CONT1
				MOVlW	.18
				MOVWF	CONT2
DEMORA4				DECFSZ 	CONT1,F 
				GOTO 	DEMORA4	
				DECFSZ 	CONT2,F
				GOTO	DEMORA4
				RETURN
;****************************************************************************************************************************************
 END