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

236 Часть 111. Практическое программирование микроконтроллеров АVR clr cSek ; очистить секунды inc cMin ; увеличиваем число минут на 1 cpi cMin , 60 ; сравнить со значением 60 brne Тmin_exit ; если не равно , на запись в память clr cMin ; очистить минуты inc cHour ; увеличиваем число часов на 1 cpi cHour , 2 4 ; сравнить со значением 2 4 brne Thour_exit ; если не равно , на запись в память clr cHour ; очистить часы ; запись новых упакованных значений : Thour exit : mov temp , cHour ; часы rcall bin2bcd8 ; на выходе в templ десятки, в temp единицы час ldi ZL , DdН ; адрес десятков часов st Z+ , templ ; сохраняем десятки st Z , temp ; сохраняем единицы swap templ ; десятки в старшую тетраду add temp , templ ; упакованные часы ldi ZL , Hour ; адрес упаков . часов st Z , temp ; сохраняем часы Тmin exit : mov temp , cMin ;минуты rcall Ьin2bcd8 ; на выходе в templ десятки , в temp единицы мин ldi ZL, DdМ ; адрес десятков минут st Z+ , templ ; сохраняем десятки st Z , temp ; сохраняем единицы swap templ ; десятки в старшую тетраду add temp , templ ; упакованные минуты ldi ZL , Min ; адрес упаков . минут st Z , temp ; сохраняем минуты Tsek exit : mov temp , cSek ; секунды rcall Ьin2bcd8 ; на выходе в templ десятки, в temp единицы сек swap templ ; десятки в старшую тетраду add temp , templ ; упакованные секунды ldi ZL, Sek ; адрес упаков . секунд st Z , temp ; сохраняем секунды reti По этому алгоритму все три величины будут сохраняться в памяти каждый час, ми­ нуты и секунды - каждую минуту, только секунды - каждую секунду. Как види­ те, алгоритм получился даже длиннее предыдущего, зато тут мы имеем три значе­ ния времени, готовые к употреблению каждое в своей области: с обычными hех­ значениями легко производить всякие арифметические и логические операции (на­ пример, сравнивать моменты времени между собой), упакованные значения можно посылать во «внешний мир», а распакованные использовать для вывода на индика­ торы в независимом от подсчета времени цикле (чем мы и займемся чуть позже) .

RkJQdWJsaXNoZXIy MTExODQxMg==