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