I would never use it in polled mode. What's the point?
If you do polled can never do a transaction on an interrupt thread (like a timer tick).
I have not seen an issue with it myself, however there is this issue, which not the fault of the I2C module.
If you reset the MCU in the middle of a send by the I2C device, it can appear hung up because it is waiting for the master to finish clocking it. The solution is to manually clock it until it lets goif the SDA line,.
Where is what I recommend you try - use Processor Expert to get the code working - interrupt driven.
Here is a hint for the unhang code, which is done befor initalizing the I2C unit:
void i2cdelay(int n);byte UnhangI2C(void);void i2cdelay(int n){ int i; for( i = 0 ; i < n ; ++i) asm { nop ; nop ; nop ;nop };}byte UnhangI2C(void){ int i = 0; // This will clear out a "hung" I2C device // by clocking away the low it may be asserting // on SDA PTCDD |= 3; PTCPE |= 3; PTCD |= 1; for( i = 0 ; i < 30 ; ++i ) { i2cdelay(5000); PTCD ^= 1; // if the clock is hi, raise SDA // to send a stop. i2cdelay(2500); if(PTCD & 1) PTCD |= 2; else PTCD &= ~2; } // Now make them inputs, should both be high. PTCDD &= ~3; i2cdelay(1); return PTCD & 3; }