Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

Глава 13. Интерфейс ТW/ (12С) и его применение ; обнуление секунд, ret ldi YL , ОЫ1 0 1 0 0 0 0 ; адрес device DS 1 3 0 7 clr УН ; адрес регистра секунд = О ldi DATA, 0 ; обнуляем секунды rcall wri te i2c brcs stopW ; если флаг переноса С = 1 - ошибка ldi tетр , $АА ; все отлично rcall out сот ldi YL, ОЫ1 0 1 0 0 0 0 ; адрес device DS 1 3 0 7 ldi УН , Ох07 ; адрес регистра управления = 0 7 ldi DATA, Ob0 0 0 1 0 0 0 0 ; бит SQWE = 1 rcall write i2c brcs stopW ldi ternp, $AA ; все отлично - отсылаем $АА rcall out сот 355 Вызов процедуры IniCl k размещается в конце установок, непосредственно перед командой sei . В ней, во-первых, обнуляется регистр секунд, причем целиком, включая и бит сн, если он вдруг оказался установленным, т. е. часы заведомо долж­ ны заработать. Во-вторых, устанавливается бит SQWE в регистре управления для включения вывода SQW (если два младших бита регистра управления равны нулю, то период переключения будет равен 1 секунде) . Выполнение обеих операций кон­ тролируется : если все прошло удачно, то в UART выдается значение $АА, иначе вы­ зывается общая для обеих процедур отсылка кода ошибки по метке stopw (см. лис­ тинг 1 3 .2) . После этого часы должны, как и ранее, равномерно выдавать в UART секунды, начиная с нулевого значения сразу после запуска. Программу можно найти в архиве по адресу, указанному во введении (файл rtc1 307_ini .asm). Обратите внимание, что значения секунд в ней также выводятся без преобразований, т. е. в ВСD-форме, и в приемной программе их надо отображать как hех-числа. Для чтения показаний часов нужно вместо инициализации добавить в программу достаточно длинную процедуру, которую мы назовем ReadClk. По ней мы читаем последовательно секунды, минуты, часы, день недели (число от 1 до 7 - см. врезку «Подробности» далее), дату, месяц, год (в виде числа, равного последним двум цифрам года), преобразуем полученные значения из BCD в обычные числа и от­ правляем через UART (листинг 1 3 .4). ReadClk : ; чтение часов ldi YL, ОЫ1 0 1 0 0 0 0 ; адрес device DS 1 3 0 7 ldi УН , О ; адрес регистра секунд sЬis PinD , pSDA

RkJQdWJsaXNoZXIy MTExODQxMg==