- Код: Выделить всё
- #include <mega16a.h>
 #include <delay.h>
 #include <i2c.h>
 #define Start TWCR=((1<<TWINT)|(1<<TWSTA)|(1<<TWEN))
 #define Stop TWCR=((1<<TWINT)|(1<<TWEN)|(1<<TWSTO))
 #define Send TWCR=((1<<TWINT)|(1<<TWEN))
 #define Recieve TWCR=((1<<TWINT)|(1<<TWEA)|(1<<TWEN))
 #define Execute (!(TWCR &(1<<TWINT)))
 while (1)
 {
 m1: if(!PINA.0){i2c_data=0x01;goto m2;} //если кнопка 1 нажата,то отправляем 1
 if(!PINA.1){i2c_data=0x02;goto m2;}
 if(!PINA.2){i2c_data=0x03;goto m2;}
 goto m1;
 
 
 m2: Start;
 while(Execute);
 
 TWDR=0X1D;//отсылаем пакет-адрес и передача
 Send;
 while(Execute);
 
 TWDR=i2c_data;
 Send;
 while(Execute);
 
 Stop;
 delay_us(20);
 }
 }
Так вот вопрос, почему когда я посылаю адрес (TWDR=0X1D;) у которого бит 0==1 то передача виснет после установки 9го бита (те бита подтверждения что передано).
Я уже и просто 0Х01 отправлял таже хрень, все остальные числа у которых бит0!=1 все норм посыла идет адрес + данные (нажатой кнопки)

Добавлено спустя 19 минут 12 секунд:
Прав ли я?
попытаюсь ответить на свой вопрос
1 идет старт
2 идет 7ми битный адрес
3 пишем 1 это чтение 0 это запись
видимо по этому контроллер предает адрес в моем лучае 0X1D и ждет приема так как 0-й бит равен 1 (чтение)
а адрес хранится в битах 1-6 так ли это???




