Olin, using the example below, can you expand/clarify please > Your timer 1 overflow period is 16.4mS. All you need is some code > that is guaranteed to run a little more often than that Say its period is 0xFF00 (16.320ms), and the frequency being measured is ~59.4Hz, ie a period of 16.832ms, or 0x10700 * 250ns. So that's (1 rollover + 0x0700) of TMR1 between rising edges > This code grabs the timer 0 [1 ? typo ?] high byte, finds the delta from > the last time it did that, then adds that delta into a software accumulator > > The procedure above makes the software accumulator up to date with > the latest high byte of timer 1 Assuming the previous sample left 0x00 in the s/w acc, which was loaded into TMR1H (as per paragraph below) This sample of TMR1H is 0xFF delta = 0x01 -> into s/w acc (*** did you mean absolute delta ?) Now, next edge comes along when TMR1H is 0x07 (rolled through 00). So total increments since last edge is 0x010700 > In the capture interrupt, the total period is the period indicated by the > timer 1 low byte difference, plus the timer 1 high byte difference from > its last updated value, plus the software accumulator TMR1H difference = 0x07 (last update) + 0x01 (s/w acc) > You then clear the software accumulator, update the timer 1 old low > byte, and update the timer 1 old high byte used by the software > accumulator update routine -- http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist