;------------------------------------------------------------
; Código assembler 
; Proyecto: usart_prueba
; Autor: 
; Fecha: 06/08/2018
; PIC: 16F877A
; Velocidad de reloj: 4 Mhz
;------------------------------------------------------------
		    LIST    P=PIC16F877A
		    INCLUDE P16F877A.INC

	__CONFIG _FOSC_XT & _WDTE_OFF & _PWRTE_OFF & _BOREN_ON & _LVP_OFF & _CPD_OFF & _WRT_OFF & _CP_OFF
    
		   
PUERTO_TX	    EQU		6	;PIN DE TRANSMICION
PUERTO_RC	    EQU		7	;PINDE RECEPCION		
		
		    CBLOCK	0x20
		    ENDC
STAR		    ORG		0x00	    ;DIRECCION DE VECTOR RESET
		    PAGESEL	COMIENZO
		    GOTO	COMIENZO    ;COMIENZO DEL PROGRAMA
		    CODE
T_Texto_NEX	    MOVWF	PCL
Mensaje_NEX_1	    DT		"HOLA MUNDO", 0x00

	    
COMIENZO	    CALL	Inicia_USART_Nextion
		    CALL	Inicia_Nextion
		    MOVLW	d'0'
		    CALL	ID_Objeto
		    MOVLW	Mensaje_NEX_1
		    CALL	Nex_Texto_Envia

Principal	    CALL	Retardo_5s
		    MOVLW	d'0'			
		    CALL	Nex_Texto_Pos_X
		    CALL	Retardo_5s
		    MOVLW	d'1'			
		    CALL	Nex_Texto_Pos_X
		    CALL	Retardo_5s
		    MOVLW	d'2'			
		    CALL	Nex_Texto_Pos_X
		    GOTO	Principal	
;-------------------------------------------------------------------------------		    
		    
		    INCLUDE	<NEXTION_SUB.INC>
		    INCLUDE	<RETARDOS.INC>
		    END
; Descripción:
;		    
;		EN ALGUNOS CASOS LAS VARIABLES LAS RELLENO ASI (xxxxxx)
;		
;		    
;
;************** RUTINAS HASTA HAORA ******************************************** 
;	
;	***Inicia_USART_Nextion***
;  Configura el puerto donde están los pines TX t RC para la comunicación USART,
;  en mi caso con el pic 16f877a lo encontramos en el puerto C pines 6 y 7.
;  configura los registros de transmisión y recepción
;  Modos asincrónico, 8 bits, alta velocidad, 9600 baudios / 4Mhz
;  Habilita comunicación USART y recepción constante 
;  NOTA: En algunos ejemplos e cambiado el cristal de 4Mhz por uno de 20Mhz
;  esto porque para hacer algunas pruebas me va mejor que trabaje más rápido
;  cambie la velocidad de transmisión a 115200 baudios
;  aquí una tabla FOSC XT 4Mhz+SPBRG=25 9600 baudio
;		 FOSC HS 20Mhz +SPBRG=129 9600 baudio
;		 FOSC HS 20Mhz +SPBRG=10 115200 baudio
;  SINTAXIS:
;		CALL	Inicia_USART_Nextion	
;
;	***Inicia_Nextion***
;  espera un tiempo para que se estabilice la pantalla y el puerto USART
;  transmite inicio 0x00,0x00,0x00,0xff,0xff,0xff (ASCII 000ÿÿÿ)
;  espera otro tiempo.
;
;  SINTAXIS:
;		CALL	Inicia_Nextion	
;
;       ***ID_Objeto***
;  Identifica el número de objeto al que nos vamos a dirigir.
;  como en este caso Nxtion segun mis pruebas no me deja poner 
;  ceros por delante, ay que hacer una criba. Ejenplo;
;        t00x.txt="HOLA MUNDO"ÿÿÿ ----> falso 
;   	 tx.txt="HOLA MUNDO"ÿÿÿ ------> verdadero
;  este pregunta si ay 0 en centenas si es así envía centenas , decenas, y unidades.
;  sin tocar si es 0 entonces y no la convertimos a ASCII para que de como carácter nulo 
;  luego en la rutina de envió hacemos otra criba, saltándonos  todos los caracteres nulos
;  repetimos lo mismo con decenas y la única que se envía tal cual convertida en ASCII
;  es unidades, ya que unidades si puede valer 0. (t0)
;
;  SINTAXIS
;		movlw	d'xxx'
;		call	ID_Objeto
;
;
;  NOTA: tanto si es para enviar un mensaje como para cualquier atributo ay que tener en
;  cuenta el número de objeto.
;
;
;	***Nex_Texto_Envia***
;  esta rutina manda un mensaje de texto para el objeto texto de nuestra pantalla,
;  utilizando la directiva DT.
;  enviamos todo lo referido al tipo de objeto, el número de objeto, la función que nos interesa
;  (en este caso txt) y luego lamamos al mensaje.
;  NOTA: según mis primeras pruebas los mensajes a enviar deben estar encerrados entre             
;  comillas    ("  ").
;
;  esto es lo que envía esta rutina   tx.txt=" call mensaje "ÿÿÿ
;
;
;  SINTAXIS	
;		T_Texto_NEX	    MOVWF	PCL		    ;todos los mensajes a enviar 
;		Mensaje_NEX_1	    DT		"HOLA MUNDO", 0x00  ;deben estar ubicados en la 
;								    ;cabecera después del org de
;		Inicio						    ;inicio
;
;		                    CALL	Inicia_USART_Nextion
;		                    CALL	Inicia_Nextion
;		                    ---------------------------------
;				----------------------------------
;				 ----------------------------------   
;				------------------------------------
;				    MOVLW	d'xxx'
;		                    CALL	ID_Objeto
;				    MOVLW	Mensaje_NEX_1
;		    		    CALL	Nex_Texto_Envia
;
;
;	***Nex_Testo_Color_Fondo***
;  esta subrutina nos permite cambiar dentro de nuestro marco de texto, su color.
;  puede ir desde 0 hasta 65535, (esto requiere registro de 16 bits xxxxx_h xxxx_l)
;  (tx.bco=xxxxxÿÿÿ)
;
;
;  SINTAXIS
;		CALL	Nex_Testo_Color_Fondo
;
;		    
;	***Nex_Testo_Color_Fuente***
;  esta subrutina nos permite cambiar dentro de nuestro marco de texto, el color .
;  de la fuente puede ir desde 0 hasta 65535, (esto requiere registro de 16 bits 
;  xxxxx_h xxxx_l)      (tx.bco=xxxxxÿÿÿ)
;  
;
;
;  SINTAXIS
;		CALL	Nex_Testo_Color_Fuente
;		    
;
;		    
;	***Nex_Texto_Password
;  Con esta rutina si ponemos 1 el texto se cambia por asteriscos  y si 
;  ponemos 0 se ve el texto normal. (tXXX.pw=X)
;
;		    
; SINTAXIS
;		MOVLW	d'1'
;		CALL	Nex_Testo_Password
;		
;		MOVLW	d'0'
;		CALL	Nex_Testo_Password
;
;
;	***Nex_Texto_Pos_X***
;  esta rutina posiciona nuestro texto  en el eje x. tiene 3 posiciones.
;  si no se declara la posicion o esta es mayor que 2, por defecto ella 
;  la pondra en 0 (derecha)		    
;
;		    
;	derecha      = 0
;	centro       = 1
;	izquierda    = 2
;
;		    
;  SINTAXIS
;		MOVLW	d?X?
;		CALL		Nex_Texto_Pos_X




