Hola!! Estoy desarrollando un codigo para mi proyecto, un altimetro digital. Lo tengo casi listo, pero al probarlo en el pic, no me salen los datos que corresponderian en el  LCD.
Las caracteristicas son:
Un conversor A/D de 10 bits, para obetener una resolucion de 1024 bits. Con una precision de 10 metros, tendriamos un rango de o a 10000 metros (aprox).
El conversor esta conectado a un circuito que lleva un sensor de presion, pero bueno, eso ya queda en tensiones de referencia y demas. El tema es que convierta a digital y muestre los datos en el lcd
Aqui os dejo el codigo que llevo hecho! (espero que si a alguien le sirve, lo aproveche!!!!!)
Lo teneis tb para descargar para quien no lo vea bien por aqui
                processor 16F876
      LIST   P=16F876         
      INCLUDE   <P16f876.inc>                  
      __config 3D31      
PDel0      EQU   0x21
PDel1      EQU   0x22
PDel2      EQU   0x23
BUFFER      EQU   0x24
ADRESH1      EQU   0x25
ADRESL1    EQU   0x26
Digito      EQU   0x27
INNER      EQU   0x28
OUTER      EQU   0x29
cnt_bit      EQU   0x2A
MILES      EQU   0x2B
CENTENES   EQU   0x2C                 
DECENES    EQU   0x2D 
UNIDAES    EQU   0x2E
      org    0x00   
      goto    INICIO
      org    0x05      
INICIO      
;Inicializacion de puertos
         bcf      STATUS,RP0   ;banco 0
         bcf      STATUS,RP1      
         clrf   PORTA
         bsf      STATUS,RP0   ;banco 1         
         clrf   TRISB      ;portb como salida
         clrf   TRISC      
         bcf      STATUS,RP0   ;banco 0                  
         clrf   PORTA
         clrf   PORTB
         clrf   PORTC
;Programa principal      
      CALL    LCD_INI         ;Inicia LCD (CFG puertos...)
             MOVLW   b'00000001'     ;Borrar LCD y Home          
               CALL    LCD_REG                                     
               MOVLW   b'00000110'     ;                           
               CALL    LCD_REG                                     
               MOVLW   b'00001100'     ;LCD On, cursor Off,Parpadeo Off         
               CALL    LCD_REG                                     
              MOVLW   0x80            ;Direccion caracter
                CALL    LCD_REG                        
      CALL   COMIENZA
      movlw   'T'
      call    LCD_DATOS       ;Visualiza caracter    
      movlw   '1'
      call    LCD_DATOS       ;Visualiza caracter          
      movlw   '='
      call    LCD_DATOS       ;Visualiza caracter    
      call   inLCD      ;visualiza 
      movlw   0xDF      ;º
      call    LCD_DATOS       ;Visualiza caracter 
      movlw   0x20      ;" "
      call    LCD_DATOS       ;Visualiza caracter         
;//////////////////////////////////////////////////////////////
;/////////////////CONVERSOR A/D DE 10 BITS/////////////////////
;//////////////////////////////////////////////////////////////
Conversion_AD
; Configuracion ADCON0
          movlw   b'10000001'
          movwf   ADCON0
; Configuracion ADCON1
          BANKSEL ADCON1
          movlw   b'10000101'
          movwf   ADCON1
          BANKSEL ADCON0
         return
; Se inicia el AD
LeerAD
          bsf       ADCON0, GO_DONE      ;Inicio
          btfsc   ADCON0, GO_DONE
          goto    $-1         ;Espera al fin de la conversion
      return
;//////////////////////////////////////////////////////////////
;////////////////RUTINAS DE CONTROL DE LCD/////////////////////
;//////////////////////////////////////////////////////////////
LCD_E           BSF     PORTC,2         ;Activa señal E
                NOP
                NOP
                NOP                     ;Espera 1uS
                BCF     PORTC,2         ;Desactiva señal E
                RETURN                                      
LCD_BUSY        BSF     PORTC,1         ;Pone el LCD en modo lectura
                BSF     STATUS,RP0      ;Selecciona el Banco 1
                MOVLW   0xFF  
                MOVWF   TRISB           ;Puerta B act£a de entrada
                BCF     STATUS,RP0      ;Selecciona el Banco 0
                BSF     PORTC,2         ;Activa el LCD (Señal E)
                NOP           
L_BUSY          BTFSC   PORTB,7         ;Chequea el bit BUSY
                GOTO    L_BUSY          ;Est  a "1" (Ocupado)
                BCF     PORTC,2         ;Desactiva el LCD (Se¤al E)
                BSF     STATUS,RP0      ;Selecciona el Banco 1
                CLRF    TRISB           ;Puerta B actua como salida
                BCF     STATUS,RP0      ;Selecciona el Banco 0
                BCF     PORTC,1         ;Pone el LCD en modo escritura
                RETURN                                      
LCD_REG         BCF     PORTC,0         ;Desactiva RS (Modo instruccion)
                MOVWF   PORTB           ;Saca el codigo de instruccion
                CALL    LCD_BUSY        ;Espera a que se libere el LCD
                GOTO    LCD_E           ;Genera pulso en señal E                              
LCD_DATOS       BCF     PORTC,0         ;Desactiva RS (Modo instrucci¢n)
                MOVWF   PORTB           ;Valor ASCII a sacar por PORTB
                CALL    LCD_BUSY        ;Espera a que se libere el LCD
                BSF     PORTC,0         ;Activa RS (Modo dato)  
                GOTO    LCD_E           ;Genera pulso en señal E                              
LCD_INI         MOVLW   b'00111000'
                CALL    LCD_REG         ;Codigo de instruccion
                CALL    DELAY_5MS       ;Temporiza 5 mS.
                MOVLW   b'00111000'
                CALL    LCD_REG         ;Codigo de instruccion
                CALL    DELAY_5MS       ;Temporiza 5 mS.
                MOVLW   b'00111000'
                CALL    LCD_REG         ;Codigo de instruccion
                CALL    DELAY_5MS       ;Temporiza 5 mS.
                RETURN                                          
;DELAY_5MS genera una temporizacion de 5mS necesario para la secuencia de
;inicio del LCD                                                                 
DELAY_5MS     movlw   .6           
           movwf   PDel0        
PLoop1     movlw   .207         
              movwf   PDel1        
PLoop2       nop                 
           decfsz  PDel1, 1     
           goto    PLoop2       
           decfsz  PDel0,  1    
           goto    PLoop1    
PDelL1     goto   PDelL2      
PDelL2     nop                 
           return                 
del_1ms      movlw   d'199'      
         movwf   INNER
in_lp      nop
         nop
         decfsz   INNER,F
         goto   in_lp
         return
delay      movwf   OUTER      ;vueltas de 1mS
out_lp      call   del_1ms
         decfsz   OUTER,F
         goto   out_lp
         return      
;//////////////////////////////////////////////////////////////
;/////////RUTINA DE CONVERSION DE DATOS OBTENIDOS//////////////
;//////////////////////////////////////////////////////////////
; "Extraccion" de datos del conversor A/D
COMIENZA
      CLRF   MILES
      CLRF   CENTENES
      CLRF   DECENES   
      MOVF   ADRESL,0
      MOVWF   ADRESL1   
      MOVF   ADRESH,0   
      MOVWF   ADRESH1   
cuentacent
      MOVLW   d'100'
      SUBWF   ADRESL1,0   
      BTFSS   STATUS,C   
      GOTO    inccent   
miraADRESH   
      MOVF   ADRESH1,0
      BTFSC   STATUS,Z    
      GOTO    cuentadec   
decADRESH   
      DECF   ADRESH1,1
      MOVLW   d'156'   
      ADDWF   ADRESL1,1
inccent   
      INCF   CENTENES,1
      GOTO    cuentacent               
cuentadec   
      MOVLW   d'10'   
      SUBWF   ADRESL1,0   
      BTFSC   STATUS,C   
      GOTO    fin      
      INCF   DECENES,1   
      GOTO    cuentadec                  
fin      
      MOVF    ADRESH1,0
      MOVWF   UNIDAES   
Bcd_A_Ascii
            movlw    H'30'           ;H'30' --> W
            iorwf   DECENES,F       ;Convierte de BCD a ASCII
            iorwf   CENTENES,F      ;Convierte de BCD a ASCII
            movf    MILES,F         ;ASCII_H --> F
            btfsc   STATUS,Z        ;? ASCII_H es D'00' ?
            goto    Espacio         ;Si
            movlw   H'30'           ;H'30' --> W
            iorwf   MILES,F         ;Convierte de BCD a ASCII
            return                  ;Retorna
Espacio
;
            movlw   '0'            ;A' ' --> W
            movwf   MILES      ;A' ' --> ASCII_H
            movwf   CENTENES     ;A' ' --> ASCII_H
            movwf   DECENES     ;A' ' --> ASCII_H
            return                  ;Retorna
END