delay.inc
author Tero Marttila <terom@fixme.fi>
Sat, 08 May 2010 20:09:08 +0300
changeset 23 a6afc0eb347f
parent 17 a7c668003a19
child 46 ffb0c3ec9bc0
permissions -rw-r--r--
synchronous SPI, two-digit led7
;;
;; Busy-loop delays
;;

;; Delay for approx. one second
Delay_1s:
        ; ~16M cycles
        ldi         r20, 82
        rjmp        delay_init

;; Delay for a variable amount of time, adjusted by r20
; Input: r20 controls number of delay loops
VarDelay:
        tst         r20
        breq        delay_out

delay_init:
        ldi         r21, 255

delay_loop:
        ; 254 * (1 + 2) + 1 * (1 + 1) = 764 cycles / loop
        dec         r22             
        brne        delay_loop

        ; 254 * 764 + 764 = 194820 cycles / loop
        dec         r21             ;  1 * r20 * r21
        brne        delay_loop      ;  2 * r20 * r21
        
        ; r20 * 194820 + r20 * 3 = 194823 cycles / loop (r20)
        dec         r20             ;  1 * r20 
        brne        delay_loop      ;  2 * r20

delay_out:
        ret