	LIST 	P=16F873A
	#INCLUDE<P16F873A.INC>
	;DECLARACION DE VARIABLES
	;CONVERSOR ANALOGO DIGITAL DE CUATRO DIGITOS 
	;CONVERSOR DE TEMPERATURA A TRES MAGNITUDES CELSIOS; KELVIN ;FARENTHEIT
TIMER0		EQU	01
PCL     	EQU     02
STATUS		EQU	03
PORTA		EQU	05
PORTB		EQU	06
ADCON0  	EQU     1F
ADCON1		EQU	9F
ADRESL		EQU	9E
ADRESH		EQU	1E
INTCON		EQU	0B
AVE_LOW		EQU	20
AVE_HIG		EQU	21
JAI_LOW		EQU	22
JAI_HIG		EQU	23
COS_LOW		EQU	24
COS_HIG		EQU	25
SUC_LOW		EQU	26
SUC_HIG		EQU	27
REG1		EQU	28
REG2		EQU	29
REG3		EQU	2A
COVEŅAS		EQU	2B
VALLEN		EQU	2C
UNO		EQU	2D
DOS		EQU	2E
CERO		EQU	2F
UNI_GRADOS	EQU	30
DEC_GRADOS	EQU	31
CENT_GRADOS	EQU	32
COCIENTE	EQU	39
COLOMB		EQU	3A
RESULTADO	EQU	3B
RFARE_L		EQU	3C
RFARE_H		EQU	3D
RESULT_L	EQU	3E
RESULT_H	EQU	3F
CENTENAS	EQU	40
DECENAS		EQU	41
UNIDAD		EQU	42
CONTA		EQU	43
MENS		EQU	44
	;BITS CONVERSOR
ADIF	EQU	6	
GODONE	EQU	2
ADON	EQU	0
ADFM	EQU	7
C	EQU	0
	;BITS	LCD
RS	EQU	1
E	EQU	2

	ORG	00
	GOTO	INICIO
TEMPO	MOVLW	.80
	MOVWF	REG1
DEC6	MOVLW	.21
	MOVWF	REG2
DEC5	MOVLW	.20
	MOVWF	REG3
DEC4	DECFSZ	REG3,1
	GOTO	DEC4
	DECFSZ	REG2,1
	GOTO	DEC5
	DECFSZ	REG1,1
	GOTO	DEC6
	RETURN
DATOS	
	BSF	PORTA,RS
	BSF	PORTA,E
	MOVWF	PORTB
	CALL	TEMPO
	BCF	PORTA,E
	RETURN
RETARDO	
	MOVLW	.21
	MOVWF	REG1
DEC3	MOVLW	.15
	MOVWF	REG2
DEC2	MOVLW	.12
	MOVWF	REG3
DEC1	DECFSZ	REG3,1
	GOTO	DEC1
	DECFSZ	REG2,1
	GOTO	DEC2
	DECFSZ	REG1,1
	GOTO	DEC3
	RETURN

INSTRUC	
	BCF	PORTA,RS        ;COLOCA EN CERO RAO
	BSF	PORTA,E
	MOVWF	PORTB	
	CALL	RETARDO
	BCF	PORTA,E
        CALL    RETARDO
	RETURN
TABLA	ADDWF	PCL,1
	RETLW	"0"
	RETLW	"1"
	RETLW	"2"
	RETLW	"3"
	RETLW	"4"
	RETLW	"5"
	RETLW	"6"
	RETLW	"7"
	RETLW	"8"
	RETLW	"9"

TABLA1	ADDWF	PCL,1
        RETLW	"T"
	RETLW	"E"
	RETLW	"M"
	RETLW	"P"
	RETLW	"E"
        RETLW   "R"
        RETLW	"A"
	RETLW	"T"
	RETLW	"U"
	RETLW	"R"
	RETLW	"A"
 	RETLW	"C"
	RETLW	"L"
	RETLW	"A"
	RETLW	"S"
	RETLW	"E"
	RETLW	" "
        RETLW   "A"
        RETLW	"D"
	RETLW	"Q"
	RETLW	" "
	RETLW	"D"
	RETLW	"A"		
	RETLW	"T"
	RETLW	"O"
	RETLW	"S"
	RETLW	" "

RETARD	MOVLW	.100	
	MOVWF	REG1
	nop
	nop
	nop
	nop
DEC9	DECFSZ	REG1,1
	GOTO	DEC9
	RETURN


INICIO
	BSF	STATUS,5
	BCF	STATUS,6
	CLRF	PORTB
	MOVLW	07
	MOVWF	ADCON1
	MOVLW	B'00000001'
	MOVWF	PORTA
	BCF	STATUS,5


LCDINI	MOVLW	B'00111000'     ;INTERFACE DE 8BITS 2 LINEAS
	CALL	INSTRUC
	MOVLW	B'00000110'     ;DIRECCION A LA DERECHA
	CALL	INSTRUC
	MOVLW	B'00001101'     ;PRENDE PANTALLA
	CALL	INSTRUC
	MOVLW	B'00000001'     ;LIMPIA PANTALLA
	CALL	INSTRUC

LCD	MOVLW   B'10000000'            ;EL PUNTERO SE UBICA EN LA PRIMERA LINEA
        CALL    INSTRUC
        CLRF    MENS
RE      MOVF    MENS,0
        CALL    TABLA1
        CALL    DATOS
        INCF    MENS,1
        MOVF    MENS,0
        XORLW   .11
        BTFSS   STATUS,2
        GOTO     RE
	MOVLW	B'11000000'
	CALL	INSTRUC
RESS	MOVF	MENS,0
	CALL	TABLA1
	CALL	DATOS
	INCF	MENS,1
	MOVF	MENS,0
	XORLW	.27
	BTFSS	STATUS,2
	GOTO	RESS
	BSF	STATUS,5
	BCF	STATUS,6
COROSO	CALL	CONVERSIONANALOGODIGITAL
	BCF	STATUS,5
	CALL	MULTIPLICACION
	CALL	B2BCD
	CALL	VISUALIZACION
	GOTO	COROSO
CONVERSIONANALOGODIGITAL
	BSF	STATUS,5
	MOVLW	B'10001110'		;RA0 ANALOGO JUSTIFICACION LOS OCHO PRIMEROS BITS DE ADRESL Y DOS BITS DE ADRESH
	MOVWF	ADCON1
	BCF	STATUS,5
EEE	MOVLW   B'10000001'
	MOVWF   ADCON0
	;CALL	RETARD
	BCF	PIR1,ADIF
	BSF	ADCON0,GODONE
	CALL	RETARD
EL	BTFSS	PIR1,ADIF
	GOTO	EL
	BSF	STATUS,5
	BCF	STATUS,6
	MOVF	ADRESL,0	;LOW PARTE
	BCF	STATUS,5
	MOVWF	JAI_LOW
	MOVF	ADRESH,0	;HIG PARTE		
	MOVWF	JAI_HIG		;RA1 Y RA2 ADRESH
	MOVLW	.232
	MOVWF	AVE_LOW
	MOVLW	.1
	MOVWF	AVE_HIG
	CLRF	UNI_GRADOS	
	CLRF	DEC_GRADOS	
	CLRF	CENT_GRADOS
	RETURN


MULTIPLICACION			;RUTINA MULTIPLICACION ENTRE DOS NUMEROS DE 16 BITS
	MOVLW	.16		;LOS NUMEROS SON AVE Y JAI .EL RESULTADO QUEDA EN COS Y SUC .
	MOVWF	COVEŅAS		;JAI PIERDE EL NUMERO QUE TRAIA Y AVE QUEDA INTACTO.
	CLRF	SUC_HIG
	CLRF	SUC_LOW
	CLRF	COS_HIG
	CLRF	COS_LOW
MAR	RRF	JAI_HIG,1
	RRF	JAI_LOW,1
	BTFSC	STATUS,0
	CALL	SUMA
	RRF	COS_HIG,1
	RRF	COS_LOW,1
	RRF	SUC_HIG,1
	RRF	SUC_LOW,1
	DECFSZ	COVEŅAS,1
	GOTO	MAR
	RETURN



SUMA	MOVF	AVE_LOW,0
	ADDWF	COS_LOW,1
	BTFSC	STATUS,0
	INCF	COS_HIG,1
	MOVF	AVE_HIG,0	
	ADDWF	COS_HIG,1
	RETURN
B2BCD	BCF	STATUS,0
	MOVLW	D'24'
	MOVWF	VALLEN
	CLRF	CERO
	CLRF	UNO
	CLRF	DOS
OP16	RLF	SUC_LOW,1
	RLF	SUC_HIG,1
	RLF	COS_LOW,1
	RLF	DOS,1
	RLF	UNO,1
	RLF	CERO,1
	DECFSZ	VALLEN,1
	GOTO	A_DEC
	RETURN
A_DEC	MOVLW	DOS
	MOVWF	FSR
	CALL	A_BCD
	MOVLW	UNO
	MOVWF	FSR
	CALL	A_BCD
	MOVLW	CERO
	MOVWF	FSR
	CALL	A_BCD
	GOTO	OP16		;.............
A_BCD	MOVLW	.3
	ADDWF	INDF,0
	MOVWF	COVEŅAS
	BTFSC	COVEŅAS,3
	MOVWF	INDF
	MOVLW	30H
	ADDWF	INDF,0
	MOVWF	COVEŅAS
	BTFSC	COVEŅAS,7
	MOVWF	INDF
	RETURN

VISUALIZACION
	BCF	STATUS,5
	BCF	STATUS,6
	BCF	PORTA,3
	SWAPF	CERO,W
	ANDLW	0F
	MOVWF	CENT_GRADOS

	MOVF	CERO,0
	ANDLW	0F
	MOVWF	DEC_GRADOS

	SWAPF	UNO,W
	ANDLW	0F
	MOVWF	UNI_GRADOS
	MOVLW	B'10001100'
	CALL	INSTRUC
	MOVLW	B'00001100'	;DESACTIVO EL CURSOR
	CALL	INSTRUC		
	MOVF	CENT_GRADOS,0
	CALL	TABLA
	CALL	DATOS
	MOVF	DEC_GRADOS,0
	CALL	TABLA
	CALL	DATOS
	MOVF	UNI_GRADOS,0
	CALL	TABLA
	CALL	DATOS
	MOVF	DEC_GRADOS,0      ;para cuando llegue a 50 grados prender led
	XORLW	.5
	BTFSS	STATUS,2
	RETURN
	MOVF	UNI_GRADOS,0
	XORLW	.0
	BTFSS	STATUS,2
	RETURN
	BSF	PORTA,3
	CALL	RETARDO
	RETURN
	END

