Thomas, Du tust mir wirlich leid, ich weiß nicht, wie ich dir das sonst erklären kann

Schade, daß Du soweit wohnst sonst würde ich Dich einladen und wir könnten das in ruhe durchgehen

Schau mal hier
In zeitwert steht dann 227, obwohl da eigentlich 61936 (65536-3600) stehen müsste.
Es kann in einem Register nicht 61936 stehen!, das habe ich Dir doch gestern gesagt, ALLE
Register beinhalten 8 Bits

16 Bit stehen ja in zwei Registern!

wenn Du Deine 61936 auslesen willst mußt Du dein ZPointer auf die erste adresse einstellen also z.B.
daten:
.dw 61936

ldi ZH,HIGH(daten *2)
ldi ZL,LOW(daten *2)
jetzt kommt ein lpm

und was steht im Tutorial ?

.DW 12345,6789 ; zwei Worte
......
Beim Lesen per LPM erscheint übrigens das niedrigere Byte der 16-Bit-Zahl zuerst!
und was steht im R0 ?
das niedrigere Byte der 16-Bit-Zahl

also das low Byte von daten (hier von 61936 weil der ZPointer auf sie zeigt)
wenn Du sie jetzt verschiebst nach z.B. zahlLOW(von mir unbenanter Register)
hast Du die hälfte schon drin.
jetzt adiw ZL,1
hiermit gehen wir im .dw ein Byte weiter... jetzt zeigt der Zpointer auf die andere hälfte der Zahl
und was steht dann im R0 nach einem lpm ? das HighByte von daten also von 61936

das kannst Du auch von mir aus nach zahlHIGH schieben und dann hast Du Deine 16Bit Zahl aus dem Speicher ausgelesen.... sollte im .dw noch ein Komma stehen und eine zweite Zahl wirst Du wohl nach einem erneutem adiw ZL,1 wohl bei dieser Zahl landen und der Vorgang widerholt sich , genau so bei einer dritten fünften... 1000 Zahl .

Du mußt Dir in klarem sein, daß es keine 16 Bit Register gibt!! auch der ZPointer ist kein 16 Bit Register, es ist ein Registergespann ZL und ZH also 2 Register.

Edit:
WICHTIG !

Auszug aus dem Dattenblatt Seite 77:


To do a 16-bit write, the High Byte must be written before the Low Byte.
For a 16-bit read, the Low Byte must be read before the High Byte
Muß man unbedingt beachten, sonst kommt dabei nur mißt raus!

Ich hoffe, daß es jetzt verstanden wurde
Spiel das im sim durch, gucke, wo der Zeiger hinzeigt, was er ausliest, und soweiter,
es wird schwer sein die 16 Bits zu zerschlagen, mach das genauso wie ich dir das gestern gesagt habe, wandle eine 16Bit zahl (die Du im .dw stehen hast)in binär um mache schnitt damit Du 2x 8 Bit hast rechne aus was das für dezimale werte sind,
und beobachte, was er Dir mit lpm in den R0 lädt, aber bedenke Low zuerst!

Gute Nacht[/quote]