delay.inc
author Tero Marttila <terom@paivola.fi>
Sun, 20 Apr 2014 23:51:57 +0300
changeset 80 5254ba612630
parent 46 ffb0c3ec9bc0
permissions -rw-r--r--
dmx-web: slightly better RGB colorpicker control..
;; vim: set ft=avr:
;;
;; 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