@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