Sure enough, went back to the data sheet looking for info regarding reads/writes. It's there in section 10.4. You must write the high byte first because that goes in to a buffer that is written when you write the low byte. Original code works like a charm after flipping the order of the high and low byte writes. Thank you Scott and everyone else that took the time to respond. On 11/15/06, Scott Dattalo wrote: > > On Tue, 2006-11-14 at 18:07 -0800, Shawn Wilton wrote: > > > > Does anyone see anything wrong with this code: > > > > //Set page 103 for details regarding the +2 > > tmr0l = (unsigned char)65000; > > tmr0h = (unsigned char)(65000 >> 8); //Right shift so the top byte > > becomes the bottom byte > > Others may or may not be correct about the default signedness of > chars, but I believe your problem is even more fundamental. When > writing to a 16-bit timer, you must write the high byte first. The > write to the low byte will initiate a full 16-bit to real > hardware. Similarly, to read a 16-bit timer, read the low byte > first. This will initiate an access of the high byte too which you may > read on the subsequent instruction. > > Scott > -- > http://www.piclist.com PIC/SX FAQ & list archive > View/change your membership options at > http://mailman.mit.edu/mailman/listinfo/piclist > -- Shawn Wilton (b9 Systems) http://b9Systems.com <- New web page -- http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist