Forum: Mikrocontroller und Digitale Elektronik Aus dem Flasch Werte Laden...


von Freak5 (Gast)


Lesenswert?

"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?

von ...HanneS... (Gast)


Lesenswert?

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).

...

von dave (Gast)


Lesenswert?

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

von Freak5 (Gast)


Lesenswert?

Also kann der Z-Pointer nicht nur Words, sondern auch Bytes adressieren?
Tanke! Das mit der Registerangabe versuche ich mal. Ich habe einen
mega16.

von ...HanneS... (Gast)


Lesenswert?

Tippe doch mal in AVR-Studio "lpm" ein und drück mal die F1-Taste,
während der Cursor in "lpm" steht.

...

von Freak5 (Gast)


Lesenswert?

Ich wusste gar nicht, dass es Assembler mit so einem Luxus geht. Danke.

Das Problem ist mehr als gelöst.

von ...HanneS... (Gast)


Lesenswert?

Na irgendwas Sinnvolles muss doch in einem über 31MB großen Archiv drin
sein...

;-)

...

von Martin S. (Gast)


Lesenswert?

"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....

von ...HanneS... (Gast)


Lesenswert?

Kommt aber gut...

Aber als Leser dieses Forums ist man inzwischen sehr tolerant, was
Schreibfehler betrifft.

...

von Freak5 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.