This is what I do with DT_Interrupts on a serial stream of 115kBps on a PIC18F25k22 @44.2368MHz.

"Buffer" is a circular buffer of 256 bytes. When BufferReady = 1, I use another pointer (ParsePtr) to parse the data.


Code:
'----[interrupts Handlers]-------------------------------------------------------
RX_IntHandler:
    IF (RCSTA1.2 = 1) THEN
        ' A framing error occurred.
        ' Read RCREG to clear the error but don't use the data.
        CharBuff = RCREG1

    ELSE
       ' No framing error occurred. Get caracter.
       CharBuff = RCREG1

        If CharBuff <= 10 Then
            Buffer(BuffPtr) = 0
            BuffPtr = BuffPtr + 1
            BufferReady = 1

        Else
            If CharBuff >= 32 Then
                Buffer(BuffPtr) = CharBuff
                BuffPtr = BuffPtr + 1
            ENDIF
        ENDIF
    ENDIF

    @ INT_RETURN