ON INTERRUPT GOTO ISR
i have great reservation that "on interrupt" will be successful @9600 with a 4mhz osc, use dt ints

HSerin [STR SData\5]
puts your 690 in a blocking loop until 5 characters have been received, no matter how long it takes
its not isr material







my take

Code:
' ====== FUSES ====================================================================================' PIC 16F690 Fuses (MPASM)
@ __config _FCMEN_OFF &_IESO_OFF &_CPD_OFF &_WDT_OFF &_INTRC_OSC_NOCLKOUT &_BOR_OFF &_CP_OFF &_PWRTE_OFF &_MCLRE_OFF
@ ERRORLEVEL -306


' ====== REGISTERS =================================================================================
OSCCON     = %01110000 'Internal RC set to 8Mhz - Register not to be used with XTal
OPTION_REG = %10000000 'PORT A&B Pull-Ups (look WPUA & WPUB)
ANSEL      = %00000000 'Select analog inputs Channels 0 to 7
ANSELH     = %00000000 'Select analog inputs Channels 8 to 11
INTCON     = %11000000 'INTERRUPT Control
;PIE1       = %00100000 'Peripheral Interrupts


' ====== UART SETTINGS ============================================================================
RCSTA      = %10010000 ' Enable serial port & continuous receive
TXSTA      = %00100000 ' Enable transmit, BRGH = 0
SPBRG      = 12        ' 9600 Baud @ 8MHz, 0.16%


' ====== DEFINES ==================================================================================
DEFINE OSC 8
DEFINE NO_CLRWDT 1   ' Don't waste cycles clearing WDT  
DEFINE HSER_CLOERR 1 ' Automatic clear overrun error 


' ====== VARIABLES ================================================================================
LED     VAR PORTB.6
SData   VAR BYTE(5)
rx_count var byte
rx_complete var bit
rx_hit var bit
;Print   VAR BIT
clear
'======= INITIALIZE ===============================================================================
PORTB.5 = 1  ' set to avoid sending serial data garbage
,Print   = 0  ' send out serial data only if some is received
   
'======= PROGRAM ==================================================================================
ON INTERRUPT GOTO ISR
gosub rx_start
MAIN:
    IF rx_complete THEN
        Hserout [STR SData\5,13,10]
        gosub rx_start
    ENDIF 
     IF rx_hit THEN 
      TOGGLE LED
      rx_hit=0
     endif  
    GOTO MAIN
END    


rx_start        ;resume /start    rx
    RCSTA.4=0  ;clear any rcsta error
    RCSTA.4=1
    rx_count=0
    rx_complete=0
    PIE1.5=1
return


' ====== INTERRUPT SERVICE ROUTINE ================================================================
    Disable
ISR:
    sdata[rx_count]=RCREG
    rx_hit=1
    rx_count=rx_count+1
    if  rx_count==5 then   ;stop rx for now
    rx_complete=1
    PIE1.5=0
    endif
    RESUME
    ENABLE