delay.inc
changeset 89 1b3cea759eff
parent 88 c923295ee520
child 90 13c2deb919d1
equal deleted inserted replaced
88:c923295ee520 89:1b3cea759eff
     1 ;; vim: set ft=avr:
       
     2 ;;
       
     3 ;; Busy-loop delays
       
     4 ;;
       
     5 
       
     6 ;; Delay for approx. one second
       
     7 Delay_1s:
       
     8         ; ~16M cycles
       
     9         ldi         r20, 82
       
    10         rjmp        delay_init
       
    11 
       
    12 ;; Delay for a variable amount of time, adjusted by r20
       
    13 ; Input: r20 controls number of delay loops
       
    14 VarDelay:
       
    15         tst         r20
       
    16         breq        delay_out
       
    17 
       
    18 delay_init:
       
    19         ldi         r21, 255
       
    20 
       
    21 delay_loop:
       
    22         ; 254 * (1 + 2) + 1 * (1 + 1) = 764 cycles / loop
       
    23         dec         r22             
       
    24         brne        delay_loop
       
    25 
       
    26         ; 254 * 764 + 764 = 194820 cycles / loop
       
    27         dec         r21             ;  1 * r20 * r21
       
    28         brne        delay_loop      ;  2 * r20 * r21
       
    29         
       
    30         ; r20 * 194820 + r20 * 3 = 194823 cycles / loop (r20)
       
    31         dec         r20             ;  1 * r20 
       
    32         brne        delay_loop      ;  2 * r20
       
    33 
       
    34 delay_out:
       
    35         ret
       
    36 
       
    37