Buenas a todos.
Estoy realizando un proyecto con el PIC16887, que trata de visualizar la temperatura en la pantalla LCD, mediante un LM35.
No se que estoy haciendo mal en el codigo que siempre me da una temperatura de 55 grados Celsius, espero que me podais ayudar.
Os adjunto el codigo del programa principal y las rutinas de visualizacion en pantalla y conversor AD
Estoy realizando un proyecto con el PIC16887, que trata de visualizar la temperatura en la pantalla LCD, mediante un LM35.
No se que estoy haciendo mal en el codigo que siempre me da una temperatura de 55 grados Celsius, espero que me podais ayudar.
Os adjunto el codigo del programa principal y las rutinas de visualizacion en pantalla y conversor AD
Código:
;**********************************************************************************
; Programa principal
;**********************************************************************************
INICIALIZACIONES:
;****** Inicializaciones
CALL INITPORTS
CALL INITTEC
CALL INITLCD
;* CALL INIC_REL ; Inicializar RELOJ
CALL INITSER
CALL INITAD ; Inicializa el conversor analogica/Digital
BSF STATUS,RP0 ; Banco 1
MOVLW d'125' ;
MOVWF CONT ;
; Inicialización timer 0 (frecuencia cristal = 4 MHz)
MOVLW B'000000011' ; Fosc/4= 1000000, Fpreescaler (64)--> mueve ese vaor al acumulador
MOVWF OPTION_REG&7F ; Preescaler = 64
BCF STATUS,RP0 ; Banco 0 --> pone a 0 el bit RP0 de STATUS
BCF P_LED,b_LED ; pone a 0 el bit b_led de P_led --> enciende el led
CALL INICTEMP ;
MOVLW 0 ;
MOVWF estado ;
MOVLW d'3' ;
MOVWF BCDA2 ;
MOVLW d'0' ;
MOVWF BCDA1 ;
CLRF TEMPAL ;
; Inicialización interrupciones
MOVLW B'10100000' ; habilita las interrupciones causadas por el TMR0
MOVWF INTCON ; Interrupción de TMR0 habilitada
;****** Lazo principal
LAZOPPAL:
CALL CONVERSOR ; Llama a la rutina de conversion
CALL VISUALIZARTEMP
CALL PASARPC
CALL ESPERA500
CALL LIMPIAPANT
CALL ESPERA500
GOTO LAZOPPAL ; Se cierra lazo principal
;****************************************************
;VISUALIZACION***************************************
;****************************************************
VISUALIZARTEMP:
MOVLW segunda ;
CALL LCDIWR ; Colocar el cursor en la 1era posicion de la segunda linea
MOVLW A'T' ;
CALL LCDDWR ; T
MOVLW A'-' ;
CALL LCDDWR ; -
MOVLW A'>' ;
CALL LCDDWR ; >
MOVLW A' ' ;
CALL LCDDWR ;
MOVF BCD1,W ;
CALL LCDNWR ; x
MOVF BCD0,W ;
CALL LCDNWR ; x
MOVLW A'C' ;
CALL LCDDWR ; C
MOVLW A' ' ;
CALL LCDDWR ;
MOVLW A' ' ;
CALL LCDDWR ;
RETURN ;
LIMPIAPANT:
MOVLW lcd_clr ;
CALL LCDIWR ; Limpiar pantalla
;BSF flags,flimp ;
RETURN ;
;****************************************************
;Conversor AD****************************************
;****************************************************
INICTEMP:
MOVLW d'0' ;
MOVWF BCD0 ;
MOVLW d'0' ;
MOVWF BCD1 ;
RETURN ;
INITAD:
BSF STATUS,RP0 ; Banco 1
MOVLW B'00000101' ; Configura conversor AD (primera parte)
MOVWF ADCON1&7F ; RA3: Vref+, RA1 y RA0: entradas analogicas, justificadpo a la derecha
BSF TRISA&7F,0 ; Se configuran como entradas las entradas analogicas del puerto A
BSF TRISA&7F,1 ;
BSF TRISA&7F,3 ;
BCF STATUS,RP0 ; Banco 0
BCF ADCON0,ADCS1 ; Configura conversor AD (segunda parte)
BSF ADCON0,ADCS0 ; Velocidad de conversion Tosc/8 (Maximo para 4MHz)
BCF ADCON0,CHS2 ; Canal 0
BCF ADCON0,CHS1 ;
BCF ADCON0,CHS0 ;
BSF ADCON0,ADON ; Conversor encendido
RETURN ;
CAN0: ; Fija el canal 0 para la conversion AD
BCF ADCON0,CHS2 ; Canal 0
BCF ADCON0,CHS1 ;
BCF ADCON0,CHS0 ;
RETURN ;
CAN1: ; Fija el canal 0 para la conversion AD
BCF ADCON0,CHS2 ; Canal 1
BCF ADCON0,CHS1 ;
BSF ADCON0,CHS0 ;
RETURN ;
CONVAD:
BSF ADCON0,GO ; Se inicia la conversion
RETURN ;
CONVAD1:
MOVF ADRESH,W ; Se toma el valor del conversor y se guarda en variables de salida
MOVWF CAD1 ;
MOVWF CAD2 ;
CALL INICTEMP ; Limpiamos las variables
GOTO BIN2BCD ;
CONVERSOR:
BTFSC ADCON0,GO ; Comprueba el valor de GO/DONE
RETURN ;
CALL CONVAD1 ;
CALL CONVAD ;
RETURN ;
BIN2BCD:
DECF CAD1 ; Copia la variable T al entorno de trabajo
BTFSC STATUS,Z ; Comprueba si el bit Z de STATUS es 0
RETURN ;
CALL INCRBCD ; Va a la funcion INCRBCD
GOTO BIN2BCD ; Va a la funcion BIN2BCD
INCRBCD:
INCF BCD0 ; Incrementamos BCD0
BTFSC BCD0,u0 ; Comprobar si el LSB es 0
RETURN ;
BTFSS BCD0,u1 ; comprobar si el segundo desde atras es 1
RETURN ;
BTFSC BCD0,u2 ; Comprobar si el tercero desde atras es 0
RETURN ;
BTFSS BCD0,u3 ; Comprobar si el cuarto desde atras es 1
RETURN ;
CLRF BCD0 ; Limpia el registro BCD0
INCF BCD1 ; Incrementa BCD1
BTFSC BCD1,u0 ; Comprobar si el LSB es 0
RETURN ;
BTFSS BCD1,u1 ; comprobar si el segundo desde atras es 1
RETURN ;
BTFSC BCD1,u2 ; Comprobar si el tercero desde atras es 0
RETURN ;
BTFSS BCD1,u3 ; Comprobar si el cuarto desde atras es 1
RETURN ;
CLRF BCD1 ; Limpia el registro BCD1
RETURN ;
RETURN ;
Última edición por un moderador: