void handleI2C_master() { static uint8_t mode; while(1) { if((TWCR,TWINT)) { { switch(TW_STATUS) { //case 0x10: // reapeated START condition has been transmitted case 0x08: // A START condition has been transmitted t_index =0; r_index =0; status_TWI(); //send SLA W or R depending on what mode we want. if(mode == TW_WRITE) TWDR = ((address) | TW_WRITE); //else TWDR = SLA_R; TWACK; break; //--------------- Master transmitter mode------------------------- case 0x18: // SLA_W has been transmitted and ACK has been received //load data TWDR = tran[data]; t_index=1; TWACK; break; //SLA_W not acked, case 0x20: TWCR =0; TWSTART; break; case 0x28: //data acked by addressed receiver //load next byte if(t_index < BUFLEN_TRAN) { TWDR = tran[t_index]; t_index++; TWACK; break; } //switch mode and send a start signal else { mode = TW_READ; TWSTART; break; } case 0x38: //arbitration lost //data nacked, start over case 0x30: TWCR = 0; TWSTART; break; case 0x10: // reapeated START condition has been transmitted break; } } } data = 0x08; } }