[Код из атмел студии 7, на atmega 8, протеус 8]
Код: Выделить всё
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
#define ds3231 0b11010001
int main(void)
{
DDRB = 0xFF;
DDRD = 0x00;
// Insert code
uint8_t addrW; // созидание и подготовка адреса с битом записи
addrW = (ds3231);
uint8_t addrDATA;
addrDATA = 0x01;
uint8_t DATA;
DATA = 0b01010101;
while(1){
_delay_ms(200);
TWBR = 255; //При частоте 1 МГц
TWSR = (1 << TWPS1)|(0 << TWPS0); //Пред делитель на 4
TWCR |= (1 << TWEN); //Включение модуля TWI
// ******настройки
TWCR =(1<<TWINT)|(1<<TWSTA)|(1<<TWEN)|(1<<TWIE); // старт
while (!(TWCR &( 1<<TWINT))); // ожидание подъема twint
if ((TWSR & 0xF8) != 0xF8); else PORTB |= (1 << 2); // ежели ошибка- загорится лампа
TWDR= addrW;
TWCR= (1<<TWINT)|(1<<TWEN);
while (!(TWCR &( 1<<TWINT))); // ожидание подъема twint
TWDR= addrDATA;
TWCR= (1<<TWINT)|(1<<TWEN);
while (!(TWCR &( 1<<TWINT))); // ожидание подъема twint
if ((TWSR & 0xF8) != 0xF8) ;else PORTB |= (1 << 3); // ежели ошибка- загорится лампа
TWDR= DATA;
TWCR= (1<<TWINT)|(1<<TWEN);
while (!(TWCR &( 1<<TWINT))); // ожидание подъема twint
if ((TWSR & 0xF8) != 0xF8);else PINB |= (1 << 4); // ежели ошибка- загорится лампа
TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
}
return 0;
}
В общем, летит старт, летит адрес, адрес прилетает нормально, * далее летит неправильный (обычно пустой или, 4 раза генерирует некую белибирду) адрес пакета, шлет меня НАКуй... дальше уже не столь важно.
не пойму в чем дело, ломаю голову не первую неделю. Жду лапку помощи
