В общем, товарищи, столкнулся с данной проблемой. Микроконтроллер - ADuC845 (отладочная плата) соединен с E2PROM памятью от ATMEL и часами DS1307 по I2C. Соединения проверял неоднократно, все верно. После передачи стартового условия и первого байта, на девятом такте приемное устройство не хочет давать сигнал подтверждения приема, независимо от того, память это, или часы. Подозреваю, что проблема в программе, но вот где собака порылась найти не могу

Ниже выкладываю код программы (полезную часть), надеюсь на Вашу помощь

....
sbit SDA=P3^3;
sbit SCL=P3^5;
...
void I2C_Start(void) {
SDA=1;
SCL=1;
delay();
if(SDA==0) {er=1;};
if(SCL==0) {er=1;};
if(er==1) {send_lcd_symbol(set_second_line+4, 'X');};
SDA=0;
delay();
SCL=0;
}
void I2C_Send_byte(char byte) {
unsigned int bits;
for(bits=0; bits<8;bits++) {
if((byte&0x80)==0x80) {
SDA=1;
delay();
SCL=1;
delay();
SCL=0;
send_lcd_symbol(set_first_line+bits, '1');
}
else {
SDA=0;
delay();
SCL=1;
delay();
SCL=0;
send_lcd_symbol(set_first_line+bits, '0');
};
byte=byte<<1;
}
SDA=1;
delay();
SCL=1;
delay();
if(SDA==0) {
NOACK=1;
send_lcd_symbol(set_second_line, 'A');
} else {
NOACK=0;
send_lcd_symbol(set_second_line, 'E');
}
SCL=0;
}
...
void main(void) {
En=0;
RW=0;
LCD_Init();
SDA=1;
SCL=1;
I2C_Start();
I2C_Send_byte(0xA1);
while(1) {}
}
PS. Для понятия того, что ТАМ творится, использую ЖКИ, поэтому пусть он Вас не смущает =)