Hola Chicos,
Se me ha presentado un conflicto con un programa para controlar la temperatura de un calentador, para mentenerlo al rededor de 100 ºC. usando un pic 16f873.
El ADC está bien configurado y me lee bien. Para probarlo, genero el codigo solo para leer el ADC y enviar  el dato a un LCD configurado a 4 bits. Hasta ahi va todo bien. Luego le agrego al código la subrutina de control de temperatura. Esta debe encender el calentador cuando esta por debajo de 95 ºC y apagarlo por encima de 105, pero encuentro que cuando está por debajo de 95 grados el LCD visualiza adecuadamente el dato y cuando llega a 95 se descontrola y muestra un valor mucho mayor que el leido por el ADC es decir visualiza 223 grados, cosa que es errónea. Hice un seguimiento al codigo simulando con el MPLAB y el error sucede con la instrucción rrl que la uso para dividir por dos el valor codificado por el ADC para luego hacer la conversión BCD.
Estas son la instruciones que uso:
CONTROL      BANK1   ;Entra al banco1
      movf   ADRESL,0      
                     BANK0      ;Vuelve al banco 0   
                                movwf       UNIDADES
                                rrf             UNIDADES
                                call            CONVERSION_ADC
                   movwf   TEMPORAL
      movlw    0x65       ;AQUI ESCRIBO HEX PARA 105ºC      subwf    TEMPORAL,W   
                                btfsc     STATUS,C      ; ¿Igual que la máxima?         goto   APAGA  ; C=1, es mayor. ; Desactiva calefactor
            ; C=0, es menor, salta
      movlw    0x63   ;AQUI ESCRIBO HEX PARA 95 ºC
      subwf    TEMPORAL,W
      btfss    STATUS,C   ; ¿Inferior a la mínima?         
      goto   PREND   ; C=0, es menor; Activa calefactor
      goto   EXPLOA4         
APAGA      bcf    PORTB,2      ;Apaga el Horno
      goto   EXPLOA4
PREND      bsf    PORTB,2      ;Prende el Horno
      goto   EXPLOA4
Espero que me entiendan el problema y puedan ayudarme, by.... 
