Phillip wrote: > I was not disabling interrupts during my ISR. > Now that interrupts are off and I'm not calling my c routine recursively > things are much better behaved. This again makes no sense. The hardware disables interrupts when the ISR is entered. The ISR re-enables interrupts by using the RETFIE instruction when it returns to the foreground code. You should not otherwise be messing with interrupt enable/disable in the ISR. > I'm not sure why calling the getcUSART1 from my ISR is such a bad idea. Using a high level language, particularly in the ISR, is a bad idea especially when you're not clear what is really going on. Many people here, including me, always say to do your first few PIC projects in assembler until you have a solid understanding of the machine and the instruction set. Only then should you be allowed to use a high level language. Otherwise you run into exactly the kind of situation you did, where strange things are happening and you can't figure out what because things are going on under the hood that you don't understand. Let this be a lesson to you and everyone else from the instant gratification crowd that thinks they can get away with not understanding the low levels and jump right into using a HLL on a PIC. Other reasons for avoiding HLL in the ISR is that the compiler has to save/restore a lot more state than really neccessary (take a look at the generated instructions some time), if any code is speed-critical it's probably the ISR, and calling subroutines from the ISR uses up stack locations not available to any other code. ****************************************************************** Embed Inc, Littleton Massachusetts, (978) 742-9014. #1 PIC consultant in 2004 program year. http://www.embedinc.com/products -- http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist