PIC demo board USART
You're doing a lot of processing inside your handleUsartRx() function before you clear the interrupt flag, and I suspect that your problem is that you're simply missing a lot of the incoming data.

In particular, you call strstr() twice, and this is a relatively expensive function in terms of CPU cycles.

Furthermore, your strstr() calls will never succeed, since &lt;CR&gt;, etc. is not the correct way to denote a control character in a C string. For a carriage return, for example, use either \r or \x0D. Linefeed would be either \n or \x0A.

Since you never find the end of the string, your data buffer just keeps growing, which means that the processing on each new character takes longer and longer.