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
1 | LPM Z+, R24 // Erstes Byte in R24 |
2 | 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.
Hi Wenn schon, dann 'lpm r25,Z+'.... Und nicht vergessen: 'ldi ZL,Low(pausen<<1)' 'ldi ZH,High(pausen<<1)' MfG Spess
>>Und nicht vergessen: 'ldi ZL,Low(pausen<<1)' >> 'ldi ZH,High(pausen<<1)' Moin, was machen diese beiden Befehle genau? Holger
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
Das gleiche wie
1 | LDI ZL,LOW(pausen*2) |
2 | LDI ZH,HIGH(pausen*2) |
> 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. ;-) ...
Hallo, danke. Wieder was gelernt ;-) mfg Holger
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.