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







Zitieren

Lesezeichen