Mit den Beispiel:Soweit ich das mitbekommen habe, werden die Daten im HEX-Format ins EEPROM geschrieben und kann sich auch mit Bascom auslesen.
Schreibst du genau ein Byte in den EEPROM an der adresse &H00. Der EEPROM fängt ab dieser Adresse an die Werte zu speichern.Code:Dim A as Byte Dim B as Eram Byte B=A End
Ergibt:Code:Dim A_byte As Byte Dim B_word As Word Dim C_long As Long Dim Printvar As Long Dim Printb As Word Dim Printa As Byte Dim A_eeprom_byte As Eram Byte Dim B_eeprom_word As Eram Word Dim C_eeprom_long As Eram Long Dim D_eeprom_long As Eram Long At &H07 Dim E_eeprom_word As Eram Word At &H09 Overlay Dim F_eeprom_byte As Eram Byte At &H0A Overlay '1.1-Normale wertzuweisungen: A_byte = &H01 B_word = &H0001 C_long = &H00000001 A_eeprom_byte = A_Byte Printa = A_eeprom_byte Print Hex(printa) Incr A_byte Writeeeprom A_byte, &H00 Printa = A_eeprom_byte Print Hex(printa) B_eeprom_word = B_Word Printb = B_eeprom_word Print Hex(printb) Incr B_word Writeeeprom B_Word, &H01 Printb = B_eeprom_word Print Hex(printb) C_eeprom_long = C_long Printvar = C_long Print Hex(printvar) Incr C_long Writeeeprom C_long, &H03 Printvar = C_eeprom_long Print Hex(printvar) Print Print D_eeprom_long = 0 Printvar = D_eeprom_long Print Hex(printvar) Print '2.1-Gleiche Variable, selbe Werte (Variable,Variable) Writeeeprom C_long , D_eeprom_long Printvar = D_eeprom_long Print Hex(printvar) Writeeeprom B_word , E_eeprom_word Printvar = D_eeprom_long Print Hex(printvar) Writeeeprom A_byte , F_eeprom_byte Printvar = D_eeprom_long Print Hex(printvar) Print '2.2-Gleiche Variable, selbe Werte (Variable,Adr) Writeeeprom C_long , &H07 Printvar = D_eeprom_long Print Hex(printvar) Writeeeprom B_word , &H09 Printvar = D_eeprom_long Print Hex(printvar) Writeeeprom A_byte , &H0A Printvar = D_eeprom_long Print Hex(printvar) Print '2.3-Gleiche Variable, selbe Werte (Variable = Hexwert) D_eeprom_long = &H00000002 Printvar = D_eeprom_long Print Hex(printvar) E_eeprom_word = &H0002 Printvar = D_eeprom_long Print Hex(printvar) F_eeprom_byte = &H02 Printvar = D_eeprom_long Print Hex(printvar) Print Print A_byte = &HA3 B_word = &HA200 C_long = &HA1000000 '3.1-Gleiche Variable, andere Werte (Variable,Variable) Writeeeprom C_long , D_eeprom_long Printvar = D_eeprom_long Print Hex(printvar) Writeeeprom B_word , E_eeprom_word Printvar = D_eeprom_long Print Hex(printvar) Writeeeprom A_byte , F_eeprom_byte Printvar = D_eeprom_long Print Hex(printvar) Print A_byte = &HA6 B_word = &HA500 C_long = &HA4000000 '3.2-Gleiche Variable, andere Werte (Variable,Adr) Writeeeprom C_long , &H07 Printvar = D_eeprom_long Print Hex(printvar) Writeeeprom B_word , &H09 Printvar = D_eeprom_long Print Hex(printvar) Writeeeprom A_byte , &H0A Printvar = D_eeprom_long Print Hex(printvar) Print '3.3-Gleiche Variable, andere Werte (Variable = Hexwert) D_eeprom_long = &HA7000000 Printvar = D_eeprom_long Print Hex(printvar) E_eeprom_word = &HA800 Printvar = D_eeprom_long Print Hex(printvar) F_eeprom_byte = &HA9 Printvar = D_eeprom_long Print Hex(printvar) End
Wie du erkennen kannst, schreibt der Befehl Writeeeprom Var_a, &H03 im EEPROM ab der Adresse 3 (Bedenke dieses ist das 4. Byte im EEPROM da man bei &H00 anfängt) und belegt so viele BYTES wie die Var_a benötigt.Code:01 02 0001 0002 00000001 00000002 00000000 00000002 00020002 02020002 00000002 00020002 02020002 00000002 00020002 02020002 A1000000 A2000000 A3000000 A4000000 A5000000 A6000000 A7000000 A8000000 A9000000
Byte => 1 Byte
Word => 2 Bytes
Long => 4 Bytes
Also gilt auch:
ERAM BYTE => 1 Byte im EEPROM
ERAM WORD => 2 Bytes im EEPROM
ERAM LONG => 4 Bytes im EEPROM
Im Beispiel wird immer die Variable D_eeprom_long gedruckt. So erklärt sich wieso wenn man der Variable E_eeprom setzt wird so auch D_eeprom überschrieben da diese sich im gleiche EEPROM Speicherbereich befinden. Das gleiche gilt auch wenn man die Variable F_eeprom ändert, so ändert man sowohl D_eeprom als auch E_eeprom.
Und das aus diesen Grund:
Speicheradresse__.00.01.02.03.04.05.06.07.08.09.0A .0B
A_eeprom_bereich.XX.__.__.__.__.__.__.__.__.__.__. __
B_eeprom_bereich.__.XX.XX.__.__.__.__.__.__.__.__. __
C_eeprom_bereich.__.__.__.XX.XX.XX.XX.__.__.__.__. __
D_eeprom_bereich.__.__.__.__.__.__.__.XX.XX.XX.XX. __
E_eeprom_bereich.__.__.__.__.__.__.__.__.__.XX.XX. __
F_eeprom_bereich.__.__.__.__.__.__.__.__.__.__.XX. __
Die ersten 3 EEPROM Variablen überlagern sich nicht. Jeder ERAM Typ hat sein X Bytes wie er Lang ist.
Die letzten 3 EEPROM Variablen überlagern sich, sodas beim ändern einer dieser Variablen, sich auch die anderen 2 Variablen ändern können.
Möchte man z.B. ein Byte in ein Word ändern so würde man (MC Abhängig wenn FLAG WORD tauschen gesetzt ist gilt diese nicht) eher alle Variabeln auf den ersten gemeinsamen Byte legen:
G_eeprom_bereich.__.XX.XX.XX.XX.__
H_eeprom_bereich.__.XX.XX.__.__.__
I_eeprom_bereich.__.XX.__.__.__.__
Nun wenn man I_eeprom auf 1 Setzt, so ist auch H_eeprom auf 1 und G_eeprom eben so. Anderes rum geht dieses nur bedingt, das man im Wertebereich der niedrigere Variable bleibt.
Wenn man also G_eeprom auf 256 setzt, so ist auch H_eeprom auch 256. I_eeprom hingegen ist aber 0, da ein Byte nur von 0 - 255 geht und so aus dem Werte bereich geht.
Ich hoffe du hast jetzt ein besseren einblick in der adressierung vom EEPROM bekommen.







Zitieren

Lesezeichen