Tengo el ensamblador algo oxidado. Pero bueno, mira si así funciona y ya me cuentas...
Codigo:
; 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 <p16f84.inc>
;
;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
FLAG_COM EQU 0x10
DATOX EQU 0x11
DATOY EQU 0X12
;===========================================================================
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
BTFSC FLAG_COM,0
GOTO BIT_Y
BSF FLAG_COM,0
MOVF DATO
MOVWF DATOX
GOTO SALIR
BIT_Y
BCF FLAG_COM,0
MOVF DATO
MOVWF DATOY
SALIR
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
Oye, mira que no esté pisando ninguna dirección en los registros que creé. Los he puesto a continuación de la última dirección que creastes, la 0x0F
Saludos!!