PUERTO_TX	    EQU		6	;PIN DE TRANSMICION
PUERTO_RC	    EQU		7	;PINDE RECEPCION
;		   CONFIGURA COMUNICACION U USART			
Configura_USART	        BSF	STATUS,RP0				
			BCF	TRISC,PUERTO_TX	;PONE A (0) ESTE PIN COMO SALIDA 
			BSF	TRISC,PUERTO_RC	;PONE A (1) ESTE PIN COMO ENTRADA
			MOVLW   0x24		;TX HABILITADA, MODO ASINCRON0
			MOVWF   TXSTA		;CON 8 BITS Y ALTA VELOCIDAD
			MOVLW   0x19		;SET BAUDIOS A 9600  0x19 
			MOVWF   SPBRG		;CON Fosc = 4MHz
			BCF	STATUS,RP0	;ENTRO EN BANCO 0
			MOVLW   0x90		;AJUSTA RECEPTOR A 8 BITS, RECEPCION
			MOVWF   RCSTA		;CONTINUA HABILITADA USART EN ON
			RETURN			;RETORNA
Envia_USART		BSF	STATUS,RP0
			BCF	STATUS,RP1
			BTFSS   TXSTA,TRMT
			GOTO    Envia_USART
			BCF	STATUS,RP0
			MOVWF	TXREG
			BCF	STATUS,RP0
			BCF	STATUS,RP1
			RETURN
Recibe_USART		BCF	STATUS,RP0
			BTFSS   PIR1,RCIF
			GOTO    Recibe_USART
			MOVF    RCREG,W
DATO			BCF	PIR1,RCIF
			BSF	STATUS,RP0
			RETURN
;-------------------------------------------------------------------------------
; CRIBA DE CEROS POR DELANTE Y CONVIERTE RESULTADO A ASCII
; SI CENTENA > 0 --> CONVIERTE CENTENA, DECENA Y UNIDADE A ASCII
; SI CENTENA ? 0 --> PREGUNTA A DECENA
; SI DECENA > 0 --> CENTENA = 0 CONVIERETE DECENA Y UNIDAD A ASCII
; SI DECENA ? 0 --> CENTENA = 0, DECENA = 0 CONVIERTE UNIDAD A ASCII
; UNIDAD SIEMPRE ES CONVERTIDA A ASCII NO IMPORTA SU VALOR
			CBLOCK 
			NUM_OBJETO_UNI
			NUM_OBJETO_DEC
			NUM_OBJETO_CEN
			AUX_OBJETO
			ENDC
			
Numero_Objeto		MOVWF	AUX_OBJETO
			MOVLW	d'0'
			CALL	BIN_a_BCD_16_H
			MOVF	AUX_OBJETO,W
			CALL	BIN_a_BCD_16_L	    ;SOLO NOS INTERESA LA PARETE
			MOVF	BIN_BCD_16_CEN,W    ;BAJA	    
			SUBLW	d'0'
			BTFSS	STATUS,Z
			GOTO	Todo_UDC
			GOTO	Pregunta_Dec
Todo_UDC		MOVLW	d'48'
			ADDWF	BIN_BCD_16_UNI,F
			ADDWF	BIN_BCD_16_DEC,F
			ADDWF	BIN_BCD_16_CEN,F
			MOVF	BIN_BCD_16_UNI,W
			MOVWF	NUM_OBJETO_UNI
			MOVF	BIN_BCD_16_DEC,W
		    	MOVWF	NUM_OBJETO_DEC
			MOVF	BIN_BCD_16_CEN,W
			MOVWF	NUM_OBJETO_CEN
			BCF	STATUS,Z
			BCF	STATUS,C
			RETURN
Pregunta_Dec		MOVF	BIN_BCD_16_DEC,W	    
			SUBLW	d'0'
			BTFSS	STATUS,Z
			GOTO	Todo_UD
			GOTO	Solo_Uni
Todo_UD			MOVLW	d'48'
			ADDWF	BIN_BCD_16_UNI,F
			ADDWF	BIN_BCD_16_DEC,F
			MOVF	BIN_BCD_16_UNI,W
			MOVWF	NUM_OBJETO_UNI
			MOVF	BIN_BCD_16_DEC,W
			MOVWF	NUM_OBJETO_DEC
			MOVLW	d'0'
			MOVWF	NUM_OBJETO_CEN
			BCF	STATUS,Z
			BCF	STATUS,C
			RETURN
Solo_Uni		MOVLW	d'48'
			ADDWF	BIN_BCD_16_UNI,F
			MOVF	BIN_BCD_16_UNI,W
			MOVWF	NUM_OBJETO_UNI
			MOVLW	d'0'
			MOVWF	NUM_OBJETO_DEC
			MOVLW	d'0'
			MOVWF	NUM_OBJETO_CEN
			RETURN

Envia_Numero_Objeto	BCF	STATUS,RP0
			MOVF	NUM_OBJETO_CEN,W
			SUBLW	d'0'	
			BTFSS	STATUS,Z
			GOTO	Aux_Envia_1
Sigue_En_Nu_ob_2	MOVF	NUM_OBJETO_DEC,W
			SUBLW	d'0'	
			BTFSS	STATUS,Z
			GOTO	Aux_Envia_2
Sigue_En_Nu_ob_3	MOVF	NUM_OBJETO_UNI,W
			CALL	Envia_USART
			RETURN

Aux_Envia_1		MOVF	NUM_OBJETO_CEN,W
			CALL	Envia_USART
			GOTO	Sigue_En_Nu_ob_2
Aux_Envia_2		MOVF	NUM_OBJETO_DEC,W
			CALL	Envia_USART
			GOTO	Sigue_En_Nu_ob_3
;************************BIN_a_BCD_16******************************************
			
			CBLOCK 
			BIN_BCD_16_DEC_MIL
			BIN_BCD_16_UNI_MIL
			BIN_BCD_16_CEN
			BIN_BCD_16_DEC
			BIN_BCD_16_UNI
			AUX_BCD_16_L
			AUX_BCD_16_H
			ENDC
BIN_a_BCD_16_H		CLRF	AUX_BCD_16_H
			MOVWF	AUX_BCD_16_H
			RETURN
BIN_a_BCD_16_L		CLRF	AUX_BCD_16_L
			MOVWF	AUX_BCD_16_L
			swapf 	AUX_BCD_16_H,w
			andlw 	0x0F
			addlw 	0xF0
			movwf 	BIN_BCD_16_UNI_MIL
			addwf 	BIN_BCD_16_UNI_MIL,f
			addlw 	0xE2
			movwf 	BIN_BCD_16_CEN
			addlw 	0x32
			movwf 	BIN_BCD_16_UNI
			movf 	AUX_BCD_16_H,w
			andlw 	0x0F
			addwf 	BIN_BCD_16_CEN,f
			addwf 	BIN_BCD_16_CEN,f
			addwf 	BIN_BCD_16_UNI,f
			addlw 	0xE9
			movwf 	BIN_BCD_16_DEC
			addwf 	BIN_BCD_16_DEC,f
			addwf 	BIN_BCD_16_DEC,f
			swapf 	AUX_BCD_16_L,w
			andlw 	0x0F
			addwf 	BIN_BCD_16_DEC,f
			addwf 	BIN_BCD_16_UNI,f
			rlf 	BIN_BCD_16_DEC,f
			rlf 	BIN_BCD_16_UNI,f
			comf 	BIN_BCD_16_UNI,f
			rlf 	BIN_BCD_16_UNI,f
			movf 	AUX_BCD_16_L,w
			andlw 	0x0F
			addwf 	BIN_BCD_16_UNI,f
			rlf 	BIN_BCD_16_UNI_MIL,f
			movlw 	0x07
			movwf 	BIN_BCD_16_DEC_MIL
			movlw 	0x0A
Lb1	
			addwf 	BIN_BCD_16_UNI,f
			decf 	BIN_BCD_16_DEC,f
			btfss	STATUS,C
			goto 	Lb1
Lb2
			addwf 	BIN_BCD_16_DEC,f
			decf 	BIN_BCD_16_CEN,f
			btfss 	STATUS,C
			goto 	Lb2
Lb3
			addwf 	BIN_BCD_16_CEN,f
			decf 	BIN_BCD_16_UNI_MIL,f
			btfss 	STATUS,C
			goto 	Lb3
Lb4
			addwf 	BIN_BCD_16_UNI_MIL,f
			decf 	BIN_BCD_16_DEC_MIL,f
			btfss 	STATUS,C
			goto 	Lb4
			BCF	STATUS,Z
			BCF	STATUS,C
			RETURN
			
Envia_Variable_BDC	MOVF	BIN_BCD_16_DEC_MIL,W
			ADDLW	d'48'
			CALL	Envia_USART
			MOVF	BIN_BCD_16_UNI_MIL,W
			ADDLW	d'48'
			CALL	Envia_USART
			MOVF	BIN_BCD_16_CEN,W
			ADDLW	d'48'
			CALL	Envia_USART
			MOVF	BIN_BCD_16_DEC,W
			ADDLW	d'48'
			CALL	Envia_USART
			MOVF	BIN_BCD_16_UNI,W
			ADDLW	d'48'
			CALL	Envia_USART
			RETURN
;ESTA RUTINA LE BYT A BYT EL MENSAJE Y LO ENVIA 
			CBLOCK
			MENSAJE_MEMORISA        
			GUARDA_CARACTER		
			ENDC
Prepara_Envia_Mensaje	MOVF	AUX_SALVA_MENSAJE,W			
Envia_Mensaje		MOVWF	MENSAJE_MEMORISA   
Envia_Mensaje_1		MOVF	MENSAJE_MEMORISA,W
			CALL	Mensajes_Nextion
			MOVWF	GUARDA_CARACTER
			MOVF	GUARDA_CARACTER,F
			BTFSS	STATUS,Z
			GOTO	Envia_Mensaje_2
			RETURN	
Envia_Mensaje_2		CALL	Envia_USART
			INCF	MENSAJE_MEMORISA,F
			GOTO    Envia_Mensaje_1			

;-------------------------------------------------------------------------------			
			CBLOCK
			TEM_H
			TEM_L
			DATO_MEMORIA
			ENDC
Dir_Memoria		MOVF	TEM_H,W
			BCF	STATUS,RP0
			BSF	STATUS,RP1
			MOVWF	EEADRH
			BCF	STATUS,RP0
			BCF	STATUS,RP1
			MOVF	TEM_L,W
			BCF	STATUS,RP0
			BSF	STATUS,RP1
			MOVWF	EEADR
Lee_Memoria		BSF	STATUS,RP1
			BSF	STATUS,RP0
			BSF	EECON1,EEPGD
			BSF	EECON1,RD		
			NOP
			NOP
			BCF	STATUS,RP0		
			MOVF	EEDATA,W		
			BCF	STATUS,RP1		
			BCF	STATUS,RP0		
			MOVWF	DATO_MEMORIA	
			RETURN		
;-------------------------------------------------------------------------------
			CBLOCK
			DATO_COLUMNAS
			DATO_LINEAS
			ENDC
Envia_a_Nextion		
Termina_o_Sigue		CALL	Dir_Memoria
			INCF	TEM_L
			MOVF	DATO_MEMORIA,W
			SUBLW	d'0'
Criba			BTFSS	STATUS,Z
			GOTO	Criba_1
			GOTO	Dato_es_cerro
Criba_1			MOVF	DATO_MEMORIA,W
			SUBLW	d'251'
			BTFSS	STATUS,Z
			GOTO	Criba_2
			GOTO	L_e_n_o
Criba_2			MOVF	DATO_MEMORIA,W
			SUBLW	d'252'
			BTFSS	STATUS,Z
			GOTO	Criba_3
			GOTO	L_e_m
Criba_3			MOVF	DATO_MEMORIA,W
			SUBLW	d'253'
			BTFSS	STATUS,Z
			GOTO	L_e_u_s
			GOTO	L_e_n_v
L_e_u_s			MOVF	DATO_MEMORIA,W
			CALL	Envia_USART
			GOTO	Termina_o_Sigue
L_e_n_v			CALL	Envia_Variable_BDC
			GOTO	Termina_o_Sigue
L_e_m			CALL	Prepara_Envia_Mensaje
			GOTO	Termina_o_Sigue
L_e_n_o			CALL	Envia_Numero_Objeto
			GOTO	Termina_o_Sigue
Dato_es_cerro		RETURN
;-----------------------ENVIA TEXTO A NEXTION--------------------------------------------------------
			CBLOCK
			AUX_SALVA_MENSAJE
			ENDC
Envia_Texto		MOVWF	AUX_SALVA_MENSAJE
			MOVLW	HIGH	OB_TEXTO_FU_TEXTO
			MOVWF	TEM_H
			MOVLW	LOW	OB_TEXTO_FU_TEXTO
			MOVWF	TEM_L
			CALL	Envia_a_Nextion
			RETURN
;-----------------------ENVIA BORRAR TEXTO NEXTION------------------------------
Envia_Borra_Texto	MOVLW	HIGH	OB_TEXTO_FU_BORRA
			MOVWF	TEM_H
			MOVLW	LOW	OB_TEXTO_FU_BORRA			
			MOVWF	TEM_L
			CALL	Envia_a_Nextion
			RETURN
;-----------------------ENVIA COLOR FONDO TEXTO---------------------------------
Envia_Color_Fondo	MOVLW	HIGH	OB_TEXTO_FU_COL_TEXTO
			MOVWF	TEM_H
			MOVLW	LOW	OB_TEXTO_FU_COL_TEXTO			
			MOVWF	TEM_L
			CALL	Envia_a_Nextion
			RETURN
;-----------------------ENVIA COLOR FUENTE--------------------------------------
Envia_Color_Fuente	MOVLW	HIGH	OB_TEXTO_FU_COL_FONT_TEXTO
			MOVWF	TEM_H
			MOVLW	LOW	OB_TEXTO_FU_COL_FONT_TEXTO			
			MOVWF	TEM_L
			CALL	Envia_a_Nextion
			RETURN
			
    
			ORG 0x1A05 ;
Tabla_Nex ;goto $ 		    
    				
    DT  't',.251,'.','t','x','t','=','"',.252,'"','ÿ','ÿ','ÿ',.0    ;1 
    DT  't',.251,'.','t','x','t','=','"','"','ÿ','ÿ','ÿ',.0	    ;2
    DT  't',.251,'.','b','c','o','=',.253,'ÿ','ÿ','ÿ',.0	    ;3 
    DT  't',.251,'.','p','c','o','=',.253,'ÿ','ÿ','ÿ',.0	;4
    DT  'x','c','e','n',.0,.0	;5
    DT  'y','c','e','n',.0,.0	;6
    DT  'p','w',.0,.0,.0,.0,.0	;7 
    DT  'i','s','b','r',.0,.0	;8
    DT  'ÿ','ÿ','ÿ',.0,.0,.0	;9
    DT  't',.0,.0,.0,.0,.0	;10	
    ;SIMBOLO DE REFERENCIA 251 EN ASCII PIDE NON OBJETO
    ;SIMBOLO DE REFERENCIA 252 EN ASCII PIDE TEXTO
    ;SIMBOLO DE REFERENCIA 252 EN ASCII PIDE NUMERO EN BCD