Here is my stab at fixing the 16bit counter problem test movlw 04 movwf hibyte ;some test data loop movf lobyte,w iorwf hibyte,w btfsc status,z goto finish decf lobyte * changed line btfss _v ; #define ALUSTA,3 _v * added line goto loop decfsz hibyte goto loop finish goto finish end Your basic flaw is that you were decrementing the high byte when the low byte went to all zeros. You need to decrement the high byte when the low byte goes to all ones! I think this will work? Something tells me there is a better (more efficient?) way to do this though? Hope this helped Roy