Mario Thomaidis wrote: > Once a new value is loaded into the TXREG, it is transferred to the > TSR register one instruction later (provided of course the last value > in the TSR has been completely sent - otherwise, it sits there until > TSR is empty). Sorry, I passed over the original code. You *must not* clear TXREG after each byte sent. Clearing it is actually instructing that a NUL character be sent, and you'll never know half the time whether what is sent is the NUL or the other character you loaded later. > You do not need to disable the transmitter in between bytes (for > normal operation Again, you *must not* do this, you are most likely to abort part of the current character. Whether you produce glitches by doing so depends on the setting of the port registers. But doing so immediately after sending a NUL really is asking for trouble! This is actually less of a problem if you are using TRMT instead of TXIF which is what you should really be using. Using TRMT avoids the "first character sent" problem and slows transmission by adding "extra stop bits" which is not necessarily a Bad Thing. So, remove the instruction to send the NUL, and make sure that enabling the transmitter is part of your initialization code, not stuck within the character sending code. Mario's code is OK except that you may strike the "first character" problem. It may be better to use: UART_TRANS BSF STATUS, RP0 ; Bank 0 (PIR1 & TXREG) MOVWF TXREG ; Transmit value loaded into W prior LOOP call TRANS_DELAY BTFSS PIR1, TXIF ; TXIF=1 ? (= TXREG clear) GOTO LOOP ; RETURN -- Cheers, Paul B.