Приблема при работе с RTC3231
Приблема при работе с RTC3231
Пользуюсь библиотекой axlib. Возник вопрос, который поставил меня в тупик
Вот кусок кода
То в порт вместо секунд выводится день недели, получается например 12 45 3 3 25 11 18
Но если переделать так:
То получается нормально. Например 12 45 32 3 25 11 18
Следующий опыт
Результат 12 45 32 12 45 3 3 25 11 18
Я подумал, что это из за задержки может быть, сделал так:
Результат 12 45 3 3 25 11 18
Поменял местами чтение даты и времени.
Теперь вместо дня недели секунды
12 45 32 32 25 11 18
Как так, из за чего такой глюк?
Надеюсь на вашу помощь
Вот кусок кода
Код: Выделить всё
BYTE rtc_time[2], rtc_date[3];
void send_UART(BYTE value) {
while(!( UCSRA & (1 << UDRE))); // Ожидаем когда очистится буфер передачи
UDR = value; // Помещаем данные в буфер, начинаем передачу
}
while(1)
{
ds3231_read_time(&rtc_time[0]);
ds3231_read_data(&rtc_date[0]);
send_UART(rtc_time[0]); //часы
send_UART(rtc_time[1]); //минуты
send_UART(rtc_time[2]); //секунды
send_UART(rtc_date[0]); //день недели
send_UART(rtc_date[1]); //число
send_UART(rtc_date[2]); //месяц
send_UART(rtc_date[3]); //год
_delay_ms(1000);
}
Но если переделать так:
Код: Выделить всё
while(1)
{
ds3231_read_time(&rtc_time[0]);
send_UART(rtc_time[0]); //часы
send_UART(rtc_time[1]); //минуты
send_UART(rtc_time[2]); //секунды
ds3231_read_data(&rtc_date[0]);
send_UART(rtc_date[0]); //день недели
send_UART(rtc_date[1]); //число
send_UART(rtc_date[2]); //месяц
send_UART(rtc_date[3]); //год
_delay_ms(1000);
}
Следующий опыт
Код: Выделить всё
while(1)
{
ds3231_read_time(&rtc_time[0]);
send_UART(rtc_time[0]); //часы
send_UART(rtc_time[1]); //минуты
send_UART(rtc_time[2]); //секунды
ds3231_read_data(&rtc_date[0]);
send_UART(rtc_time[0]); //часы
send_UART(rtc_time[1]); //минуты
send_UART(rtc_time[2]); //секунды
send_UART(rtc_date[0]); //день недели
send_UART(rtc_date[1]); //число
send_UART(rtc_date[2]); //месяц
send_UART(rtc_date[3]); //год
_delay_ms(1000);
}
Я подумал, что это из за задержки может быть, сделал так:
Код: Выделить всё
while(1)
{
ds3231_read_time(&rtc_time[0]);
_delay_ms(1000);
ds3231_read_data(&rtc_date[0]);
send_UART(rtc_time[0]); //часы
send_UART(rtc_time[1]); //минуты
send_UART(rtc_time[2]); //секунды
send_UART(rtc_date[0]); //день недели
send_UART(rtc_date[1]); //число
send_UART(rtc_date[2]); //месяц
send_UART(rtc_date[3]); //год
}
Поменял местами чтение даты и времени.
Теперь вместо дня недели секунды
12 45 32 32 25 11 18
Как так, из за чего такой глюк?
Надеюсь на вашу помощь