udata d1 res 1 d2 res 1 d3 res 1 code delay_500ms movlw 0x8A movwf d1 movlw 0xBA movwf d2 movlw 0x03 movwf d3 delay_500ms_0 decfsz d1, f goto $+2 decfsz d2, f goto $+2 decfsz d3, f goto delay_500ms_0 return delay_10ms movlw 0x86 movwf d1 movlw 0x14 movwf d2 delay_10ms_0 decfsz d1, f goto $+2 decfsz d2, f goto delay_10ms_0 goto $+1 nop return delay_1ms ;2493 cycles movlw 0xF2 movwf d1 movlw 0x02 movwf d2 delay_1ms_0 decfsz d1, f goto $+2 decfsz d2, f goto delay_1ms_0 ;3 cycles goto $+1 nop ;4 cycles (including call) return global delay_500ms global delay_10ms global delay_1ms end