Код
void rtc_get_time(rtc_type *rtc_var)
{
i2c_start();
i2c_write_addr(DS1307_ADDR | WR);
i2c_write(0x00);
i2c_start();
i2c_write_addr(DS1307_ADDR | RD);
rtc_var->seconds = bcd2dec(i2c_read(ACK) & 0x7F);
rtc_var->minutes = bcd2dec(i2c_read(ACK));
rtc_var->hours = bcd2dec(i2c_read(ACK) & 0x3F);
rtc_var->weekday = i2c_read(ACK) & 0x07;
rtc_var->day = bcd2dec(i2c_read(ACK));
rtc_var->month = bcd2dec(i2c_read(ACK));
rtc_var->year = bcd2dec(i2c_read(NOT_ACK)) + 2002;
i2c_stop();
return;
}
{
i2c_start();
i2c_write_addr(DS1307_ADDR | WR);
i2c_write(0x00);
i2c_start();
i2c_write_addr(DS1307_ADDR | RD);
rtc_var->seconds = bcd2dec(i2c_read(ACK) & 0x7F);
rtc_var->minutes = bcd2dec(i2c_read(ACK));
rtc_var->hours = bcd2dec(i2c_read(ACK) & 0x3F);
rtc_var->weekday = i2c_read(ACK) & 0x07;
rtc_var->day = bcd2dec(i2c_read(ACK));
rtc_var->month = bcd2dec(i2c_read(ACK));
rtc_var->year = bcd2dec(i2c_read(NOT_ACK)) + 2002;
i2c_stop();
return;
}