When using ON INTERRUPT the interrupts don't get handled until the currently executing PBP statement has finished.

At 9600 baud it only takes 1.04ms per byte. With the USARTS 2 byte buffer, the longest that any statement can take is 2.08ms. Anything taking longer will cause the buffer to overflow. Then with [DEFINE HSER_CLROERR 1] the program never even knows it lost data.

With PAUSE 50 in the MainLoop, you could easily loose 15-20 bytes at a time.

If you were using ASM interrupts, that wouldn't be a problem.

HTH,