www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu AVR/Assembler 16-Bit Zahlen aus Flash lesen


Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine Frage zum AVR(ATMEGA32)/Assembler und dem Einlesen von 
Zahlenwerten.

Ich möchte im Flashspeicher 16-Bit Zahlenwerte ablegen, die jeweils eine 
zeitdauer in Milisekunden darstellen.

pausen:    .dw 1000,10000,2000,0


Wenn der Wert 0 eingelesen wird, soll das Programm ersteinmal in einer 
Endlosschleife bleiben.

Die Zahlenwerte sollen eingelesen werden und das Lowbyte soll in R24 und 
das Highbyte in r25 gespeichert werden.


Mit

LDI ZL,LOW(pausen*2)
LDI ZH,HIGH(pausen*2)

setze zeige ich mit Z auf pausen.

Wie kann ich aber nun die Zahlen einlesen und in R24/R25 speichern?

Ich verstehe die Anwendung des LPM register,Z+ bzw LMP register bei 
16-Bit-Zahlen nicht.



Holger

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
LPM Z+, R24 // Erstes Byte in R24
LPM Z+, R25 // Zweite Byte in R25
Z+ gibt dem AVR den Befehl die Adresse danach automatisch um 1 zu 
erhöhen, dann liest du das nächste Byte und hast die ersten 16bit.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Wenn schon, dann 'lpm r25,Z+'....
Und nicht vergessen:  'ldi ZL,Low(pausen<<1)'
                      'ldi ZH,High(pausen<<1)'

MfG Spess

Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>Und nicht vergessen:  'ldi ZL,Low(pausen<<1)'
>>                      'ldi ZH,High(pausen<<1)'

Moin,

was machen diese beiden Befehle genau?


Holger

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Du solltest dich erst mal etwas mit den Assemblerbefehlen beschäftigen. 
Ansonsten im AVR-Studio den Cursor auf den Befehl setzen und F1 drücken. 
Die Assmblerdirektiven und Expressions sollte man natürlich man 
natürlich auch kennen.

>was machen diese beiden Befehle genau?

Der lädt das Z-Register mit der Adresse des (ersten) 16-Bit-Wertes.

MfG Spess

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das gleiche wie
LDI ZL,LOW(pausen*2)
LDI ZH,HIGH(pausen*2)

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> was machen diese beiden Befehle genau?

Dasselbe wie:

LDI ZL,LOW(pausen*2)
LDI ZH,HIGH(pausen*2)

Ob nun mit zwei multiplizieren oder um eine Bitposition nach links 
verschieben, das ist in diesem Fall gehupft wie gesprungen, denn das 
rechnet nicht der AVR, sondern der Präprozessor des Assemblers. ;-)

...

Autor: Holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke. Wieder was gelernt ;-)


mfg
Holger

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.