Лабораторный практикум по курсу "Микропроцессорные устройства". Часть 1, страница 19

            Признак формируется методом сдвига содержимого  аккумулятора (байта  сос­то­я­ния  кла­виа­туры) вправо во флажок С (см.  блок 2). Если флажок (см.  блок 3) установлен (соот­ветс­тву­ю­щая клавиша не нажата), то переход на блок 4, в котором инкре­мен­ти­ру­ет­ся значение скан-кода (содержимое РОН С) и декрементируется число оставшихся  цик­лов  сдвига  (содержимое РОН В).  Начальное значение 8 числа циклов сдвига записы­ва­ет­ся в РОН В в  блоке  1. Этот  РОН можно ис­­пользовать, поскольку его предыдущее со­дер­жимое (код выводимый в РС6...РС4) уже не актуально. Это позволяет не задейст­во­вать  регистровые пары DE и HL.  В блоке 5 проверяется все ли сдвиги сделаны?  Если все,  то выход с флажком С = 1,  что можно использовать  в  качестве  признака не нажа­той клавиши.  Если не все, то переход на новый цикл сдвигов (блок 2). Если кла­виша на­жата,  то следует выход из подпрограммы (см. блок 3) с флажком С = 0, что можно ис­поль­зовать в качестве признака нажатой клавиши. Скан-код при этом содержиться в РОН С.

            Блок 3  алгоритма функционирования программы поддержки клавиатуры (см. рис. П7.2) также нуждается в детализации. Алгоритм отображения нажатой клавиши приве­ден на рис. П7.5.          

           

    Рис. П7.5. Алгоритм отображения нажатой клавиши

            В блоке 3.1 проверяется тип  нажатой  клавиши.  Если  нажата цифровая  клавиша,  то  пе­ременной Address присваивается адрес знакоместа дисплея (Адрес1),  в которое вы­во­дится цифровая информация (см.  блок 3.2).  Если нажата командная клавиша, то пере­мен­ной Address присваивается адрес знакоместа дисплея  (Адрес2), в  которое выводится ко­мандная информация (см.  блок 3.5).  Номера знакомест задаются преподавателем.  Пе­ре­­менная Address может на­хо­дить­ся как в РОН,  так и в памяти. Значения переменной Ad­d­ress для УОУ "Электроника-580" пренадлежат  интервалу  83F8H...83FFH, причем на­чаль­ный  адрес  определяет крайнее левое зна­коместо,  а правый - крайнее правое знако­мес­то.

            Переменная Symbol  представляет собой код визуального образа нажатой клави­ши. Пред­полагается, что коды  визуального  образа всех  клавиш  хранятся в таблице (на­чало ко­то­рой помечено меткой Table) на расстоянии собственного скан-кода от  начала  таб­лицы. Это  означает,  что  первым в этой таблице должен находиться код визуального образа клавиши "0",  вторым - клавиши "1" и т.д.  до последнего кода клавиши "CLR".  В бло­ке 3.3 по скан-коду нажа­той клавиши определяется код ее визуального образа,  кото­рый в блоке 3.4 выводится в соот­ветст­вующее знакоместо для отображения. Каждый бит кода визуального образа связан с сег­мен­тами соответствуюшего индикатора дисплея (зна­коместа) следующим образом:

причем, если бит сброшен, то соответствующий сегмент выключен, в противном случае - включен. Нетрудно видеть, что код 3FH, загруженный  по  одному из адресов 83F8H...83FFH,  отобразит на соответствующем индикаторе символ '0'.

            П7.4. Улучшение  алгоритма  функционирования  программы поддержки клави­ату­ры

            Анализ рис.  П7.3 показывет, что алгоритм полного сканирования клавиатуры мо­жет быть упрощен (программа его реализующая будет иметь меньший объем) за счет устранения трехкратного  вызова подпрограммы  Scan,  если  организовать  циклический  вывод кода РС6...РС4.  В этом случае тело подпрограммы Scan будет входить в тело цик­ла и не будет необ­хо­димости тратить команды на ее вызов.

            Но возникает проблема формирования в теле цикла кодов РС6...РС4, которые  в исходном алгоритме появлялись в виде констант.  Одним из способов решения этой проб­лемы является следующий.  В инициализирующей части цикла нужно написать

        lxi     h, 0efffh.

    А в теле цикла при формировании нового кода РС6...РС4:

        in       2

        ori     70h            ; PC6 = PC5 = PC4 = 1

        ana     h               ; В первом  цикле   PC6 = PC5 = 1, PC4 = 0