Sixteen bit counter with a Constant Loop Delay
by: Marc Heuler from: http://www.myke.com/basic.htm
movlw HIGH TimeDelay ; Load the Delay Values
movwf HiCount
movlw LOW TimeDelay
Dlay:
addlw 1 ; Increment the Counter by 1
btfsc STATUS, Z
decfsz HiCount, f ; Decrement the High Counter
goto Dlay
This loop takes five cycles to execute, regardless of whether or not "HiCount" is to be decremented.
The actual time delay is calculated using the sixteen bit number from:
Time Dlay = (16BitDlay * 5 ins/loop * 4 clocks/ins / clock frequency) + 256