mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Macro funktioniert nicht, was mach ich falsch?


Autor: flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo


Ich möchte ein Macro aufrufen, dem ich sagen kann, wie oft es wiederholt 
werden muß. Bei mir sieht es so aus:
.macro schieben

ldi temp1, @0
mov rl_reg, temp1
ldi temp1, @1
push temp1
rcall same
rcall schub
pop temp1
dec temp1
brne pc-5

.endmacro

;und hier der Befehl:

schieben 0b00111000,5

Mit 0b00111000 sage ich, in welche Richtung geschoben wird, hat aber 
nichts mit meinem Problem zu tun.
Also ich lade den Wert 5 in temp1, pushe ihn, da ich temp1 in rcall same 
und rcall schub für andere Berechnungen brauche, danach pope ich temp1 
wieder und dekerementiere temp1. Wenn nicht null, dann springe 5 
Schritte zurück. Bei mir wiederholt sich dann aber die Routine nicht 
5mal sondern 50mal oder so.

Was hab ich da falsch gemacht. Wer kann mir da bitte weiterhelfen?

Autor: Oops (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
pushst Du denn den Wert in same und schub wieder nachdem Du ihn dort 
geholt hast?

Guck DIr mal den Stack nach Rückkehr aus den beiden subroutinen an.

Gruss
Oops

Autor: flo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Oops.

Bei same und schub benötige ich zwar temp1, muß aber nich pushen und 
popen.

Ehrlich gesagt habe ich es auch schon mit dem Register r23 probiert, das 
ich aber im ganzen Programm nicht brauche. Dadurch brauch ich r23 aauch 
nicht pushen und popen. Funktioniert leider auch nicht.

Autor: Oops (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Bei same und schub benötige ich zwar temp1, muß aber nich pushen und
popen.

Warum nicht?

Wie sah der Stack aus?

Gruss
Oops

Autor: Joerg Wolfram (joergwolfram)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich nehme mal an, dass "brne pc-5" falsch ist und "brne pc-6" heissen 
muß.
Der neue PC wird aus der aktuellen Adresse (wurde beim Lesen des Befehls 
inkrementiert) und dem Offset berechnet. Zumindest ist das bei den 
meisten Prozessoren so.

Gruß Jörg

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.