Цитата(IgorKossak @ Nov 26 2008, 15:42)

Нужна следующая последовательность:
старт\адрес чипа + W\адрес ячейки\старт\адрес чипа + R\читаем байты...\стоп.
В документации читайте внимательно.
И пользуйтесь форматированием при вставке текста программы, читать не очень то приятно.
Спасибо , все получилось , конечно не без сторонней помощи .
CODE
long_code_here = ';
READ_EE: // READ_BYTEI2C
clr tmp // tmp -> 0
ldi tmp, (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
out TWCR,tmp // start
wait_rst: // WAIT READ START TWI
in tmp,TWCR //
sbrs tmp,TWINT //
jmp wait_rst // ожидание сброса TWINT
in tmp,TWSR // читаем статус регистр
andi tmp,0xf8 // убираем лишнее
cpi tmp,0x08 // если старт прошел успешно , если нет то стоп
breq adr_chip // идем дальше
jmp stop_i2c // идем на стоп
adr_chip: // SEND ADRESS CHIP 0xAE
ldi tmp,0xAE //
out TWDR,tmp //
ldi tmp, (1<<TWINT)|(1<<TWEN)
out TWCR,tmp //
wait_ad1: // WAIT SEND ADRESS CHIP
in tmp,TWCR //
sbrs tmp,TWINT // ожидание сброса TWINT
jmp wait_ad1 // ожидание сброса TWINT
in tmp,TWSR // читаем статус регистр
andi tmp,0xf8 // убираем лишнее
cpi tmp,0x18 // если SLA+W прошло успешно , если нет то стоп
breq ad_read // идем дальше
jmp stop_i2c // идем на стоп
ad_read: // Адрес ячейки которую нужно считать из памяти
ldi tmp,0x00 // передаем адрес ячейки которую нужно считать из памяти
out TWDR,tmp //
ldi tmp, (1<<TWINT)|(1<<TWEN)
out TWCR,tmp //
wait_ad_read: //
in tmp,TWCR //
sbrs tmp,TWINT //
jmp wait_ad_read //
in tmp,TWSR // читаем статус регистр
andi tmp,0xf8 // убираем лишнее
cpi tmp,0x28 // если SLA+W прошло успешно , если нет то стоп
breq restart // идем дальше
jmp stop_i2c // идем на стоп
restart: // повстарт
ldi tmp, (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
out TWCR,tmp // start
wait_restart: //
in tmp,TWCR //
sbrs tmp,TWINT //
jmp wait_restart //
in tmp,TWSR // читаем статус регистр
andi tmp,0xf8 // убираем лишнее
cpi tmp,0x10 // если повстарт прошел успешно , если нет то стоп
breq ad_read2 // идем дальше
jmp stop_i2c // идем на стоп
ad_read2: //
ldi tmp,0xAF //
out TWDR,tmp // Посылаем посылку SLA+R
ldi tmp, (1<<TWINT)|(1<<TWEN)
out TWCR,tmp //
wait_ad_read2:
in tmp,TWCR //
sbrs tmp,TWINT //
jmp wait_ad_read2 //
in tmp,TWSR // читаем статус регистр
andi tmp,0xf8 // убираем лишнее
cpi tmp,0x40 // если SLA+R прошло успешно , если нет то стоп
breq read_b // идем дальше
jmp stop_i2c // идем на стоп
read_b: //
ldi tmp, (1<<TWINT)|(1<<TWEN)
out TWCR,tmp //
wait_readb:
in tmp,TWCR //
sbrs tmp,TWINT //
jmp wait_readb //
in tmp,TWSR // читаем статус регистр
andi tmp,0xf8 // убираем лишнее
cpi tmp,0x58 // если старт прошел успешно , если нет то стоп
breq read_byte // идем дальше
jmp stop_i2c // идем на стоп
read_byte: //
in ZL,TWDR //
stop_i2c: // STOP I2C
ldi r16, (1<<TWINT)|(1<<TWEN)|(1<<TWSTO)
out TWCR,tmp //
ret //