;
;rs232_1.asm
;Envia "HOLA" hacia el programa terminal, si se recibe CR desde el 
;terminal, se repite el envio

;Ejemplo de comunicación RS232 entre un pic16F84 y ordenador PC  
;La configuración es el estandar 8N1 (8 bits de datos, sin paridad, 
;y 1 bit de stop) y la velocidad de comunicación a 9600 Bd. 


	list	p=16f84		;modelo de pic utilizado
	include	"p16f84.inc"	;Definición de registros
	__config	_CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;palabra de configuración	
			
BAUDIOS		equ	.9600     	;Velocidad de comunicación
CLKIN		equ	.4000000	;Frecuencia de trabajo en c/s
T_MODO		equ	1		;transmitir primero el bit LSB
R_MODO		equ	1		;recibe primero el bit LSB
T_Nbit		equ	8		;transmitir datos de 8 bits
R_Nbit		equ	8		;recibe datos de 8 bits
Sbit		equ	1		;un bit de stop
												

	
Rs232_var	equ	0x0C	;Inicio del bloque de variables reservadas
				;para las rutinas RS232.INC

		org	0x00
		goto 	INICIO
		org	0x05
				
		include	"rs232.inc"	;Rutinas de comunicación RS232
		
				
INICIO		bsf	STATUS,RP0    	;Selecciona página 1
		movlw	b'11101111'	;RB5 entrada y RB4 salida
		movwf	TRISB		;
		bcf	STATUS,RP0	;Seleccionar página 0
				
BUCLE		bsf	Txd_pin		;Línea de transmisión a "1"
		bsf	Rxd_pin		;Línea de recepción a "1"
				
		movlw	'H'		
		movwf	Txdreg		;carga H en el reg. de transmisión
		call	TxD		;llama a la rutina de TX
		movlw	'O'
		movwf	Txdreg
		call	TxD
		movlw	'L'
		movwf	Txdreg
		call	TxD
		movlw	'A'
		movwf	Txdreg
		call	TxD
		movlw	.13		;.13 en cód. ASCII es CR
		movwf	Txdreg		;carga CR (retorno de carro)
		call	TxD		
		movlw	.10		;.10 en cód. ASCII es LF
		movwf	Txdreg		;carga LF (avance de linea)
		call	TxD

ESPERA		call	RxD		;llama a la rutina de RX
		movlw	.13		
		subwf	Rxdreg,W	;ha recibido un "CR" ?
		btfss	STATUS,Z		
		goto	ESPERA		;No, espera a recibir 
		goto	BUCLE		;Si, vuelve a transmitir HOLA

		end


              