Hi Maria,
Here is some code I used recently to read a status byte from an I2C slave. It looks quite similar to your code but I have to admit I am no expert on I2C ;-)
IICC_TXAK = 0;
IICC |= 0x30; // Generate START
IICD = 0xEE; // write to slave device
while (!IICS_IICIF); // wait until flag is set
IICS_IICIF=1; // Clear the int flag
while(IICS_RXAK); // Check for RXAK
IICD = 0xD0; // write command
while (!IICS_IICIF); // wait until flag is set
IICS_IICIF=1; // Clear the int flag
while(IICS_RXAK); // Check for RXAK
IICC_RSTA = 1; // setup repeated start
IICD = 0xEE|1; // (slave_address)|(RW = 1), read from slave
while (!IICS_IICIF); // wait until flag is set
IICS_IICIF=1; // Clear the int flag
while(IICS_RXAK); // Check for RXAK
IICC_TX = 0; // Setup to receive
IICC_TXAK = 1; // Acknowledge disable
RD_data = IICD; // Dummy read
while (!IICS_IICIF); // Wait until IBIF flag is set
IICS_IICIF=1; // Clear the flag
IICC_MST = 0; // Generate STOP
RD_data = IICD; // Read data
The MST bit is set on the "// Generate start" line but I can't fully see how it is configured in your code taken on board the comments you made in your email.
What I meant by the comment is that I don't think you need the I2C start and stop function calls under the /* Reset 24c02 */ comment, unless of course a 24c02 does require these calls :-) Usually slaves by default are listening for I2C bus activity etc.
Thanks,
Ian