Hallo! Ich wollte mich mal mit inline-assembler beschäftigen und ein kleines blink-Programm schreiben. Code:
1 | #include <avr/io.h> |
2 | |
3 | int main(void){ |
4 | |
5 | asm volatile(//".equ F_CPU = 8000000 \n\t" |
6 | "ldi r16, 0xff \n\t" |
7 | "out %[reg], r16 \n\t" |
8 | "loop: \n\t" |
9 | " ldi r16, 0xff \n\t" |
10 | " out %[port], r16 \n\t" |
11 | " rcall delay \n\t" |
12 | " ldi r16, 0x00 \n\t" |
13 | " out %[port], r16 \n\t" |
14 | " rcall delay \n\t" |
15 | " rjmp loop \n\t" |
16 | "delay: \n\t" |
17 | " ldi r19, 0x64 \n\t" |
18 | " loop0: \n\t" |
19 | " ldi r18, 0xff \n\t" |
20 | " loop1: \n\t" |
21 | " ldi r17, 0xff \n\t" |
22 | " loop2: \n\t" |
23 | " nop \n\t" |
24 | " dec r17 \n\t" |
25 | " cpi r17, 0 \n\t" |
26 | " brne loop2 \n\t" |
27 | " dec r18 \n\t" |
28 | " cpi r18, 0 \n\t" |
29 | " brne loop1 \n\t" |
30 | " dec r19 \n\t" |
31 | " cpi r19, 0 \n\t" |
32 | " brne loop0 \n\t" |
33 | ::[reg] "I" (_SFR_IO_ADDR(DDRB)), |
34 | [port] "I" (_SFR_IO_ADDR(PORTB))); |
35 | }
|
Aber wieso Blinkt die LED nicht sondern leuchtet nur?