;----------------------------------------------------------------------------------------------------------------
;RUTINA PARA RECIBIR EN LA USART EN FORMA UNIDIRECCIONAL.
;------------------------------------------------------------
;
;LA COMUNICACIÓN ES UNIDIRECCIONAL PARA EL CASO QUE SOLO SE UTILICE ESTA RUTINA. ESTA RUTINA VA ACOMPAÑADA DE TX_USART
;LA CONFIGURACIÓN ES:
;USART 9600 BAUDIOS A 4 MHZ CRISTAL PRINCIPAL
;MODO ALTA VELOCIDAD
;9 BIT DE DATO. EL NOVENO BIT SE UTILIZA COMO BIT DE PARIDAD PAR
;
;AUTORES:
;			DAVID PERSI 	www.meteorologiafacil.com.ar
;			SUKY			http://infopic-suky.blogspot.com/
;
;¿QUÉ SE NECESITA?
;-----------------
;
;PIC = 16F877 O COMPATIBLE.
;6 POSICIONES DE LA RAM EN EL BANCO 0
;						bit_recepcion
;						bit_cont
;						bit_cont_temp
						RCSTA_temp
;						dato_recibido
;						dato_recibido_temp
;
;¿QUÉ CONSUME?
;-------------
;
;UN NIVEL DE LA PILA (STACK) POR CADA RUTINA A LLAMAR.
;
;NOTA IMPORTANTE:
;				-LOS RETORNOS SE HACEN AL BANCO 0.
;				-ANTES DE LLAMAR A CADA RUTINA, NO ES NECESARIO AJUSTAR EL BANCO YA QUE SE HACE EN FORMA AUTOMÁTICA.
;****************************************************************************************************************
;INSTRUCCIONES:
;--------------
;
;1- LLAMAR LA RUTINA INI_USART_RX QUE SIRVE PARA INICIALIZAR LA USART.
;2- CUANDO SE DESEA ACTIVAR LA RECEPCIÓN, LLAMAR A LA RUTINA ACTIVAR_USART (SE USA LA INTERRUPCIÓN)
;3- CHEQUEAR EL BIT 0 DE LA BANDERA bit_recepcion
;                     1 = SE RECIBIÓ DATO
;                     0 = NO SE RECIBIÓ DATO
;4- EN CASO DE VALER 1, AJUSTAR EL BIT A 0 Y LEER dato_recibido YA QUE EL DATO ES GUARDADO EN ESA POSICIÓN DE LA RAM.
;5- PARA UNA NUEVA RECEPCIÓN REPETIR LOS PASOS DESDE EL PUNTO 3.
;
;INSTALACIÓN:
;------------
;
;A). INCLUIR LA RUTINA RX_USART.INC POR MEDIO DE LA INSTRUCCIÓN INCLUDE EN EL BANCO 0 DE LA MEMORIA DE PROGRAMA.
;B). INCLUIR LA RUTINA RX_USART_INTERRUPCION.INC DESPUES DE LA VERIFICACIÓN DEL LLAMADO DE LA INTERRUPCIÓN
;    Y LUEGO DE SALVAR LOS DATOS DEL STATUS, W, ETC. SI EL DATO ES RECIBIDO SIN ERROR, SE GUARDA EN dato_recibido EN LA RAM (BANCO 0)
;C). EN LAS INTERRUPCIONES, AGREGAR UNA RUTINA CON LA ETIQUETA SALIR EL CUAL, RESTAURA LOS VALORES DE STATUS; W; ETC.
;
;NOTA: EN CASO DE DESEAR DESABILITAR POR ALGÚN MOMENTO LA RECEPCIÓN, DESDE EL BANCO 0 EJECUTAR ESTA LÍNEA:
;    BCF	RCSTA,SPEN
;
;CUANDO SE DESEA DE NUEVO HABILITAR LA RECEPCIÓN, EJECUTAR LA RUTINA ACTIVAR_USART
;
;IMPORTANTE:
;-----------
;CADA VEZ QUE SE VUELVE DE UNA RUTINA, SE HACE DESDE EL BANCO 0.
;NO ES NECESARIO AJUSTAR LOS BANCOS YA QUE LO HACE AUTOMÁTICAMENTE.
;
;****************************************************************************************************************
;INICIALIZACIÓN DEL MÓDULO USART
;****************************************************************************************************************

INI_USART_RX
			BCF			STATUS,RP1
			BSF			STATUS,RP0		;BANCO 1
			BSF			TRISC,7			;ENTRADA RX
			BCF			TXSTA,SYNC		;ASINCRONO
			BSF			TXSTA,BRGH		;MODO ALTA VELOCIDAD
			BCF			STATUS,RP0		;BANCO 0
			BSF			RCSTA,RX9		;HABILITAMOS NOVENO BIT.
			BSF			STATUS,RP0		;BANCO 1
			MOVLW			.25
			MOVWF			SPBRG
			BCF			STATUS,RP0		;BANCO 0
			BSF			RCSTA,SPEN
			RETURN
;
;ACTIVACIÓN DEL MÓDULO USART DE INTERRUPCIÓN.
;
ACTIVAR_USART
			BCF			STATUS,RP1
			BSF			STATUS,RP0		;BANCO 1
			BSF			PIE1,RCIE
			BSF			INTCON,PEIE		;HABILITAMOS INTERRUPCIONES EXTERNAS PARA LA USART
			BSF			INTCON,GIE		;HABILITAMOS INTERRUPCIONES GLOBALES.
			BCF			STATUS,RP0
			BSF			RCSTA,CREN		;HABILITAMOS RECEPCIÓN.
			RETURN