equal
deleted
inserted
replaced
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 |
|