Сборник лабораторных работ: Специализированные вычислительные системы. Часть 2. Никищенков И.А. - 29 стр.

UptoLike

Составители: 

- 29 -
ях клавиш этот эффект не имеет особого значения. Рассмотрим от-
дельно каждую из перечисленных частных процедур.
Частная процедура сканирования служит для обнаружения нажа-
той клавиши и последующей ее идентификации. Процедура сводится к
поочередному обнулению каждой из линий сканирования и опросу ли-
ний возврата. В порт 1 выдается байт сканирования (БС), содержа-
щий 0 только в одном бите. Если на пересечении линии сканирова-
ния и линии возврата находится нажатая клавиша, то в соответс-
твующем бите байта возврата (БВ), принимаемого в порт 2, будет
находиться 0. Последовательность байтов сканирования представля-
ет собой код "бегущий нуль"; формирование очередного байта ска-
нирования осуществляется путем сдвига его предыдущего значения.
Направление сдвига определяет последовательность опроса клавиш.
Если при полном цикле сканирования не было обнаружено нажатой
клавиши, то процедура сканирования повторяется сначала.
Оператор "Есть нажатая клавиша?" может быть реализован двумя
способами: наложением маски или сдвигом. Первый способ подробно
рассмотрен в типовой процедуре опроса группы импульсных датчи-
ков. При втором способе клавиши, подключенные к каждой линии
сканирования, анализируются последовательно. Если после анализа
каждой клавиши осуществлять прибавление единицы к счетчику
SCANCODE, то процедуру сканирования можно совместить с процеду-
рой идентификации нажатой клавиши. После выхода из процедуры
SCAN в SCANCODE будет находиться код нажатой клавиши. Кроме то-
го, процедура SCAN осуществляет защиту от одновременного нажатия
нескольких клавиш. Порядок анализа клавиш таков, что при однов-
ременном нажатии клавиша с большим кодом игнорируется:
;R4 - счетчик кода сканирования
SCAN: MOV R4,#0 ;сброс SCANCODE
MOV R7,#5 ;загрузка счетчика сканирования
MOV R6,#11111110B ;загрузка исходного байта
;сканирования
LOOP: MOV A,R6
OUTL P1, ;вывод текущего байта скан.
RL A ;сдвиг байта сканирования
MOV R6,A ;сохранение текущего байта
;сканирования
IN A,P2 ;ввод байта возврата
MOV R5,#4 ;загрузка счетчиков запросов