Soweit ich das mitbekommen habe, werden die Daten im HEX-Format ins EEPROM geschrieben und kann sich auch mit
Bascom auslesen.
Mit den Beispiel:
Code:
Dim A as Byte
Dim B as Eram Byte
B=A
End
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_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
Ergibt:
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
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.
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.
Lesezeichen