Heh, well, I guess it's been so long since I looked at the routine that I forgot I *did* make it 5us each loop by changing the way the zero bit is checked. Forget the added "nop" in my second posting.... sigh, it's too early in the morning for this! (The routine here is correct, I'm sure about it.) This should get you 0.985 seconds, which seems ok, unless you need better precision: ;; Uses 2 registers as counters plus W Delay_1sec movlw 0x03 ; 3 * .328secs = .985 seconds movwf Counter2 clrf Delay_Count ; 256 loops @ 256*5us each ~= .328secs clrw Delay_L addlw 0x01 btfsc STATUS, Z ; check for overflow past 0 decfsz Delay_Count goto Delay_L decfsz Counter2 goto Delay_L return _________________________________________________________________ Get your FREE download of MSN Explorer at http://explorer.msn.com -- http://www.piclist.com hint: The PICList is archived three different ways. See http://www.piclist.com/#archives for details.