Wenn du immer 255 einliest deutet das darauf hin das die Übertragung schon nicht funktioniert. Hast du den I2C-Code schon mit anderen Bausteinen getestet? Wenn es mit anderen funktioniert kann es sein das du eine falsche Adresse sendest?
Wenn ich den Code richtig versteh (ich verwende keine C-Control), dann wertest du das ACK vom Slave nicht aus. Ich würde das noch ändern. Empfängst du kein ACK nach der Adressierung war sie auch nicht erfolgreich.