/************************************************************************* 

Фунция процедуры СТАРТ
Возвращает 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 */