cpi dmin,6 ;если число десятков минут еще не равно 6
brne END_TIM1 ;то на выход из процедуры
clr dmin ;если =6, то обнуляем
rjmp END_TIM1 ;на выход
mm2: cpi set_up,3 ;если третий разряд, устанавливаем его
brne mm3 ;иначе на следующий
sbis PinB,0 ; если Кн2 нажата
inc ehh ;увеличиваем число единиц часов на 1
cpi ehh,4 ;если число единиц часов еще меньше 4
brio END_TIM1 ;то на выход из процедуры
cpi dhh,2 ;если число десятков часов не равно 2
brne mm21 ;то на метку mm21
clr ehh ;иначе обнуляем число единиц часов
rjmp END_TIM1 ;на выход из процедуры
mm21: cpi ehh, 10 ;если число единиц часов не равно 10
brne END_TIM1 ;то на выход
clr ehh ;иначе обнуляем число единиц часов
rjmp END_TIM1 ;на выход
mm3: sbis PinB,0 ;четвертый разряд
inc dhh ;увеличиваем число десятков часов на 1
cpi dhh,3 ;если оно еще не равно 3
brne END_TIM1 ;то на выход
clr dhh ;иначе обнуляем
rjmp END_TIM1 ;на выход
;счет времени
mtime: inc sek ;увеличиваем число секунд на 1
cpi sek,60 ;если оно не равно 60
brne END_TIM1 ;то на выход
clr sek ;иначе обнуляем секунды
inc emin ;и увеличиваем единиц минут
cpi emin,10 ;если число единиц минут не равно 10
brne END_TIM1 ;то на выход
clr emin ;иначе обнуляем единиц минут
inc dmin ;и увеличиваем число десятков минут
cpi dmin,6 ;если оно не равно 6
brne END_TIM1 ;то на выход
clr dmin ;иначе обнуляем число десятков минут
inc ehh ;и увеличиваем число единиц часов
cpi ehh,4 ;если число единиц часов не равно 4
brio END_TIM1 ;то однозначно на выход
cpi dhh,2 ;если число десятков часов при этом не равно 2
brne mhh ;то на метку mhh
clr ehh ;иначе обнуляем число единиц часов
clr dhh ;и сразу число десятков часов тоже (это полночь)
rjmp END_TIM1 ;на выход
mhh:
cpi ehh,10 ;если число единиц часов не равно 10
brne END_TIM1 ;на выход
clr ehh ;иначе обнуляем единиц часов
inc dhh ;увеличиваем число десятков часов
END_TIM1:
reti ;выход из прерывания Timer1
;==== прерывание Timer0 управление разрядами ====
TIM0:
sbrc Flag,1 ;если бит1=1 напряжения нет
rjmp END_TIM0 ;тогда сразу на выход
clr temp ;все очищаем
out PortD,temp
out РогtB,temp
andi POS,3 ;счет разрядов от 0 до 3
sbis PinB,0 ;пока нажата кнопка Кн2
clr count ;разряд при установке не мигает
cpi P0s,0 ;если счетчик разрядов не 0
brne m0 ;то на метку m0 — следующий разряд
cpi set_up,1 ;если set_up=1, мигает этот разряд
brne sm_1 ;иначе на включение разряда
sbrs count,0 ;если бит 0 в count=0
sm_1: sbi PortD,em ;то уст. PDO в 1, разряд единиц мин. светится
;иначе он останется темным, т. е. мигает с частотой count
mov temp,emin ;в temp — число единиц минут
rcall SEG_SET ;устанавливаем сегменты
rjmp END_0 ;на выход
m0: cpi POS,1 ; если счетчик разрядов не 1
brne m1 ;то на сл. разряд
cpi set_up,2 ;если set_up=2, то мигает этот разряд
brne sm_2 ;иначе на включение разряда
sbrs count,0 ;если бит 0 в count=0
sm_2: sbi PortD,dm ;то уст. PD1 в 1, разряд десятков мин. светится
mov temp,dmin ;в temp — число десятков минут
rcall SEG_SET ;устанавливаем сегменты
rjmp END_0 ;на выход
m1: cpi POS,2 ;если счетчик разрядов не 2
brne m2 ;то на сл. разряд
cpi set_up,3 ;если set_up=3, то мигает этот разряд
brne sm_3 ;иначе на включение разряда
sbrs count,0 ;если бит 0 в count=0
sm_3: sbi PortD,eh ;то уст. PD2 в 1, разряд единиц часов светится
mov temp, ehh ;в temp — число единиц часов
rcall SEG_SET ;устанавливаем сегменты
rjmp END_0 ;на выход
m2: ;обработка 4 разряда десятков часов
cpi set_up,4 ;если set_up=4, то мигает этот разряд
brne sm_4 ;иначе на включение разряда
sbrs count,0 ;если бит 0 в count=0
sm_4: sbi PortD,dh ;то уст. PD4 в 1, разряд десятков часов светится
mov temp,dhh ;в temp — число десятков часов
rcall SEG_SET ;устанавливаем сегменты
END_0:
inc POS
END_TIM0:
reti ;выход из прерывания Timer0
;===== компаратор — батарейка =====
ACOMPI:
sbis ACSR,АСО ;если бит АСО =1, то продолжим
Читать дальше
Конец ознакомительного отрывка
Купить книгу