309
void DS1307_write(unsigned char address, unsigned char value)
{
I2C_USCI_write_byte(address, value);
}
unsigned char bcd_to_decimal(unsigned char value)
{
return ((value & 0x0F) + (((value & 0xF0) >> 0x04) * 0x0A));
}
unsigned char decimal_to_bcd(unsigned char value)
{
return (((value / 0x0A) << 0x04) & 0xF0) | ((value % 0x0A) & 0x0F);
}
void get_time(void)
{
rtc.sec = DS1307_read(sec_reg);
rtc.sec = bcd_to_decimal(rtc.sec);
rtc.min = DS1307_read(min_reg);
rtc.min = bcd_to_decimal(rtc.min);
rtc.hr = DS1307_read(hr_reg);
rtc.hr = bcd_to_decimal(rtc.hr);
}
void get_date(void)
{
rtc.day = DS1307_read(day_reg);
rtc.day = bcd_to_decimal(rtc.day);
rtc.dt = DS1307_read(date_reg);
rtc.dt = bcd_to_decimal(rtc.dt);
rtc.mt = DS1307_read(month_reg);
rtc.mt = bcd_to_decimal(rtc.mt);
rtc.yr = DS1307_read(year_reg);
rtc.yr = bcd_to_decimal(rtc.yr);
}
void set_time(void)
{
rtc.sec = decimal_to_bcd(rtc.sec);
DS1307_write(sec_reg, rtc.sec);
rtc.min = decimal_to_bcd(rtc.min);
DS1307_write(min_reg, rtc.min);
rtc.hr = decimal_to_bcd(rtc.hr);
DS1307_write(hr_reg, rtc.hr);
}