Hallo

ich brauche die adresse nicht aufteilen. wenn ich "i2cwbyte wordadresse" eingebe, funktioniert es.
Anscheinend hast du meinen rat doch nicht befolgt.

Code:
'Einstellen des I"C Buses +++++++++++++++++++++++++++++++++++++++++++++++++++++
Config Scl = Portd.6                    'PIN für I2C Bus
Config Sda = Portd.7


'Definition der Funktionen ++++++++++++++++++++++++++++++++++++++++++++++++++++
Declare Sub Read_byte(byval Ee_adresse As Byte)
Declare Sub Write_byte(byval Ee_adresse As Word , Byval Ee_daten As Byte)
Declare Sub Erase_eeprom(byval Ee_adresse As Word )



'Routine zum schreiben von Daten in das EEPROM ++++++++++++++++++++++++++++++++
Sub Write_byte(byval Ee_adresse As Word , Byval Ee_daten As Byte)
Disable Interrupts
Print Ee_adresse
     Temp = High(ee_adresse)            'MSB von ee_adresse speichern
     I2cstart                           'generate start
    I2cwbyte &B10100000                 'write addres of24C65
    I2cwbyte Temp                       'write high adress
    I2cwbyte Ee_adresse                 'write low adress
    I2cwbyte Ee_daten                   'write daten
    I2cstop                             'Stop senden zum schreiben
Enable Interrupts
End Sub

'Routine zum lesen von Daten aus dem EEPROM ++++++++++++++++++++++++++++++++++++
Function Read_byte(byval Ee_adresse As Byte)
Disable Interrupts
    Temp = High(ee_adresse)             'MSB von ee_adresse speichern
    I2cstart                            'generate start
    I2cwbyte &B10100000                 'write addres of 24C65
    I2cwbyte Temp                       'write high adress
    I2cwbyte Ee_adresse                 'write low adress
    I2cstart                            'generate repeated start
    I2cwbyte &B10100001                 'write read commando

    For C = 0 To 1000
      I2crbyte Daten , Ack              'LSB von Spannung einlesen
      I2crbyte Temp , Ack               'MSB von Spannung einlesen
      Spannung = Temp * 256             'MSB an die richtige Stelle von Spannung setzen
      Spannung = Spannung + Daten       'LSB von Spannung dazu und fertig
      Print C ; "," ; Spannung          'Ausgeben  Speicherstelle, Spannung
    Next C
    I2cstop
 Enable Interrupts
End Function

'Routine zum löschen von Daten in dem EEPROM Dauer ca 5,5 Sek ++++++++++++++++++
Sub Erase_eeprom(byval Ee_adresse As Word )
Disable Interrupts
 For B = 0 To 8192 Step 64              '128 Page a 64 Byte löschen
     Temp = High(b)                     'MSB von B speichern
    I2cstart                            'generate start
    I2cwbyte &B10100000                 'write addres of24C65
    I2cwbyte Temp                       'write high adress
    I2cwbyte B                          'write low adress

     For C = 1 To 64                    'Page weise beschreiben mit 255
        I2cwbyte 255
    Next C

    I2cstop                             'Stop senden zum schreiben
    Waitms 40                           '8 * 5 ms warten zum schreiben der Pages
    Next B
Enable Interrupts
End Sub
I2cwbyte Ee_adresse 'write low adress

EE-adresse ist zwar als WORD definiert, beim schreiben werden aber nur die unteren 8 Bits gesendet, da der Befehl I2Cwbyte heißt. Daher der Umweg mit Temp = High(ee_adresse) .

In der Funktion Read_byte werden jetzt 1000 * 2 bytes ausgelsen, zusammen gesetzt in eine Word Variable und dann ausgegeben.

Erase_eeprom schreibt das ganze EEPROM mit 255 voll und zwar wird immer erst eine ganze Page geschrieben. Das geht dann schneller.

Hoffe der Code hilt dir etwas.

MFG
Dieter