Probleme mit rcall

Gast #97155
Lesenswert?

Ich vert´zweifle langsam hier. Glücklicherweise habe ich noch nichts
kaputtgemacht, aber irgendwie scheint rcall nicht ganz zu
funktionieren.

Habe also ein kleines Testprogramm geschrieben, welches eigentlich
irgendwie blinken sollte (soll ja nur ein Test sein). Aber leider kommt
beim AVR einfach garnichts raus.

Hab den Code dann auch mal durch den Debug gejagt und es scheint also
würde "er" wenn er fertig ist mit der delay schleife durch das ret
einfach wieder zum init label springen statt zur rcall adresse.

Leider sehe ich kein Fehler, vielleicht ihr!

.include "4433def.inc"
.def  temp=r17

init:
    ldi r18, 15
    ldi temp, 0xEE
    out DDRD,temp
main:
          inc temp
    out PORTD, temp
    rcall delay
    rjmp main

delay:
    dec r18
     brne delay
     ret
Angehängte Dateien:
Gast #97161
Lesenswert?

Nein...

In Assembler bestimmst du selbst, welche Register zu welchem Zweck
benutzt werden. Bei Hochsprachen überlässt man das dem Compiler.

Die Register der Timer liegen im I/O-Bereich, der separat von den
"Vielzweckregistern" R0...R31 vorhanden ist.

Du hast also:
- R0...R15: Untere Vielzweckregister mit eingeschränkter Funktion
(keine unmittelbaren Konstanten)

- R16...R31: Obere Vielzweckregister (ohne Einschränkungen), wobei die
oberen drei Registerpaare als Pointer zur indirekten Adressierung
dienen können (x, y, z),

- 32 Byte unterer I/O-Bereich, auf den mit IN/OUT und SBI/CBI
zugegriffen werden kann,

- 32 Byte oberer I/O-Bereich, mit IN/OUT, aber kein SBI/CBI

- SRAM, Größe je nach AVR-Typ (siehe Datenblatt), mit Zugriff über
diverse Load/Store-Befehle (siehe Instruction-set)

Bit- & Bytebruch...
...HanneS...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren