; Programa:	Comunicación asíncrona a PC vía RS232
; Autor:	Danilo García
; Fecha:	Mayo de 1999
; 		El programa recibe un byte por el pin RX 
;		para luego enviarlo por el pin TX.
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;
; Parámetros de comunicación RS232: 9600,N,8,1
;
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
	list p=16f84
#include 
;
;PALABRA DE CONFIGURACIÓN:
;
	__CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC
;
;===========================================================================
#DEFINE	BANK0	BCF	STATUS,RP0
#DEFINE	BANK1	BSF	STATUS,RP0
TRUE	EQU	1
FALSE	EQU	0
;===========================================================================
;DEFINICION DE BITS:
;
#DEFINE	RX	PORTB,0
#DEFINE	TX	PORTB,1
;
;===========================================================================
;DEFINICION DE VARIBLES
;
DATO	EQU	0x0C	;Dato a Transmitir o Recibido RS232
RET1	EQU	0x0D	;para retardo de bit RS232
RET2	EQU	0x0E	;para retardo de bit RS232
CONT8	EQU	0x0F	;Contador de bits en rutinas RX y TX
;===========================================================================
	ORG 0
	GOTO	INICIO
;===========================================================================
	ORG 4
INTERRUPCION
	BTFSS	INTCON,INTF	;COMPROBACIÓN DE INTERRUPCION INT
	RETFIE
;
	CALL	RXDATO
	XORLW	TRUE
	BZ	TX_DATO
	BCF	INTCON,INTF	;BORRA BANDERA INT
	RETFIE
TX_DATO
	CALL	TXDATO
	BCF	INTCON,INTF	;BORRA BANDERA INT
	RETFIE
;***************************************************************************
;**********        RUTINAS DE COMUNICACION ASINCRONA     *******************
;***************************************************************************
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
RXDATO
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	BTFSS	RX
	GOTO	RXBYTE
	RETLW	FALSE
RXBYTE
	CALL	TIME2
	MOVLW	8
	MOVWF	CONT8
BIT	CALL	TIME
	RRF	DATO,F
	BCF	DATO,7
	BTFSC	RX
	BSF	DATO,7
	DECFSZ	CONT8,F
	GOTO	BIT
	CALL	TIME2
	RETLW	TRUE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TXDATO
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	MOVLW	8
	MOVWF	CONT8
	BCF	TX
BIT2
	CALL	TIME
	RRF	DATO,F
	BTFSS	STATUS,C
	BCF	TX
	BTFSC	STATUS,C
	BSF	TX
DECON
	DECFSZ	CONT8,F
	GOTO	BIT2
	CALL	TIME
	BSF	TX
	CALL	TIME
	RETURN
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME2			;RETARDO DE 52 uS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	MOVLW	1
	MOVWF	RET1
T1
	MOVLW	.14
	MOVWF	RET2
T2
	DECFSZ	RET2,F
	GOTO	T2
	DECFSZ	RET1,F
	GOTO	T1
	NOP
	RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
TIME			;104 uS
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	MOVLW	1
	MOVWF	RET1
T3
	MOVLW	.28
	MOVWF	RET2
T4
	DECFSZ	RET2,F
	GOTO	T4
	DECFSZ	RET1
	GOTO	T3
	NOP
	NOP
	RETURN
;***************************************************************************
INICIO
;
;PROGRAMACION DE LOS PUERTOS
	BANK1
	BCF	TX			;PROGRAMA PIN TX COMO SALIDA
	BCF	OPTION_REG,INTEDG	;PROGRAMA INT CON FLANCO DE BAJADA
	BANK0
;
;PROGRAMACION DE LA INTERRUPCION INT(RB0)
;
	BSF	INTCON,INTE	;HABILITA INTERRUPCIÓN INT
	BSF	INTCON,GIE	;HABILITA INTERRUPCIONES GLOBALMENTE
;
;ESPERA LA INTERRUPCION
	GOTO	$
;
	END

    Source: geocities.com/micros_uan