/*************************************************************************
Фунция процедуры СТАРТ
Возвращает 0 = устройство ответило, 1= нет ответа
*************************************************************************/
unsigned int twi_start(unsigned char address)
{
unsigned int twst; // отправляем ситуацию START
TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);
// ждем бит прерывания готовности шины I2C
while(!(TWCR & (1<<TWINT)));
// Проверяем состояние статусного регистра.
twst = TW_STATUS & 0xF8;
if ( (twst != TW_START) && (twst != TW_REP_START)) return 1;
// шлем адрес
TWDR = address;
TWCR = (1<<TWINT)| (1<<TWEN);
// Ожидаем завершения операции и отработки состояния АСК
while(!(TWCR & (1<<TWINT)));
// Проверяем значение статусного регистра
twst = TW_STATUS &0xF8;
if ( (twst !=TW_MT_SLA_ACK) && (twst != TW_MR_SLA_ACK) ) return 1;
return 0;
}/* twi_start */