Yes, with RD16 set, you load the highbyte first, then when you load the lowbyte, both bytes a written to the timer at the same time.
But when reading a timer with RD16, you have to read the lowbyte first. That puts the highbyte in a buffer that can be read in the next instruction.
If you read the highbyte first, you get the value that was left in the buffer the last time you read/wrote the timer, then the lowbyte of the current timer value.
Also, when using RD16, you don't need to stop the timer when reading or writing to the timer.
For something like this where you need Critical timing ... the interrupt handlers should be ASM. Saving/Restoring PBP's system variables to get in/out of a PBP interrupt will throw the results off considerably.
None of the statements in your handlers use any PBP system variables. So you can just change the handers "type" to ASM without actually having to write it in ASM.
hth,
Bookmarks