After looking at the last message that Scott sent me, I think that I have a solution that fits my purposes. It will accumulate up to 65,535 counts without error and times out after 65,791 counts. The count in the region between those two numbers is held at 65,535 (ffff). ;measure puse width on a 12c508 with 5 uSec resolution. ;Times out after about 327 mSec. clrf c_low clrf c_high s1: BTFSC IOPORT,IOBIT ;5 cycles goto went_high INCFSZ c_low,F goto s1 clrwdt ; BTFSC IOPORT,IOBIT ;5 cycles goto went_high INCFSZ c_high,F goto s1 ;note: each time HI byte increments, LO byte to misses a count ;final count == LoByte + HiByte time_out: ;do time out stuff here went_high ;fix up the mod 257 counter movfw c_high ; addwf c_low,F skpnc ;no carry - leave Hi byte alone incfsz c_high,F ;carry - does Hi byte contain ff? goto $+2 ;either no carry or did not wrap movwf c_low ;wrapped past ffff - hold at ff movwf c_high ;ditto The logic is simple - if the high byte contained ff and a carry was generated when the 2 bytes were added together (which would wrap the high byte to 00), the value in W (which could only be ff) is written to both bytes. The choice of $+2 for the junp is deliberate - both paths take the same # of cycles. My thanks to all who contributed ideas and suggestions. Scott - Thank you again for taking time out of your very busy day. dwayne