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....