Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
356 rjтp stopW rcall start Часть 111. Практическое программирование микроконтроллеров АVR тоv DATA, YL ; адрес device DS1 3 0 7 , r/w=O rcall write brcs stopW ; C= l ERROR тоv DATA, YH ; адрес регистра секунд rcall write brcs stopW ; C=l ERROR rcall start sbr YL , l ; r/w=l тоv DATA, YL ; адрес device DS 1 3 0 7 , r/w=l rcall write brcs stopW ; C=l ERROR set ; put АСК rcall read ; sek brcs stopW ; C= l ERROR rcall bcd2bin8 ; секунды - в число , см . главу 8 rcall out_coт ; отправляем секунды < далее аналогично минуты, часы, день недели, дату, месяц > ret stopW : ret clt ; no put АСК rcall read ; god brcs stopW ; C=l ERROR rcall bcd2bin8 ; год - в число rcall out сот ; отправляем год rcall stop ldi tетр , $ЕЕ ; отсылаем $ЕЕ - ошибка rcall out сот Еще раз отметим, что многочисленные проверки того, что посылка сработала (строки, помеченные комментарием ; C=l ERROR ) с отсылкой по UART кода ошибки, для работы процедур не требуются и после отладки могут быть удалены или закомментированы. Полностью программу (файл rtc1 307_read .asm) можно найти в архиве по адресу, указанному во введении. Также еще раз подчеркнем - в отли чие от предыдущих программ, в этой программе все значения времени выводятся в нормальной, десятичной форме . Процедура основана на том факте, что однажды запущенным часам в режиме чтения с указанием номера начального регистра (ре гистр о - секунды) в дальнейших обращениях номер регистра можно не указывать. Часы будут выдавать последовательно значения остальных регистров, пока вы не закончите процесс . Для этого надо в последнем чтении выдать бит «неподтвержде ния» («noACK») и затем закончить сессию выдачей состояния stop. Ясности у вас прибавится, если вы внимательно изучите таблицу регистров DS 1 307 (см. табл. 1 3 . 1 , а также описание регистров в русском переводе «даташита>) [20] ) .
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==