mira yo tambien tube problemas con la recepcion, el chiste esta que si la primera ves que te llega el dato por el serial, se guarda en un buffer, ahora cuando llege otro creo que cuando se sobreescribe este se bloquea, te aconsejo que cada ves que te llege un dato lo tomes y proceses luego al salir de la interrupcion reinicies el modulo de recepcion, creo que es CREN
asi podras,
SALIRSS ;ETIQUETA DE SALIDA, UNA VES PROCESES TU INTERRUPCION
SWAPF GUARDAR_STATUS,0
MOVWF STATUS
SWAPF GUARDAR_W,1
SWAPF GUARDAR_W,0
bcf RCSTA,CREN
bsf RCSTA,CREN
RETFIE ;SALIR DE INTERRUPCION
por cierto en que momento le das RETFIE para volver de la interrupcion, cuando NO es una falsa interrupcion?
solo veo esto
org 0x04 ;Vector de interrupción
goto Inter
;********************************************************************************************
;Tx_Dato: Transmite vía serie el dato presente en el reg. W
Tx_Dato bcf PIR1,TXIF ;Restaura el flag del transmisor
movwf TXREG ;Almacena el byte a transmitir
bsf STATUS,RP0
Tx_Dato_Wait btfss TXSTA,TRMT ;Byte transmitido ??
goto Tx_Dato_Wait ;No, esperar
bcf STATUS,RP0
return ;Si
;******************************************************************************************
;Tratamiento de la interrupción
Inter btfss PIR1,RCIF ;Ha sido interrupción en la recepción ??
retfie ;No, falsa interrupción
bcf PIR1,RCIF
movf RCREG,W ;Lee el dato recibido
movwf dato ;Lo saca por la puerta B
call Tx_Dato ;Lo retransmite a modo de eco
return
;*******************************************************************************************
;Programa principal
Inicio1 clrwdt
clrf PORTC
clrf PORTB
bsf STATUS,RP0 ;Selecciona banco 1
clrf PORTB ;Puerta B salida
veo un return al final de tu rutina de interupcion y luego tu programa principal, es eso con lo que volves de la interrupcion?