www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Assembler: Problem mit Registerpaar


Autor: Uwe Naumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

auf meinem AVR (AT90S2313) sind lt. Doku die oberen acht Register
jeweils als Registerpaar anzusprechen, also r24/r25 quasi als ein
Register.

Ich habe nun folgenden Code:

.def      pulsesL      = r24
.def      pulsesH      = r25

adiw   pulsesL, 1               ; Zaehlerwert inkrementieren

Wenn ich die Doku zu adiw richtig verstanden habe, dann wird beim
Overflow von r24 dieser nach r25 weitergegeben. Ich müsste also bis
65535 zählen können.

Bei mir wird aber nach 255 wieder auf Null gesprungen. Warum?

Gruß Uwe

Autor: Conlost (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Uwe,

versuche mal das:

.def      pulsesL      = r24
.def      pulsesH      = r25

adiw   pulsesH:pulsesL, 1          ; Zaehlerwert inkrementieren

Gruß,
Arno

Autor: Uwe Naumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmpf. Hätte man eigentlich selber drauf kommen können. Steht ja auch
genauso in der Befehlsreferenz.

Das wars aber nicht.

Das Problem scheint zu sein, das es trotz das es so in der Doku steht
einfach nicht mit r24/r25 funktioniert.

Ich habe es testweise mal mit XL/XH versucht (also r26/r27), und siehe
da:

adiw r26, 1

macht genau das was es soll. Beim Overflow von r26 wird entsprechend
r27 hochgezählt.

Also werde ich wohl für meine Zwecke r26/r27 missbrauchen, auch wenns
mir nicht so recht gefällt.

Gruß Uwe

Autor: Conlost (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mal beide Versionen mit r24/r25 im Studio simuliert
und es gingen beide.
Der Fehler liegt nicht bei den beiden Registern, sondern woanders.
Womit hast du das Program geschrieben und assembliert?

Gruß,
Arno

Autor: Uwe Naumann (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
AVR Studio 4.08 / AVR Assembler

Ich hab mal den Code rangehangen.

Gruß Uwe

Autor: Conlost (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du vergessen auf AT90S2313 umzustellen, im Listing steht
oben noch:
;* Target  : AT90S1200 @ 4Mhz

Der AT90S1200 kennt den Befehl "adiw" nicht, kann es sein das
da was falsch eingestellt ist im Studio oder Assembler?

Gruß,
Arno

Autor: Uwe Naumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nee, passt schon, war nur noch ein alter Kommentar.

Gruß Uwe

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnte es sein, daß der 2313 das nicht kann? Im Datenblatt des 2313 ist
nur die Rede von X,Y,Z. Das Addieren von R24/R25 steht nur im
allgemeinen Instruction Set. Wäre nicht der einzige Befehl, der beim
2313 nicht zur Verfügung steht.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

"Das Addieren von R24/R25 steht nur im allgemeinen Instruction Set."

Das geht beim 2313 auch. r25 wird dann bei Überlauf des r24
weitergezählt. Erfordert Befehl adiw.

GRuß

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann ich bestätigen, habe ich auch schon mal in einem Programm
eingesetzt.

Autor: Uwe Naumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich habe nicht ins Datenblatt geschaut, sondern in zwei meiner
Bücher. Und die behaupten auch beide, das es beim 2313 geht. Es werden
wohl kaum beide Autoren falsch abgeschrieben haben ;-)

Na ja, jetzt läufts via XL/XH, bei dem projekt brauche ich die nicht.

Gruß Uwe

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.