Solution
The most common cause USART reception stops is a result of overflowing the received buffer. A receive buffer overflow can occur when interrupt or polling response, relative to the incoming data rate causes the overflow and disabling of the receiver.
Methods of testing in code:
once entering the RCIF interrupt handler, test for framing (RCSTA<FERR>) or overrun (RCSTA<OERR>) error. If RCSTA<OERR> is set, the error condition can be reset by cycling the RCSTA<CREN>, low then high for one instruction cycle each. After removing the error condition, read the RCREG register until PIR1<RCIF> is clear.
USART overrun error prevention:
1. quaruntee by design, no single interrupt handler or software routine lasts longer than 1/10 * (usart data byte reception period)
2. test for (RCSTA<OERR> and (RCSTA<FERR>
if RCSTA<OERR> is set, cycle RCSTA<CREN> and empty out REREG
3. when an interrupt handler is entered because PIR1<RCIF> =1, read all waiting byte from RCREG unitl PIR1<RCIF> is clear.