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

            В блоке 3 происходит визуализация нажатой клавиши. Как это делается - описано в П7.3.  Но здесь есть одна проблема, связанная с тем, что визуализация командных кла­виш не воз­можна на имеющихся в составе УОУ индикаторах. Эта проблема может быть ре­ше­на вы­во­дом  в другое знакоместо дисплея кодов заменителей,  которые даются пре­по­­давателем.

            П7.3. Детализация алгоритма функционирования программы  поддержки клавиатуры

            В п. П7.2 показано, что подпрограмма, реализующая блок 1 алгоритма поддержки кла­виа­туры (полное сканирование клавиатуры), достаточно сложна и нуждается  в детализации. Ал­горитм ее функ­циони­рова­ния при­ве­ден на рис. П7.3.

                   НАЧАЛО

                                   |

      1.1. В:= 60H; C:= 0

      1.2. Вызвать подпрограмму Scan

                                   |                                                                нет

      1.3. Признак нажатой клавиши не установлен? ------> КОНЕЦ

                    да            |

      1.4. В:= 50H;                                    

      1.5. Вызвать подпрограмму Scan                   

                                   |                                                                нет 

      1.6. Признак нажатой клавиши не установлен? ------> КОНЕЦ

                      да          |

      1.7. В:= 30H;

      1.8. Вызвать подпрограмму Scan

                        |

                     КОНЕЦ 

    Рис. П7.3.  Алгоритм функционирования блока 1 программы поддержки клавиатуры

            Как показывает рис. П7.3, основой алгоритма функционирования блока 1 прог­рам­мы  под­держки  клавиатуры  является  подпрограмма Scan, которая вызывается в блоках 1.2, 1.5, 1.8. Предполагается, что подпрограмма Scan выводит код в РС6...РС4 (он  фор­ми­ру­ется с ис­поль­зо­ва­ни­ем содержимого РОН В МП, поэтому перед вызовом Scan в РОН В за­писывается  соот­ветст­ву­ю­щая константа см.  блоки 1.1,  1.4,  1.7),  вводит через порт А байт состояния  клавиатуры,  ис­поль­зуя  который  формирует  в  РОН  С скан-код  нажа­той клавиши и признак нажатой кла­ви­ши, если такое случится. Для правильного форми­ро­вания скан-кода РОН С обнуляется перед ска­­нированием клавиатуры в блоке 1.1.

            После вызова подпрограммы Scan в блоках 1.3, 1.6 проверяется наличие признака на­жа­той клавиши.  Если этот признак имеется, то следует переход на конец блока,  в про­тивном слу­чае сканирование клавиатуры продолжается.  Если и после выполнения блока 1.8 этот признак не появляется,  то в текущем сеансе сканирования ни одна клавиша не была нажата.

            Ниже приводится часть текста подпрограммы Scan, отражающая формирование  кода вы­­во­димого в порт С.  Дело в том,  что при выводе очередного кода на линии РС6...РС4 ос­таль­ные би­ты  порта  С  не должны изменяться (например, бит РС7, который управляет системой ПДП УОУ, см. рис. П7.1).

Scan:

        in       2               ; Acc:= (PC)

        ani     8fh            ; PC6:= 0, PC5:= 0, PC4:= 0

        ora     b

        out     2               ; Если В = 60Н, то активна РС4

                                   ; Если В = 50Н, то активна РС5

                                   ; Если В = 30Н, то активна РС6

                                   ; Остальные биты PC остались прежними

        in      0                ; Ввод байта состояния клавиатуры

        ...                        ; Формирование признака нажатой клавиши и ее скан-кода

        ret

            Алгоритм формирования  признака нажатой клавиши представлен на рис. П7.4.

       НАЧАЛО

            |

    1. В:= 8

    2. Сдвинуть Асс на один разряд вправо

            |                         нет

    3. Флажок С = 1 ? ---------> КОНЕЦ 

        да            |      

    4. C:= C + 1; B:= B - 1

            |                       нет 

    5. Флажок Z = 1 ? ---------> Переход на п. 2

        да            |

      КОНЕЦ 

    Рис. П7.4.  Алгоритм формирования признака нажатой клавиши и ее скан-кода