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

234 Часть 111. Практическое программирование микроконтроллеров АVR Теперь предположим, что значения секунд индицироваться не будут (их заменит «мигалка» по выводу OC l A), так что для них достаточно одного глобального счет­ чика, а единицы-десятки минут и часов мы будем располагать в отдельных пере­ менных. В листинге 9.4 показано, как можно реализовать этот второй способ - по прерыванию тr м 1_ сомРА (разумеется, оно должно быть не только разрешено, но и в соответствующем месте таблицы прерываний должен стоять переход rjmp TIMlCOMPA ) . . def temp = r17 ; рабочая переменная . def sek = rlB ; счетчик секунд . def ernin = r1 9 ; единицы минут . def drnin = r2 0 ; десятки минут . def ehh r2 1 ; единицы часов . def dhh = r22 ; десятки часов TIMl_COМPA : ; прерывание по сравнению 1 сек inc sek ; увеличиваем число секунд на 1 cpi sek, 60 ; сравнить со значением 60 brne Texit ; если не равно , на выход clr sek ; если уже 60 , очистить секунды inc ernin ; и увеличить ед . минут cpi ernin , 1 0 ; сравнить ед . минут с числом 1 0 brne Texit ; если еще не равно , на выход clr ernin ; иначе очистить ед . минут inc drnin ; увеличить дес . минут cpi drnin, 6 ; сравнить с числом 6 brne Texit ; если еще не равно , на выход clr drnin ; иначе очистить дес . минут inc ehh ; увеличить ед . часов cpi ehh, 4 ; сравнить ед . часов с числом 4 brlo Texit ; если меньше , на выход cpi dhh, 2 ; иначе сравнить дес . часов с числом 2 brne mhh ; если не равно 2 , то на метку mhh clr ehh ; если равно , то очистить ед . часов clr dhh ;и десятки часов rjmp Texit ;и на выход mhh : ; если дес . часов меньше 2 , то cpi ehh, 1 0 ; сравнить ед . часов с числом 1 0 brne Texit ; если меньше 1 0 , т о н а выход clr ehh ; иначе очистить ед . часов inc dhh ; увеличить дес . часов Texit : reti

RkJQdWJsaXNoZXIy MTExODQxMg==