Depending on what you want to do with the result, I would probably go with a redundant version... Something like: movf VALUE,w addlw 1 movwf VALUE btfss STATUS,DC return andlw 0xf0 addlw 16+6 movwf VALUE btfss STATUS,C return andlw 0x0f addlw 6*16 movwf VALUE incf VALUE+1,f return Which would still count to 16, but reset things on an overflow. You would need a correction routine if you want to actually use the result, but it allows for slightly faster increases and decreases, I think. Note that the above routine was written in the Email, and not tested in any way. Greetings, Maarten Hofman. -- http://www.piclist.com PIC/SX FAQ & list archive View/change your membership options at http://mailman.mit.edu/mailman/listinfo/piclist