GP1 писал(а):Тут есть небольшие нюансы, зависящие от способа получения кода клавиши - по опросу или по прерыванию.
Работает по принципу опроса порта. Генерация кода кнопки происходит при помощи
диодной матрицы. Таким способом мне удалось сократить расход выводов на МК до 4х.
Вот программа опроса порта:
;---------- Опрос клавиши 1й цифры кода (ожидание нажатия одной из кнопок)
keyreq1:
in digit1, PinB
andi digit1, 0b11110001
rcall delay ;---------- Тут я вставил задержку
cpi digit1, 0b00000000
breq keyreq1
;---------- Ожидание отпускания кнопки
rcall beep
keyreq11:
in temp1, PinB
andi temp1, 0b11110001
cpi temp1, 0b00000000
breq keyreq12
rjmp keyreq11
;---------- Проверка на технические команды
keyreq12:
cpi digit1, 0b00000001
breq switch1
cpi digit1, 0b11110000
breq reset2
cpi digit1, 0b01110000
breq new
rjmp keyreq2
;---------- Обработчик задержки
delay:
dec del1
brne delay
ret
;----------
Первые 2 блока программы можно использовать не только для опроса кнопок,
но и для обмена данными между устройствами по параллельному интерфейсу
(вовсю использую для этих целей, причём успешно. Если тактовая частота МК 8МГц,
то можно спокойно гонять данные с частотой 4 МГц [2 Мегабита в секунду)