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
Es kann in einem Register nicht 61936 stehen!, das habe ich Dir doch gestern gesagt, ALLEIn zeitwert steht dann 227, obwohl da eigentlich 61936 (65536-3600) stehen müsste.
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 ?
und was steht im R0 ?.DW 12345,6789 ; zwei Worte
......
Beim Lesen per LPM erscheint übrigens das niedrigere Byte der 16-Bit-Zahl zuerst!
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:
Muß man unbedingt beachten, sonst kommt dabei nur mißt raus!
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
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]
Lesezeichen