I just tried some test code out

Code:
'The main loop
loop:
    
    'Check for serial data
    if pir1.5=1 then 'Check if there is any serial data
        while pir1.5 'Loop through all the data
            indata=RCREG 'Get a byte
            select case indata
                case 255 'Reset the buffer
                    recpos=0
                case else
                    if recpos<17 then
                        inbuffer(recpos)=indata
                        recpos=recpos+1
                    else
                        high porta.1
                    endif
            end select
        wend
        if rcsta.1=1 then
            rcsta.4=0
            rcsta.4=1
        endif
    endif
goto loop
Now, that code *should* wait for a 255. When it gets it it resets recpos to 0. Each byte after that should end up in InBuffer until recpos=17. At that point a light should turn on (porta.1)

The reset part does seem to be working but not all the bytes arrive. The light wont come on until i send another 1-3 bytes.

I should point out im not using the MAX232 chip because they havnt arrived yet but instead i linked into one of Matts boxes which has an alternative solution. I cant see why that would cause a problem but ive just found out that when i set the address it gets set to 1 less than what i actually set it to