@hrei und @Rage_Empire
Ihr redet aneinander vorbei:
Der Waitbefehl wird nur für Write benötigt, ist also im Unterprogramm 'Routine zum lesen von Daten aus dem EEPROM' unnötig.
Dim Address_low As Byte 'Address ist hier überlappend
Dim Address_high As Byte 'dimensioniert, um High- und Low-
Dim Address As Word At Address_low Overlay 'Byte einfach ansprechen zu können.
Da hoffst Du drauf, dass der Compiler auch zukünftig die Variablen im RAM nicht optimiert 
Ich gehe immer diesen sicheren Weg (erzeugt die gleiche Codelänge):
Code:
Dim Address As Word
Dim Adress_Raw(2) As Byte at Address Overlay
Address_low Alias Adress_Raw(1)
Address_high Alias Adress_Raw(2)
damit kann man auch wunderbar Long etc. in ein EEPROM schreiben/lesen:
Dim Address As Long
Dim Adress_Raw(4) As Byte at Address Overlay
jetzt beim schreiben der Adresse auf die Blockgröße bei PageWrite achten. Hier die Variante zum lesen von LONG.
Code:
Devread = Dev + 1
I2cstart
I2cwbyte Dev
I2cwbyte Address_high
I2cwbyte Address_low
I2cstop
I2cstart
I2cwbyte Devread
I2crbyte Adress_Raw(1) , Ack
I2crbyte Adress_Raw(2) , Ack
I2crbyte Adress_Raw(3) , Ack
I2crbyte Adress_Raw(4) , Nack
I2cstop
Das ganze lässt sich dann mit For/Next noch schön machen, wobei Bascom-typisch der Code dann anwachsen könnte
Lesezeichen