I've been plowing through the source in Microchips App Note AN555 (asynch serial i/o) trying to understand it, and can't quite figure out what a common sequence is doing. I'm still pretty new at this, so please be gentle. The code looks like this (comments are mine): clrf TMR0 ; clear both timers clrwdt bsf STATUS,RP0 ; bank 1 movlw 07h movwf OPTION_REG ; load 0x07 into option reg bcf STATUS,RP0 ; back to bank 0 clrf TMR0 ; clear timer0 bsf STATUS,RP0 ; back to bank 1 movlw 0Fh movwf OPTION_REG ; load 0x0F into option reg clrwdt ; clear wdt So it's clearing timer0 and the wdt, loading the option register with 0x07, clearing timer0, then immediately re-loading option with 0x0F, then clearing the wdt. To my untrained eye, it seems like a lot of thrashing around that isn't actually accomplishing very much. This sequence is executed near the start of each of the interrupt service routines transmit bit, receive bit, etc.) Check me here: ignoring the high nibble (which is the same in both cases) 0x07 in the option register means: prescaler assigned to tmr0, with "full" value (1:256) And 0x0F in option means: prescaler assigned to wdt, with "full" value (1:128) I guess my question is: why bother with the first option register load? The end result, it seems, is to simply reset the wdt to it's longest delay. Come to think of it, why bother with any of this? Usually just after this code, timer0 is reloaded with a pre-calculated value (depending on clock frequency and baud rate) and set running off the internal clock, to generate the next interrupt (next bit time). It all seems rather useless to me, but I'm quite sure I'm missing something important, maybe side effects? Any insight would be greatly appreciated. Dave Johnson