Hallo Andreas,

so läufts bei mir....
der AT24c512 hat ein festes Byte für Hardware Adresse
(nur das R/W-Bit ist variabel),
dann folgen 2Byte mit der eigentlichen Speicheradresse

die Speicheradresse musst du als word-Variable hochzählen (hier +16)
abhänig wieviele Bytes hintereinander geschrieben bzw. gelesen werden


Code:
'## Datenspeicher AT24c512 A1 und A0 auf +5V !! Hardware Adresse
Const Chip_w = &B10100110                                   'schreiben
Const Chip_r = &B10100111                                   'lesen
Dim Ebuffer(16) As Byte
Dim I As Word                                               'Pointer counter
Dim X As Word
Dim Adr As Word
Dim Eepromadr As Word

'.........
Declare Sub Schreibe_block(byval St_adr As Word)
Declare Sub Lese_block(byval St_adr As Word)


'........



'**********************************************************************
'**                        Define Subroutines                        **
'**********************************************************************
'Schreib 16 Byte aus dem ebuffer in EEPROM
Sub Schreibe_block(st_adr As Word )                         '

Local Adr_low As Byte
Local Adr_high As Byte
   Adr_low = Low(st_adr)                                    ' Extract low byte of address to be written.
   Adr_high = High(st_adr)                                  ' Extract high byte of addesss to be written.
   I2cstart                                                 ' Send I2C Start.
   I2cwbyte Chip_w                                          ' EEPROM device type, address and write bit.
   I2cwbyte Adr_high                                        ' Send high address to write to.
   I2cwbyte Adr_low                                         ' Send low address to write to.
   I2cwbyte Ebuffer(1)                                      ': Print Ebuffer(1) --> nur zum debuggen
   I2cwbyte Ebuffer(2)                                      ': Print Ebuffer(2)
   I2cwbyte Ebuffer(3)                                      ': Print Ebuffer(3)
   I2cwbyte Ebuffer(4)                                      ': Print Ebuffer(4)
   I2cwbyte Ebuffer(5)                                      ': Print Ebuffer(5)
   I2cwbyte Ebuffer(6)                                      ': Print Ebuffer(6)
   I2cwbyte Ebuffer(7)                                      ': Print Ebuffer(7)
   I2cwbyte Ebuffer(8)                                      ': Print Ebuffer(8)
   I2cwbyte Ebuffer(9)                                      ': Print Ebuffer(9)
   I2cwbyte Ebuffer(10)                                     ': Print Ebuffer(10)
   I2cwbyte Ebuffer(11)                                     ': Print Ebuffer(11)
   I2cwbyte Ebuffer(12)                                     ': Print Ebuffer(12)
   I2cwbyte Ebuffer(13)                                     ': Print Ebuffer(13)
   I2cwbyte Ebuffer(14)                                     ': Print Ebuffer(14)
   I2cwbyte Ebuffer(15)                                     ': Print Ebuffer(15)
   I2cwbyte Ebuffer(16)                                     ': Print Ebuffer(16)
   I2cstop
   'Waitms 10
End Sub

'lese 16 Byte in den ebuffer
Sub Lese_block(st_adr As Word)

Local Adr_low As Byte
Local Adr_high As Byte
   Adr_low = Low(st_adr)                                    ' Extract low byte of address to be written.
   Adr_high = High(st_adr)                                  ' Extract high byte of addesss to be written.
   I2cstart                                                 ' Send I2C Start.
   I2cwbyte Chip_w                                          ' EEPROM device type, address and write bit.
   I2cwbyte Adr_high                                        ' Send high address to write to.
   I2cwbyte Adr_low
   I2cstart                                                 ' Issue another start sequence.
   I2cwbyte Chip_r                                          ' Select MicroChip EEPROM device type, address and read bit
   I2crbyte Ebuffer(1) , Ack                                ' Read data from desired location in chip.
   I2crbyte Ebuffer(2) , Ack
   I2crbyte Ebuffer(3) , Ack
   I2crbyte Ebuffer(4) , Ack
   I2crbyte Ebuffer(5) , Ack
   I2crbyte Ebuffer(6) , Ack
   I2crbyte Ebuffer(7) , Ack
   I2crbyte Ebuffer(8) , Ack
   I2crbyte Ebuffer(9) , Ack
   I2crbyte Ebuffer(10) , Ack
   I2crbyte Ebuffer(11) , Ack
   I2crbyte Ebuffer(12) , Ack
   I2crbyte Ebuffer(13) , Ack
   I2crbyte Ebuffer(14) , Ack
   I2crbyte Ebuffer(15) , Ack
   I2crbyte Ebuffer(16) , Nack
   I2cstop
End Sub

Grüße
Kurzschluss