terom@46: ;; vim: set ft=avr: terom@17: ;; terom@17: ;; Busy-loop delays terom@17: ;; terom@17: terom@17: ;; Delay for approx. one second terom@17: Delay_1s: terom@17: ; ~16M cycles terom@17: ldi r20, 82 terom@17: rjmp delay_init terom@17: terom@17: ;; Delay for a variable amount of time, adjusted by r20 terom@17: ; Input: r20 controls number of delay loops terom@17: VarDelay: terom@17: tst r20 terom@17: breq delay_out terom@17: terom@17: delay_init: terom@17: ldi r21, 255 terom@17: terom@17: delay_loop: terom@17: ; 254 * (1 + 2) + 1 * (1 + 1) = 764 cycles / loop terom@17: dec r22 terom@17: brne delay_loop terom@17: terom@17: ; 254 * 764 + 764 = 194820 cycles / loop terom@17: dec r21 ; 1 * r20 * r21 terom@17: brne delay_loop ; 2 * r20 * r21 terom@17: terom@17: ; r20 * 194820 + r20 * 3 = 194823 cycles / loop (r20) terom@17: dec r20 ; 1 * r20 terom@17: brne delay_loop ; 2 * r20 terom@17: terom@17: delay_out: terom@17: ret terom@17: terom@17: