"Für das Lesen aus dem Programmspeicher gibt es nur den Zeiger Z und den Befehl LPM. Er lädt das Byte an der Adresse Z in das Register R0. Da im Programmspeicher jeweils Worte, also zwei Bytes stehen, wird die Adresse mit zwei multipliziert und das unterste Bit gibt jeweils an, ob das untere oder obere Byte des Wortes im Programmspeicher geladen werden soll. Also etwa so: LDI ZH,HIGH(2*Adresse) LDI ZL,LOW(2*Adresse) LPM " Da das Register r0 nur 8Bit breit ist, wie kann ich das Word, was ich gespeichert habe z.B.: .db 0b00000000, 0b11111111 Einlesen? Kann ich jetzt zweimal LPM aufrufen und habe erst die 0 und danach die 1 im ersten Register?
Kommt auf den AVR an. Bei einigen neueren AVRs kannst du nämlich bei LPM auch das Zielregister angeben und das Inkrementieren des Pointers veranlassen. lpm r16,z+ lpm r17,z+ Sollte dein AVR das noch nicht können, dann musst du nach dem ersten LPM den Z-Pointer erhöhen (adiw zh:zl,1) und den Inhalt von r0 woandershin kopieren (mov r1,r0). ...
Nur weil du LPM aufrufst, wird das Z-Register (r31:r30) nicht erhöht. Du musst also sowas machen: LDI ZH,HIGH(2*Adresse) LDI ZL,LOW(2*Adresse) LPM r0, z+ ; LPM r16, z+ Mit dem Befehl "LPM Rd, z+" wird das Byte geladen und Z erhöht. Ich denke, den Befehl gibts nur bei den Mega (jedenfalls habe ich den im m32 Datenblatt und im Tutorial ist es auf die Methode: LPM ;(in r0) ADIW zl, 1 LPM ;(in r0) dave
Also kann der Z-Pointer nicht nur Words, sondern auch Bytes adressieren? Tanke! Das mit der Registerangabe versuche ich mal. Ich habe einen mega16.
Tippe doch mal in AVR-Studio "lpm" ein und drück mal die F1-Taste, während der Cursor in "lpm" steht. ...
Ich wusste gar nicht, dass es Assembler mit so einem Luxus geht. Danke. Das Problem ist mehr als gelöst.
Na irgendwas Sinnvolles muss doch in einem über 31MB großen Archiv drin sein... ;-) ...
"Aus dem Flasch Werte Laden" Und ich frag mich beim Anblick des Betreffs, was der wohl mit der Flasch(e) macht, und welcher Laden(geschäft) da wohl gemeint sei ... DAs wahr wohl die ganz falsche Assoziation....
Kommt aber gut... Aber als Leser dieses Forums ist man inzwischen sehr tolerant, was Schreibfehler betrifft. ...
Verdammt. Aber wenigstens lernt man dabei was. Wenn ich weiterhin so wenig schlafe, dann mache ich die Fehler in der Schule auch noch. Und ich mus noch Bibelstellen interpretieren und Latein übersetzen... Naja ich fange mal lieber an, bevor ich dazu nicht mehr fähig bin. Das Programm ist jetzt übrigens fertig. Ich kann alle Werte, die ich in ein Display schreiben will in das Flash schreiben. Daraus werden diese geladen, umgestellt und über ein Schiftregister ausgegeben. Ich hoffe nur, dass ich jetzt nicht die High und die Low Bits vertauscht habe... Naja ich muss Hausarbeiten machen Cu
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.