- Код: Выделить всё
#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 так ли это???