Это делалось по аналогии, увиденного в интернете. С секундами/минутами/часами все работает, однако там все куда проще. После преобразования в двоичный код они сразу выводятся на дисплей и все...
У меня в таком случае выводит "SAT" всегда. То есть дни недели не в виде 1-7... (пробовал ставить условие и на субботу, однако тогда не выводит ничего - подтверждение предыдущих слов)
Бывают кристаллы с поврежденной маской календаря... И не только среди DSок - касается ВСЕХ типов RTC... Проверь заведомо годным. Насчет усяких симуляторов- инструкции на соответствующих ветках форума.
Все знают, что в протеусе досточно ошибок. Однако время выводит вполне адекватно, почему оно должно ошибаться с датой? В железе нет возможности проверить, т.к. нет DS1307...
Я вот не пойму, в ds1307 информация хранится в двоично-десятичном коде, однако день недели (и т.д.) мы записываем в десятичном формате...
А если не понимаете, то озвучьте разницу, чем отличается день недели (т.е., число, меньшее 8-ми) в двоично-десятичном формате от дня недели в десятичном?
P.S. Протеус вполне адектватно работает с DS1307, за исключением одного момента, что при старте программы день недели он из системного времени считает не Пн..Вс = 1..7, а как Вс..Сб = 1..7.
Вы меня не так поняли, наверное. Я имел в виду, что непреобразованное десятичное число и преобразованное в двоично-десятичный формат ничем не отличается, если оно меньше 10.
Скажем, если нам надо записать в микросхему дату например, 23.02.2015, мы пишем: Байт 4: 23 число => записываем в ячейку памяти 0x23, т.е. число 35. Байт 5: 02 месяц => записываем в ячейку памяти 0x01, т.е. число 02. Байт 6: 15 год => записываем в ячейку памяти 0x15, т.е. число 21. День недели понедельник - пишем 01 как 0x01, оно же всё равно 01. А вот для Proteus-a понедельник - это число 2 в DS1307.
На данный момент работает такой вариант (знаю, использовать switch лучше, однако на самом деле день недели мне не нужен будет, это так, лишь бы во всем разобраться)
Код:
week_write = 5; DS1307Write(0x03, week_write);
DS1307Read(0x03,&week); // Чтение регистра дня недели lcd_gotoxy(0,1); if(week == 1) lcd_string("SUN",3); else if (week == 2) lcd_string("MON",3); else if (week == 3) lcd_string("TUE",3); else if (week == 4) lcd_string("WED",3); else if (week == 5) lcd_string("THU",3); else if (week == 6) lcd_string("FRI",3); else lcd_string("SAT",3);
Я специально назвал переменные по разному, чтобы убедиться в том, что данные записываются в микросхему и считываются.
tantrum писал(а):
0x23, т.е. число 35.
А почему это число 35? Нам ведь нужно 23... Аналогично и с годом...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения