AVR C Inline Assembler Blink Programm

OP #3642722
Lesenswert?
• ▲
▼
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?
Gast #3642735
Lesenswert?
• ▲
▼
Wenn man ein Unterprogramm aufruft, muss man auch zurückkehren:
der Programmteil, der mit rcall, call oder icall aufgerufen wird, muss 
(normalerweise) mit ret (return) abgeschlossen werden.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.