Something doesn't seem right. I tried this:

USBSERVICE
SEROUT2 PORTD.3, $4054,[16,85,DEC RPM]
USBSERVICE

No dice. Then I took out the serout command and put a pause command in place of it. It works at 2mS, it's iffy at 3mS and from 4mS and above. For whatever reason, my max time in between usbservice commands is 2mS. Doesn't seem right.....

As far as the USART, I didn't use it for two reasons. The demo boards from Microchip use portc.7 for the SDO going to the MCP. Also, I typically use wireless communication and I use the USART for it so I always leave open the USART pins for future use.

If there's something else you can think of, let me know please. It's not critical to my design but it would be nice to have. I'm just trying to figure out the 2mS limit. The boards use a 20MhZ crystal and using HS and HSPLL seem to have no effect.