Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
Глава 13. Интерфейс ТWI (12С) и его применение 357 № 00 0 1 02 1 03 04 05 06 07 Таблица 13. 1 . Регистры часов DS1307 Бит 7 Бит 6 Бит 5 Бит 4 Бит 3 1 Бит 2 1 Бит 1 1 Бит о Диапазон сн десятки секунд единицы секунд 00-59 о десятки минут единицы минут 00-59 1 2 ( 1 ) АМ/РМ млад- 0 1 -1 2 о старшие шие единицы часов 24 (0) десятки десятки 00-23 о о о о о 1 день недели 1 -7 о о десятки даты единицы даты 0 1-31 о десятки месяца единицы месяца 0 1 -1 2 десятки лет единицы лет 00-99 OUT о о SQWE о 1 о 1 RS 1 1 RSO ПОДРОБНОС ТИ Обратите внимание на бит б в регистре значений часов - он переключает часы с при нятого, например, в США и Канаде 1 2-часового режима на обычный 24-часовой . При 1 2-часовом режиме бит s будет показывать текущую половину суток (АМ или РМ) . В показаниях цифровых часов в 1 2-часовом режиме можно с непривычки запутаться (о неоднозначностях формата см . статью « 1 2-часовой формат времени» в Википе дии) , но по счастью специально следить за этим не надо: нулевое значение бита б оз начает 24-часовой режим , и при установке значения часов (см . главу 15) мы автома тически сбрасываем и этот бит. Более серьезная проблема - раздражающая неопределенность с нумерацией дней недели , она характерна для всех микросхем RTC . Неопределенность связана с тем , что во многих культурах первым днем недели до сих пор считается воскресенье (пер вый день творения, согласно Ветхому завету) , а в светских календарях, включая оте чественный , - понедельник (стандарт 180 8601 от 1 988 года, которому, между про чим, не подчиняются США, Израиль и Канада , но подчиняется Европа) . Поэтому соз датели 081 307 и других моделей RTC разумно не стали привязывать номер дня недели к календарю, а предоставили этот выбор пользователям. Иными словами , ка кой номер вы присвоите текущему дню недели при установке часов, такой и будет принят за основу автоматического отсчета в дальнейшем . Заметим , что при выводе на цифровые дисплеи день недели можно игнорировать - в быту численная величина никому ничего не скажет, и выводить день недели имеет смысл только, если есть воз можность отобразить его в текстовой форме. При этом еще больше, как говорят интернетчики , «лулзов» добавляет факт, что счет дней недели можно вести по-человечески (от 1 до 7) , а можно «по-компьютерному» (от О до 6 - так принято во многих «больших» языках программирования) . В резуль тате в программах для Ardu i пo, например, воскресенье может иметь номер О, 1 , 6 или 7 - в зависимости от предпочтений автора выбранной библиотеки . Создатели 081 307 были в этом отношении гуманнее: они указали в документации , что счетчик дней недели ведет счет от 1 до 7 , оставив на выбор пользователя только начало от счета . Но на всякий случай этот момент следует уточнять в документации на выбран ную вами модель RTC . Заметим, что длительность процедуры чтения по I2c со скоростью 1 00 кГц, не смотря на ее кажущуюся <<Навороченность», не так уж и велика: для каждого байта
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==