Hallo,

start ist nicht gleich restart.
Ich würde vorschlagen, dass du nach
i2c_write(address); //Data to device
erst ein stop sendest und dann wieder ein start.
Also so:
i2c_start();
i2c_write(0xa0); //Device address
i2c_write(address); //Data to device
i2c_stop();
i2c_start(); // Restart
i2c_write(0xa1); // to change data direction
data=i2c_read(0); // now read from slave
i2c_stop();