Возникла следующая проблема, вторую неделю пытаюсь сделать сканирование 4 кнопок через таймер в котором возвращается в
регистр KEY код кнопки + короткое или длинное нажатие ,с изменением частоты автоповтора ,несколько людей на форуме подсказали примерый алгоритм ,ну и почитав кучу инфы в инете ,попытался написать код
микроконтроллер attiny2313
кварц 4 МГц
таймер
T1 CK/256
схема кнопок
вот что я навоял:
Вынесите вердикт по коду!!!!!!
Код: Выделить всё
def tmkey = r17 ; счетчик времени
def key = r18 ; сюда пишется код кнопки для сравнения
def keyold = r19 ;
;основной цикл
main
cpi key, (код кнопки 1 короткое нажатие)
rcall Kn1short ;
cpi key, (код кнопки 2 короткое нажатие)
rcall Kn2short
cpi key, (код кнопки 1 длинное нажатие)
rcall Kn1long
cpi key, (код кнопки 2 длинное нажатие)
rcall Kn2long
rjmp main
T0_OVF
push r16
in r16,sreg ;push sreg
in r16, pind ;читаем порт D
andi r16 ,0b00110000 ;обнуляем лишние pd
cpi keyold ,r16 ;сравниваем со старым кодом
mov keyold, r16 ;
brne K1
inc tmkey ;tmkey +1
;короткое
cpi keyold , 5 ; ~0,1 c
breq keyset
;длинное нажатие
cpi keyold , 50 ; ~1 c
brne keyend ;если равно то end
.....
.....
.....
rjmp keyset
K1:
clr tmkey
rjmp keyend
keyset:
mov key ,keyold
keyend:
out sreg,r16 ;Pop sreg
pop r16 ;pop R16
RETI
Не могу придумать как при записи в Key еще и указывать длинное или короткое , в attiny2313 6 выводов pd
Можно ли как нибуть использовать лишний 7 бит как указатель длинного или короткого нажатия и как организовать автоповтор с определенной частотой ????



