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: 
			
		
	
								
								
									
	
								
							
							 
   
				 
						 
 
		 
 
		 
 
		 
 
		 
 
		