> UART_SendChar > bsf STATUS,RP0 ; switch to bank 1 This only switches to either bank 1 or 3. If you were previosly in banks 2 or 3 then this won't work. > btfss TXSTA,1 ; check TXMT flag and loop if Use the mnemonics in the include file instead of hard coded bit numbers. It makes your code more readable, reduces that chance of getting the bit number wrong, and saves everyone else time looking it up to make sure you did get the bit number right. > goto UART_SendChar ; still not done sending the last character Why do you want to wait until the last character is sent to send the next one? Do you really need to make sure the previous character has gone out or are you just trying to make sure the UART is ready to receive the next character? If so, you should be checking the TXIF bit in PIR1. > bcf STATUS,RP0 ; switch back to bank 0 Or bank 2, depending on RP1. > movfw UART_Tx ; put transmit value > movwf TXREG ; in transfer register > return ; return from UART_SendChar Overall, I really don't like calling this routine from the interrupt handler. First, it effectively reduces the available call stack size, at least for any code that runs with interrupts enabled. Second, this is such simple logic that it would only take a few instructions to do in line. I would make a macro out of it if I wanted to use this code once in the subroutine and once in the interrupt routine. Third and most importantly, doing a busy wait in an interrupt routine is usually a very bad thing. ******************************************************************** Olin Lathrop, embedded systems consultant in Littleton Massachusetts (978) 742-9014, olin@embedinc.com, http://www.embedinc.com -- http://www.piclist.com hint: To leave the PICList mailto:piclist-unsubscribe-request@mitvma.mit.edu