Hab hier was für dich....kann Bytes, Words und Singles in einem EEPRom schreiben und lesen. Du kannst die Datei einfach per Include laden und dann bequem die Subs und Funcs verwenden. Verwendet wird hier der Hardware-TWI, kann auch für Soft-TWI geändert werden. Ist zwar für ein 24c64 EEPROM, geht jedoch auch mit größeren...mußt evtl. die Adresse des EEProms ändern.

Code:
$lib "i2c_TWI.lib"
Config Scl = Portc.0                                        'PINs für I2C Bus
Config Sda = Portc.1
I2cinit

Config Twi = 400000

Dim Eehead(2) As Byte
Dim Eebyte(4) As Byte
Dim Eesingle As Single At Eebyte Overlay
Dim Eeword(2) As Word At Eesingle Overlay
Dim Eebanz As Byte
Dim Ee_adresse01 As Word At Eehead Overlay
Dim Eead As Word

Const 24c64w = &B10100000
Const 24c64r = &B10100001


'Definition der Funktionen ++++++++++++++++++++++++++++++++++++++++++++++++++++
Declare Function Loadbyte(byval Ee_adresse As Word) As Byte
Declare Function Loadword(byval Ee_adresse As Word) As Word
Declare Function Loadsingle(byval Ee_adresse As Word) As Single
Declare Sub Savebyte(byval Ee_daten As Byte , Byval Ee_adresse As Word)
Declare Sub Saveword(byval Ee_daten As Word , Byval Ee_adresse As Word)
Declare Sub Savesingle(byval Ee_daten As Single , Byval Ee_adresse As Word )

Goto 001

Sub Savebyte(byval Ee_daten As Byte , Byval Ee_adresse As Word)
Eebyte(1) = Ee_daten
Ee_adresse01 = Ee_adresse
Eebanz = 1 : Gosub Write_ee
End Sub

Sub Saveword(byval Ee_daten As Word , Byval Ee_adresse As Word)
Eeword(1) = Ee_daten
Ee_adresse01 = Ee_adresse
Eebanz = 2 : Gosub Write_ee
End Sub

Sub Savesingle(byval Ee_daten As Single , Byval Ee_adresse As Word )
Eesingle = Ee_daten
Ee_adresse01 = Ee_adresse
Eebanz = 4 : Gosub Write_ee
End Sub


Function Loadbyte(byval Ee_adresse As Word) As Byte
Ee_adresse01 = Ee_adresse
Eebanz = 1 : Gosub Read_ee
Loadbyte = Eebyte(1)
End Function

Function Loadword(byval Ee_adresse As Word) As Word
Ee_adresse01 = Ee_adresse
Eebanz = 2 : Gosub Read_ee
Loadword = Eeword(1)
End Function

Function Loadsingle(byval Ee_adresse As Word) As Single
Ee_adresse01 = Ee_adresse
Eebanz = 4 : Gosub Read_ee
Loadsingle = Eesingle
End Function






'Routine zum schreiben von Daten in das EEPROM ++++++++++++++++++++++++++++++++
Write_ee:
    'Disable Interrupts
    Eead = Eead + Eebanz
    Eebanz = Eebanz + 2
    I2csend 24c64w , Eehead(1) , Eebanz
    'Waitms 10
    'Enable Interrupts
'If Err = 1 Then Call Error(55)

Return


'Routine zum lesen von Daten aus dem EEPROM ++++++++++++++++++++++++++++++++++++
Read_ee:
    'Disable Interrupts
    Eead = Eead + Eebanz
    I2csend 24c64w , Eehead(1) , 2
    'Waitms 10
    I2creceive 24c64r , Eebyte(1) , 0 , Eebanz
    'Waitms 1
    'Enable Interrupts
'If Err = 1 Then Call Error(55)

Return

001:

Dim Ins As Single
Dim Inw As Word
Dim Inb As Byte
Dim I As Word

Do
Input "Single: " , Ins
For I = 20 To 100 Step 4
Call Savesingle(ins , I)
Next I
Print "gespeicherter Wert: " ; Ins
Ins = Loadsingle(20)
Print "geladener Wert: " ; Ins

Input "Word: " , Inw
Call Saveword(inw , 10)
Print "gespeicherter Wert: " ; Inw
Inw = Loadword(10)
Print "geladener Wert: " ; Inw

Input "Byte: " , Inb
Call Savebyte(inb , 30)
Print "gespeicherter Wert: " ; Inb
Inb = Loadbyte(30)
Print "geladener Wert: " ; Inb
Loop
For I = 10 To 410 Step 4
Call Savesingle(0 , I)
Next I