;******************ПРОГРАММА ОПРОСА 4-Х КНОПОК*****************************
;кнопки: "+", "-", "MODE";"MEMORY"
.include"2313def.inc"
.def temp=r21;рабочая переменная
.def MODE=r18;регистр состояния кнопки "MODE": "0" - "PRESET"; "1"- "TUNING"

;****************ПРЕРЫВАНИЯ НЕ ИСПОЛЬЗУЮТСЯ*****************************
rjmp RESET
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
;************************************************************************
RESET:
ldi r31, low(ramend);инициализация указателя стека для AVR, имеющих 
out spl,r31; программный  стек, обязательно выполняется в начале программы
ldi r20,0b1110011;программирование порта D:PD2,PD3 - вход, ост. - выход
out ddrd,r20
ldi r20,0b0001100;включение подтягивающих резисторов на PD2 (-) и PD3 (+)
out portd,r20

ldi r20,0b00001100;программирование порта B:PB2 и PB3- выходы, ост. - входы
out ddrb,r20
ldi r20,0b11110011;включение подтягивающих резисторов на порт B
out portb,r20

;****************цикл отслеживания нажатия кнопки  "+" ********************
Taste_UP:;ожидаем нажатия кнопки "+"
sbic PinD,3;пропускаем следующую команду, если нажата кнопка "+"
rjmp Taste_DWN;если не нажата "+", идем на проверку нажатия "-"
rcall Wait20;пауза для устранения дребезга контактов при нажатии
sbic PinD,3;пропускаем следующую команду, если кнопка "+" все еще нажата
rjmp Taste_UP;ожидаем дальше
T1:;ожидаем отпускания кнопки  "+"
sbis PinD,3;Пропускаем следующую команду, если кнопка "+" отпущена
rjmp T1;ожидаем дальше

;ВОТ ТУТ ВСТАВЛЯЕТЕ КОД ДЛЯ ВКЛЮЧЕНИЯ ИЛИ ВЫКЛЮЧЕНИЯ СВЕТОДИОДОВ

rcall Wait50; пауза для устранения дребезга контактов при отпускании
sbis PinD,3;пропускаем следующую команду, если кнопка "+" все еще отпущена
rjmp T1;ожидаем дальше
;---------------------------------------------------------------------------
;****************цикл отслеживания нажатия кнопки  "-" ********************
Taste_DWN:;ожидаем нажатия кнопки "-"
sbic PinD,2;пропускаем следующую команду, если нажата кнопка "-"
rjmp Taste_MODE;если не нажата "-", идем на проверку нажатия "MODE"
rcall Wait20;пауза для устранения дребезга контактов при нажатии
sbic PinD,2;пропускаем следующую команду, если кнопка "-" все еще нажата
rjmp Taste_DWN;ожидаем дальше
T2:;ожидаем отпускания кнопки  "+"
sbis PinD,2;Пропускаем следующую команду, если кнопка "-" отпущена
rjmp T2;ожидаем дальше

;ВОТ ТУТ ВСТАВЛЯЕТЕ КОД ДЛЯ ВКЛЮЧЕНИЯ ИЛИ ВЫКЛЮЧЕНИЯ СВЕТОДИОДОВ

rcall Wait50; пауза для устранения дребезга контактов при отпускании
sbis PinD,2;пропускаем следующую команду, если кнопка "-" все еще отпущена
rjmp T2;ожидаем дальше

;---------------------------------------------------------------------------
;****************цикл отслеживания нажатия кнопки  "MODE" ********************
Taste_MODE:;ожидаем нажатия кнопки "MODE"
sbic PinB,0;пропускаем следующую команду, если нажата кнопка "MODE"
rjmp Taste_MEMORY;если не нажата "MODE", идем на проверку нажатия "MEMORY"
rcall Wait20;пауза для устранения дребезга контактов при нажатии
sbic PinB,0;пропускаем следующую команду, если кнопка "MODE" все еще нажата
rjmp Taste_MODE;ожидаем дальше
T3:;ожидаем отпускания кнопки  "MODE"
sbis PinB,0;Пропускаем следующую команду, если кнопка "MODE" отпущена
rjmp T3;ожидаем дальше

;ВОТ ТУТ ВСТАВЛЯЕТЕ КОД, ТОГО, ЧТО ХОТИТЕ ДЕЛАТЬ

rcall Wait50; пауза для устранения дребезга контактов при отпускании
sbis PinB,0;пропускаем следующую команду, если кнопка "MODE" все еще отпущена
rjmp T3;ожидаем дальше

;---------------------------------------------------------------------------
;****************цикл отслеживания нажатия кнопки  "MEMORY" ********************
Taste_MEMORY:;ожидаем нажатия кнопки "MEMORY"
sbic PinB,1;пропускаем следующую команду, если нажата кнопка "MEMORY"
rjmp Taste_UP;если не нажата "MEMORY", идем на проверку нажатия "Taste_UP"
rcall Wait20;пауза для устранения дребезга контактов при нажатии
sbic PinB,1;пропускаем следующую команду, если кнопка "-" все еще нажата
rjmp Taste_MEMORY;ожидаем дальше
T4:;ожидаем отпускания кнопки  "MEMORY"
sbis PinB,1;Пропускаем следующую команду, если кнопка "-" отпущена
rjmp T4;ожидаем дальше

;ВОТ ТУТ ВСТАВЛЯЕТЕ КОД, ТОГО, ЧТО ХОТИТЕ ДЕЛАТЬ

rcall Wait50; пауза для устранения дребезга контактов при отпускании
sbis PinB,1;пропускаем следующую команду, если кнопка "+" все еще отпущена
rjmp T4;ожидаем дальше

rjmp Taste_UP; возвращаемся на сканирование кнопки "+"

;***************************************************************************
;********************** ПОДПРОГРАММЫ****************************************
Wait20:
ldi r23,25
ldi r22,25
n:
dec r22
brne n

dec r23
ldi r22,25
brne n
ret

Wait50:
ldi r23,50
ldi r22,50
m:
dec r22
brne m

dec r23
ldi r22,50
brne m
ret

