Aus dem Flasch Werte Laden...

Gast #161770
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?
Gast #161771
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).

...
Gast #161772
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
Gast #161777
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....
Gast #161779
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren