out 02,R20 настройка линий E0-3 на ввод, а E4-7 – на вывод;
out 0x11,R23 установить режим вывода для порта D;
out 0x12, R23 погасить все светодиоды;
loop1: стартовая метка цикла опроса;
out 03,R18 обнулить бит E4 для опроса клавиш 1-го столбца;
nop установить задержку в один такт;
in R16,01 считать данные из регистра PINE в R16;
out 03,R19 обнулить бит E5 для опроса клавиш 2-го столбца;
nop установить задержку в один такт;
in R17,01 считать данные из регистра PINE в R16;
or R16,R20 установить в 1 биты старшей тетрады R16;
or R17,R20 установить в 1 биты старшей тетрады R17;
swap R17 поменять местами старшую и младшую тетрады в R17;
and R17,R16 объединить информацию о нажатии клавиш в R17;
out 0x12,R17 вывести данные о номерах нажатых клавиш в порт D;
in R26,0 считать данные из регистра ввода порта F;
and R26,R22 обнулить все биты регистра R26, кроме 7-го.
cpi R26,0 сравнить значение в регистре R26 с нулем.
brne loop1 если клавиша не нажата – то выполнить переход для повторения опроса, иначе –
out 0x12,r24 выполнить команду включить все светодиоды;
#endasm завершение кода ассемблерной вставки;
} завершающая операторная скобка программы.
Для установки и обнуления битов регистров ввода/вывода можно использовать команды sbi и cbi соответственно. Однако эти команды необходимо будет использовать попарно, что ухудшает наглядность исходного кода программы.
Рисунок 2.7 – Алгоритм программы считывания данных с клавиатуры
Таблица 2.1 – Варианты индивидуальных заданий
№ п.п. | Задание |
Разработать программу, фиксирующую нажатия клавиш 1, 6 и 12 матричной клавиатуры включением светодиодов 1, 2 и 3 соответственно. Выход из цикла опроса осуществляется при нажатии клавиши F1. | |
Разработать программу, фиксирующую нажатия клавиш 3, 7 и 11 матричной клавиатуры включением светодиодов 5, 6 и 7 соответственно. Выход из цикла опроса осуществляется при нажатии клавиши F2. | |
Разработать программу, фиксирующую нажатия клавиш 4, 7 и 10 матричной клавиатуры включением светодиодов 1, 2 и 3 соответственно. Выход из цикла опроса осуществляется при нажатии клавиши F1. | |
Разработать программу, фиксирующую нажатия клавиш 1, 2 и 3 матричной клавиатуры включением светодиодов 4, 5 и 6 соответственно. Выход из цикла опроса осуществляется при одновременном нажатии клавиш F1+F3. | |
Разработать программу, фиксирующую нажатия клавиш 2, 5 и 9 матричной клавиатуры включением светодиодов 1, 2 и 3 соответственно. Выход из цикла опроса осуществляется при одновременном нажатии клавиш F1+F2. | |
Разработать программу, фиксирующую нажатия клавиш 4, 8 и 11 матричной клавиатуры включением светодиодов 1, 2 и 3 соответственно. Выход из цикла опроса осуществляется при нажатии клавиши F3. | |
Разработать программу, фиксирующую нажатия клавиш 3, 7 и 10 матричной клавиатуры включением светодиодов 1, 2 и 3 соответственно. Выход из цикла опроса осуществляется при нажатии клавиши F1. | |
Разработать программу, фиксирующую нажатия клавиш 5, 6 и 7 матричной клавиатуры включением светодиодов 1, 2 и 3 соответственно. Выход из цикла опроса осуществляется при одновременном нажатии клавиш F2+F3. | |
Разработать программу, фиксирующую нажатия клавиш 1, 6 и 8 матричной клавиатуры включением светодиодов 1, 2 и 3 соответственно. Выход из цикла опроса осуществляется при нажатии клавиши F2. | |
Разработать программу, фиксирующую нажатия клавиш 9, 10 и 11 матричной клавиатуры включением светодиодов 1, 2 и 3 соответственно. Выход из цикла опроса осуществляется при нажатии клавиши F1. |