4.Ввод-вывод в микро-ЭВМ

 

4.1.Основные устройства ввода и вывода

4.2. Методы адресации портов ввода-вывода

4.3.Основные способы ввода-вывода

4.4.Методы передачи параллельных кодов

4.4.1.Прямая передача

4.4.2.Передача с извещением

4.4.3.Передача с квитированием

4.4.4. Передача с извещением и квитированием

4.5. Понятие о внешних и внутренних функциях порта

4.6.Организация портов безусловного ввода-вывода

4.7.Программная поддержка работы портов безусловного ввода-вывода

4.8.Организация порта условного вывода

4.9.Организация порта условного ввода

4.10.Программная поддержка работы портов условного ввода-вывода

4.11.Ввод-вывод по прерываниям

4.12.Вывод на семисегментный дисплей

4.12.1.Особенности управления семисегментным дисплеем

4.12.2.Программная поддержка работы семисегментного дисплея с динамическим управлением

4.12.3.«Бегущая строка»

4.12.4. Преобразование двоичных кодов в семисегментные

4.13.Ввод информации с кнопок и клавиатур

4.13.1.Общие сведения

4.13.2. Идентификация нажатой клавиши

4.13.3. Особенности идентификации нажатой клавиши в матричной клавиатуре

4.13.4.Программная поддержка работы клавиатуры

4.13.5.Ввод и выполнение команд управления

4.14.Простейший монитор

 

4.1.Основные устройства ввода и вывода

 

Можно выделить четыре класса устройств ввода и вывода, широко используемых в микро-ЭВМ, это:

  1. устройства, обеспечивающие взаимодействие пользователя и микро-ЭВМ (клавиатуры, переключатели, светодиодные индикаторы и табло, дисплеи, печатающие и звуковоспроизводящие устройства);

  2. устройства массовой памяти, обеспечивающие хранение, ввод и вывод программ и данных, используемых в микро-ЭВМ (накопители информации на магнитных и оптических дисках);

  3. устройства сопряжения с объектами. Этот класс устройств крайне разнообразен, как разнообразны и сами объекты. Сюда могут входить разного рода регистры, в том числе и релейные, аналого-цифровые и цифро-аналоговые преобразователи, модуляторы и демодуляторы, усилители, фильтры и так далее;

  4. сетевое оборудование, обеспечивающее включение микро-ЭВМ в информационно-вычислительную сеть.

Ни одно из перечисленных устройств не может быть непосредственно подключено к шинам адреса, данных и управления микро-ЭВМ. Здесь необходимы специальные устройства сопряжения, которые называют иначе контроллерами, адаптерами или интерфейсами. С точки зрения микроЭВМ любой контроллер независимо от его сложности, рассматривается как один или несколько портов ввода или вывода со своими конкретными, вполне определенными адресами.

 

4.2. Методы адресации портов ввода-вывода

 

Не следует путать методы адресации портов с методами адресации данных, используемыми в системе команд микропроцессора.

Микро-ЭВМ, построенные на основе учебного микропроцессора, могут использовать два метода адресации портов ввода-вывода — изолированный и отображенный на память.

При изолированном методе адресации порты ввода-вывода располагаются в своем собственном адресном пространстве, не совпадающем с адресным пространством памяти. Здесь действует своя собственная нумерация адресов, которая допускает использование до 256 портов ввода и до 256 портов вывода. Адрес порта N представляет собой двухразрядное шестнадцатеричное число (байтовое двоичное) в диапазоне 00Н…0FFH. Управление записью и чтением со стороны процессора осуществляется с помощью сигналов управления I/OW – «запись в порт вывода» и I/OR – «чтение из порта ввода». Существенно, что запись и чтение памяти управляются при изолированной адресации другой парой сигналов (MEMW и MEMR). Связь портов с программой осуществляется двумя командами ввода-вывода IN N и OUT N.

При адресации портов, отображенной на память, порты рассматриваются как некоторые ячейки памяти, имеющие свои адреса в адресном пространстве памяти. Такая адресация позволяет:

  1. упростить системный контроллер т.к. отпадает необходимость формирования сигналов I/OW и I/OR;

  2. использовать при обращении к портам все множество команд, обеспечивающих взаимодействие с памятью;

  3. Иметь практически любое нужное количество портов. Это количество ограничено только размером адресного пространства памяти микропроцессора.

Перечисленные достоинства покупаются усложнением дешифратора выбора портов и сокращением адресного пространства отводимого под собственно память.

Если микро-ЭВМ не требует большой памяти и использует лишь несколько портов ввода-вывода удобно организовать ввод-вывод отображенный на память с помощью так называемой линейной выборки. При такой выборке одному порту соответствует большая группа адресов, имеющих единицу в одном из старших разрядов адреса. Поясним принцип линейной выборки схемой цепей выбора памяти и портов простой микро-ЭВМ, имеющей 4 порта и 4 К памяти (рис.4.1).

Рис.4.1.Схема цепей выбора памяти и портов, использующая линейную выборку

 

Таблица 4.1 Карта памяти простой микро-ЭВМ

Адреса

Назначение

0000H…0FFFH

Память

1000H…1FFFH

Порт 4

2000H…2FFFH

Порт 3

3000H…3FFFH

Запрещены

4000H…4FFFH

Порт 2

5000H…7FFFH

Запрещены

8000H…8FFFH

Порт 1

9000H…0FFFFH

Запрещены

 

Логическая единица, появившаяся в одном из старших разрядов шины адреса (ША12…ША15), выбирает здесь один из портов, отключая одновременно модуль памяти. Карта памяти рассматриваемой микро-ЭВМ представлена в табл.4.1. Адреса, отмеченные в карте памяти как запрещенные, осуществляют одновременную выборку нескольких портов, что, естественно, недопустимо.

 

4.3.Основные способы ввода-вывода

 

Основные способы ввода-вывода удобно рассматривать, используя общую функциональную схему ЭВМ (рис.4.1). Схема иллюстрирует три принципиальных возможности ввода-вывода:

  1. путем обмена кодами непосредственно между памятью и устройством ввода-вывода. Этот вид обмена называется прямым доступом к памяти (ПДП). ПДП инициирует устройство ввода-вывода. Центральный процессор в ПДП не участвует. В микро-ЭВМ он просто отключается от общей магистрали соответствующим запросом режима ПДП. Режим ПДП обеспечивает наибольшую скорость обмена информацией. В малых микропроцессорных системах он используется редко;

  2. путем обмена кодами между центральным процессором и устройством ввода-вывода по командам, заложенным пользователем в основную выполняемую программу. Такой обмен, происходящий по инициативе и под управлением основной программы, называют программно-управляемым вводом-выводом. Этот режим мало эффективен и ведет к большим потерям машинного времени из-за низкой скорости работы большинства устройств ввода-вывода. Тем не менее, используется очень широко, особенно в малых системах;

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

Рис.4.2.Основные способы ввода-вывода

 

4.4.Методы передачи параллельных кодов

 

Рассмотрим простейшую систему передачи параллельного кода, состоящую из приемника и передатчика, соединенных шиной данных. В такой системе могут использоваться следующие методы передачи кодов:

  1. прямая передача;

  2. передача с извещением;

  3. передача с квитированием;

  4. передача с извещением и квитированием.

 

4.4.1.Прямая передача

 

При прямой передаче, передаваемый параллельный код не сопровождается ни какими дополнительными сигналами. Функциональная схема и временная диаграмма прямой передачи приведены на рис.4.3.

Рис.4.3.Функциональная схема и временная диаграмма прямой передачи

 

При прямой передаче возникают следующие технические проблемы:

  1. приемник должен быть построен таким образом, чтобы он «понимал», что на шину выставлен новый параллельный код;

  2. приемник должен быть отстроен от влияния неодновременного протекания переходных процессов в разных разрядах шины (это явление называют перекосом информации);

  3. быстродействие приемника должно быть выше быстродействия передатчика.

Перечисленные проблемы ограничивают сферу использования прямой передачи. В микро-ЭВМ она может быть применена для вывода информации на светодиодное или ламповые индикаторы, для управления выходными реле, для ввода информации с переключателей или клавиатур.

 

4.4.2.Передача с извещением

 

Передача с извещением предполагает генерацию передатчиком дополнительного известительного сигнала, после того как на шину будет выставлен новый код и переходные процессы в разрядах шины заведомо закончатся. Использование известительного сигнала позволяет разрешить первые две технические проблемы прямой передачи. Передачу с извещением называют синхронной, а известительный сигнал STB стробом. Строб разрешает приемнику считать с шины данных очередной код. Функциональна схема и временные диаграммы передачи кода с извещением представлены на рис.4.4.

Рис.4.4.Функциональная схема и временные диаграммы синхронной передачи кода

 

Стрелки на временных диаграммах показывают очередность формирования фронтов передаваемого кода и строб-сигнала.

Передача с извещением широко используется внутри вычислительных устройств, там, где есть уверенность, что быстродействие приемника выше быстродействия передатчика.

 

4.4.3.Передача с квитированием

 

Передача с квитированием предполагает генерацию приемником дополнительного сигнала АСК, подтверждающего прием, – своеобразной квитанции для передатчика (отсюда и слово — квитирование). Передатчик может выдать на шину следующий код, лишь получив «квитанцию» в приеме предыдущего. Функциональная схема и временная диаграмма передачи с квитированием приведены на рис.4.5.

Рис.4.5.Функциональная схема и временные диаграммы передачи кода с квитированием

 

Полное время передачи кода складывается здесь из задержек как передатчика, так и приемника. Это позволяет снять ограничение на соотношение быстродействий приемника и передатчика, характерные для прямой и синхронной передачи. Однако остальные проблемы прямой передачи не находят здесь удовлетворительного аппаратного решения.

 

4.4.4. Передача с извещением и квитированием

 

Передачу с извещением и квитированием часто называют асинхронной передачей. Метод соединяет достоинства синхронной передачи и передачи с квитированием. Функциональная схема асинхронной передачи кода изображена на рис.4.6.

Рис.4.6.Функциональная схема асинхронной передачи кода

 

Следует обратить внимание на различие маркировок выводов передатчика и приемника, работающих с одним и тем же сигналом.

Выходные выводы обозначены следующим образом:

Понятно, что для соответствующих сигналов функциональной схемы (рис.4.6) имеют место равенства OBF = STB и IBF = ACK.

Существует несколько разновидностей асинхронной связи, отличающихся порядком взаимодействия приемника и передатчика друг с другом. Такой порядок называют иногда протоколом.

Рассмотрим временные диаграммы одного из наиболее распространенных протоколов (рис.4.7). Характерные моменты времени обозначены на них точками 1…5.

Рис.4.7.Временные диаграммы асинхронной передачи кодов

 

В точках 1…5 последовательно имеют место следующие действия:

  1. данные выставляются на шину;

  2. формируется передний фронт известительного сигнала OBF;.

  3. формируется передний фронт квитирующего сигнала IBF;.

  4. сбрасывается сигнал OBF, данные с шины переписываются в буфер приемника;

  5. после обработки полученного кода приемником сбрасывается сигнал IBF. Приемник готов принять новый код.

 

4.5. Понятие о внешних и внутренних функциях порта

 

Порт ввода-вывода при программно-управляемом обмене представляет собой лишь промежуточное звено в системе передачи кода процессор — устройство ввода-вывода. В этой системе можно выделить два участка обмена внутренний (между процессором и портом) и внешний (между портом и внешним устройством). Соответственно, можно говорить о различных функциях, выполняемых портом на этих участках обмена. Так внутренняя функция порта вывода — приемник, а внешняя – передатчик. И, наоборот, внутренняя функция порта ввода – передатчик, а внешняя — приемник. Различия внутренней и внешней функций портов иллюстрирует рис.4.8.

Рис.4.8.Внешние и внутренние функции портов

 

Структура как внешнего, так и внутреннего участка обмена единичного порта определяется в основном правилами построения магистрали микроЭВМ и принятого на ней протокола обмена. Поэтому возможное число вариантов портов оказывается меньшим, чем число возможных способов передачи параллельных кодов. Так в микро-ЭВМ на основе учебного микропроцессора можно использовать всего два варианта:

  1. порт безусловного ввода-вывода;

  2. порт условного ввода-вывода.

Наличие двух участков обмена предполагает наличие различных (в общем случае) сигналов извещения и квитирования на каждом из таких участков. Чтобы избежать путаницы будем обозначать сигналы управления, соответствующие внутреннему участку обмена в круглых скобках: (OBF), (IBF), (STB), (ASK).

 

4.6.Организация портов безусловного ввода-вывода

 

Порты безусловного ввода-вывода строятся по функциональным схемам, показанным на рис.4.8.

Рис.4.8.Функциональные схемы портов безусловного ввода-вывода

 

Внимательный анализ этих схем показывает что:

  1. на внешнем участке обмена порты безусловного ввода – вывода являются одновременно портами прямого ввода – вывода, так как не используют каких – либо сигналов сопровождения кода на этом участке;

  2. безусловный порт вывода поддерживает на внутреннем участке обмена синхронный обмен;

  3. Безусловный порт ввода поддерживает на внутреннем участке обмена обмен с квитированием.

Поэтому порты безусловного ввода-вывода вносят в микро-ЭВМ все проблемы названных видов обмена. Пути решения этих проблем наиболее очевидны для порта вывода. Здесь достаточно обеспечить нужное соотношение быстродействий приемника и передатчика. Труднее решаются проблемы порта ввода. Здесь приходится компенсировать отсутствие известительного сигнала программным управлением приемом, повышающим до необходимого уровня «понятливость» приемника.

Следует подчеркнуть, что отдельно взятый порт безусловного ввода-вывода обеспечивает только прямую передачу кодов между портом и внешним устройством. Однако несколько таких портов могут, при соответствующем программном обеспечении, реализовать и любой другой способ обмена.

 

4.7.Программная поддержка работы портов безусловного ввода-вывода

 

Все технические проблемы портов безусловного вывода решаются на аппаратном уровне. Поэтому программа поддержки работы такого порта оказывается простейшей. Ее блок-схема (рис.4.9) содержит всего один блок.

Рис.4.9.Блок-схема программной поддержки работы порта безусловного вывода

 

Сложнее оказывается запрограммировать поддержку порта ввода. Так для того, чтобы процессор-приемник смог достоверно установить факт обновления входного кода, в программе организуют частый периодический опрос порта-передатчика и сравнение друг с другом результатов двух последовательных опросов. Если эти два результата неодинаковы – значит имело место обновление входного кода. Отстройка от перекоса информации может быть выполнена повторным вводом нового кода через время, заведомо большее времени переходных процессов в разрядах шины. Это время может быть отсчитано с помощью программной задержки. Полученная в результате блок-схема программной поддержки порта безусловного ввода приведена на рис.4.10.

Рис.4.10.Блок-схема программной поддержки работы порта безусловного ввода

 

В ряде случаев программная поддержка работы порта безусловного ввода может быть уменьшена. Так, если перекос информации не опасен или невозможен (например при вводе одноразрядного кода) из программы следует удалить блоки 4 и 5, заменив их блоком, представленном на рис.4.11.

Рис.4.11.Замена блоков 4 и 5 при невозможности перекоса информации

 

В простейшем случае, при сохранении обоих недостатков ввода с квитированием в программе может остаться лишь блок 5.

 

4.8.Организация порта условного вывода

 

Порт условного вывода обеспечивает асинхронный обмен кодами как с процессором, так и с внешним устройством. Основу такого порта составляет порт безусловного вывода параллельного кода, дополненный однобитным портом безусловного ввода сигнала управления . Функциональная схема порта условного вывода может иметь вид, представленный на рис.4.12.

Рис.4.12.Функциональная схема порта условного вывода

 

Схему образует основной порт RG, дополнительный порт BF, логика аппаратной поддержки протокола (триггеры Т1 и Т2), а также формирователи сигналов записи в основной порт и чтения из дополнительного порта. На схеме не показаны цепи начальной установки в нуль триггеров Т1 и Т2.

Формирователи сигналов записи и чтения получают сигналы I/OW I и /OR с шины управления микро-ЭВМ, а сигналы — «выбор основного порта» и — «выбор дополнительного порта» – с дешифратора выбора портов. Асинхронный протокол на внешнем участке обмена поддерживается здесь аппаратно с помощью триггера Т2. Асинхронный протокол на внутреннем участке обмена поддерживается как аппаратно, так и программно. Аппаратную поддержку осуществляет триггер Т1, формирующий квитирующий сигнал внутреннего участка обмена (IBF). Программная поддержка заключается в соответствующем управлении основным и дополнительным портами. При этом квитирующий сигнал внутреннего участка обмена (IBF) передается в микропроцессор по линии D0 шины данных через дополнительный порт прямого ввода. Временные диаграммы известительных и квитирующих сигналов порта изображены на рис.4.13.

Рис.4.13.Временные диаграммы работы порта условного вывода

 

На этом рисунке буквами отмечены:

A – момент переписи выводимого кода с шины данных в основной порт;

В – момент переписи выводимого кода с шины внешнего устройства в регистр памяти этого устройства.

Для работы порта характерны:

  1. фиксированная длительность импульса (STB) t(STB). Эта длительность равна длительности сигнала I/OW и жестко задается микропроцессором;

  2. жесткая связь очередности формирования стробирующих сигналов (STB) и OBF. Сигнал OBF формируется по заднему фронту сигнала (STB). В этом случае обеспечивается минимально возможное время вывода кода;

  3. жесткая связь задних фронтов квитирующих сигналов (IBF) и ACK на обоих участках обмена. В этих условиях вывод в порт последующего кода оказывается невозможным, пока внешнее устройство полностью не завершило прием и обработку предыдущего кода.

Инверсию сигнала (IBF) часто рассматривают как признак готовности порта условного вывода к обмену с микропроцессором – RDY. Он принимает истинное значение только после полного завершения процессов приема и обработки выведенного кода внешним устройством.

 

4.9.Организация порта условного ввода

 

Порт условного ввода обеспечивает асинхронный обмен кодами как с внешним устройством, так и с процессором. Основу такого порта составляет порт безусловного ввода параллельного кода, дополненный однобитным портом безусловного ввода сигнала управления (OBF = RDY). Функциональная схема порта условного ввода может иметь вид, представленный на рис.4.14.

Рис.4.14.Функциональная схема порта условного ввода

 

Схему образует основной порт BF1, дополнительный порт BF2, регистр памяти RG, логика аппаратной поддержки протокола (триггеры Т1 и Т2), а также формирователи сигналов чтения из основного и дополнительного портов. На схеме не показаны цепи начальной установки в нуль триггеров Т1 и Т2. Формирователи сигналов чтения получают сигнал I/OR с шины управления микро–ЭВМ, а также сигналы – «выбор основного порта» и – «выбор дополнительного порта» с дешифратора выбора портов. Асинхронный протокол на внешнем участке обмена поддерживается здесь аппаратно с помощью триггера Т1. Асинхронный протокол на внутреннем участке обмена поддерживается как аппаратно, так и программно. Аппаратную поддержку осуществляет триггер Т2, формирующий известительный сигнал внутреннего участка обмена (OBF). Программная поддержка заключается в соответствующем управлении основным и дополнительными портами. При этом известительный сигнал внутреннего участка обмена (OBF) передается в микропроцессор по линии D0 шины данных через дополнительный порт прямого ввода. Временные диаграммы известительных и квитирующих сигналов порта изображены на рис.4.15.

Рис.4.15.Временные диаграммы работы порта условного ввода

На этом рисунке буквами отмечены:

A – момент переписи вводимого кода с шины данных внешнего устройства в регистр RG;

В – момент переписи вводимого кода из регистра RG в буферный регистр данных микропроцессора.

Для работы порта характерны:

  1. фиксированная длительность импульса (ACK) t(ACK). Эта длительность равна длительности сигнала I/OR и жестко задается микропроцессором;

  2. жесткая связь очередности формирования стробирующих сигналов STB и (OBF). Сигнал (OBF) формируется по заднему фронту сигнала STB;

  3. жесткая связь задних фронтов квитирующих сигналов IBF и (ACK) на обоих участках обмена. В этих условиях прием портом последующего кода от внешнего устройства оказывается невозможен, пока микропроцессор полностью не завершил прием предыдущего кода.

Сигнал (OBF) часто рассматривают как признак готовности порта условного ввода к обмену с микропроцессором – RDY. Он принимает истинное значение в момент переписи кода с шины внешнего устройства в регистр RG.

 

4.10.Программная поддержка работы портов условного ввода-вывода

 

Программная поддержка работы портов условного ввода-вывода состоит из двух фрагментов. Первый – об6еспечивает циклический опрос дополнительного порта, работающего в режиме прямого ввода. Такой опрос позволяет надежно фиксировать момент готовности порта к обмену. Защита от перекоса информации при прямом вводе здесь не требуется, так как вводится и далее проверяется всего один бит (в нашем случае D0). Второй фрагмент осуществляет вывод кода в основной порт или ввод кода из этого порта. Блок-схема программной поддержки работы порта условного ввода-вывода приведена на рис.4.16.

Рис.4.16.Блок-схема программной поддержки работы порта условного ввода-вывода

 

4.11.Ввод-вывод по прерываниям

 

Основным недостатком программно-управляемого ввода-вывода является нерациональное использование машинного времени микропроцессора. Оно, в основном, тратится на циклы ожидания изменений во входном коде при поддержке портов безусловного ввода или на циклы ожидания готовности порта при поддержке портов условного ввода-вывода. Число циклов ожидания может быть очень большим из-за низкой скорости работы большинства внешних устройств.

Полностью исключить циклы ожидания и связанные с ними потери машинного времени позволяет ввод-вывод по прерываниям.

Порты, использующие этот вид обмена, не имеют средств для пересылки в микропроцессор сигнала готовности по шине данных. На основе сигналов готовности они формируют запросы на обслуживание IRQ.

Функциональная схема включения таких портов в микропроцессорную систему с учебным микропроцессором представлена на рис.4.17. Эта схема реализует так называемую одноуровневую векторную систему прерываний. Она включает в себя порты 1…N, реализующие асинхронный ввод-вывод на внешнем участке обмена, элемент «ИЛИ», приоритетный шифратор и порт ввода вектора прерывания.

Пусть в исходном состоянии все запросы на обслуживания IRQ1…IRQN равны нулю, то есть отсутствуют. Пусть далее появляется запрос от порта ввода No1 IRQ = 1. Этот запрос через элемент «ИЛИ» передается на вход запроса прерываний INT процессора. Процессор, реагируя на этот запрос, выполняет следующие действия:

1. проверяет, разрешены ли прерывания. Если они запрещены, никаких других действий по обслуживанию прерывания не производится. В микро-ЭВМ продолжается выполнение основной программы;

2. запрещает прерывания;

3. завершает выполнение текущей команды;

4. переходит в режим приема кода операции с шины данных;

Рис.4.17.Функциональная схема одноуровневой векторной системы прерываний

 

5. блокирует с помощью системного контроллера выдачу сигнала MEMR шины управления и формирует на отдельной линии этой шины сигнал INTA – «подтвеждение прерывания»;

6. принимает с шины данных код команды рестарта RST 1;

7. выполняет эту команду, то есть записывает в стек адрес следующей по порядку команды основной программы и передает управление по адресу 0008H, с которого должна начинаться программа ввода из порта 1;

8. выполняет всю программу ввода и завершающую ее команду RET. По этой команде из стека восстанавливается содержимое счетчика команд, которое было там до прерывания, то есть управление передается очередной команде основной программы.

Каждый из портов этой системы имеет свою собственную программу обслуживания порта, вызываемую одной из команд вида RST X. Конкретный вариант команды рестарта называют вектором соответствующего прерывания. Вектор формируется приоритетным шифратором из запросов IRQ1… IRQN и выставляется на шину данных по сигналу . Использование приоритетного шифратора позволяет обслуживать одновременно поступившие запросы от разных портов в соответствии с заранее определенной системой приоритетов.

Программа обслуживания прерывания в одноуровневой векторной системе обычно строится по типовой блок-схеме (рис.4.18).

При практическом использовании прерываний следует иметь в виду особенность исполнения команды разрешения прерываний EI. Она исполняется не в момент получения ее микропроцессором, а лишь после выполнения следующей команды. В нашем случае это означает, что прерывания вновь будут разрешены лишь после возврата в основную программу.

В одноуровневой системе все запросы на прерывания практически равнозначны. Приоритет сказывается лишь при одновременности поступления запросов.

Иногда удобнее иметь многоуровневую систему прерываний, в которой запросы с более высоким приоритетом могут прерывать работу программ обработки прерываний, имеющих низшие приоритеты. Векторную многоуровневую систему прерываний реализуют с помощью специализированной БИС – контроллера приоритетных прерываний.

Следует отметить, что ввод-вывод по прерываниям, в конечном итоге, также обеспечивает асинхронную передачу кодов на внутреннем участке обмена. Роль недостающего сигнала асинхронного протокола (STB) или (ACK) здесь выполняет сформированный системой вектор прерывания.

Рис.4.18.Типовая блок-схема программы обслуживания прерывания

 

4.12.Вывод на семисегментный дисплей

 

4.12.1.Особенности управления семисегментным дисплеем

 

Для вывода информации микро-ЭВМ часто используют многоразрядный дисплей на семисегментных светодиодных цифровых индикаторах. Имеются две схемотехнические разновидности таких индикаторов — с общим анодом и с общим катодом. Принципиальные схемы этих индикаторов приведены на рис.4.20. В микро-ЭВМ обычно используют индикаторы с общим анодом. Этот индикатор может управляться портом прямого вывода по схеме (рис.4.21).

Рис.4.20.Принципиальные схемы семисегментных индикаторов

Рис.4.21.Подключение семисегментного индикатора к порту прямого вывода

 

Общий анод индикатора (вывод АН) подключается к плюсу источника питания (обычно +5В), а катоды светодиодов А…Н к выходам инверторов, часто имеющих открытый коллектор. Инверторы, в свою очередь, управляются портом вывода кода индицируемого символа POKIS.

Светодиод зажигается при потенциале логического нуля на выходе инвертора, то есть в том случае, когда в соответствующий разряд порта выведен единичный бит. Резисторы R ограничивают на допустимом уровне токи через светодиоды индикатора и выходные транзисторы инверторов. Линейка инверторов может быть исключена из схемы, если порт POKIS имеет достаточно мощные инверсные выходы. Может использоваться и порт с прямыми выходами, но тогда в него следует выводить не код индицируемого символа KIS, а его инверсию .

Схему многоразрядного дисплея можно получить, просто повторив нужное число раз схему управления единичным индикатором. Такая схема (ее называют схемой со статическим управлением) должна содержать столько портов вывода, какова разрядность дисплея. Поэтому на практике ее используют редко. Как правило, используется схема динамического или мультиплексного управления многоразрядным дисплеем. Типовой вариант такой схемы для шестиразрядного дисплея представлен на рис.4.22.

Рис.4.22.Шестиразрядный семисегментный дисплей с динамическим управлением

 

Схему образуют шесть идентичных вертикальных рядов, каждый из которых содержит по семисегментному индикатору Н0…Н5 и транзисторному ключу VT0…VT5. Ряды пронумерованы слева направо цифрами от 0 до 5. Схемой управляют 2 порта прямого вывода POKWR и POKIS.

В порт POKWR выводится код выбора ряда KWR. Единичный бит, выведенный в этот порт, включает, активирует соответствующий ряд схемы. В порт POKIS выводится код индицируемого символа KIS. Этот символ будет высвечен на индикаторе активного ряда.

Типовой режим работы дисплея поясняют следующие временные диаграммы (рис.4.23).

Рис.4.23.Временные диаграммы работы семисегментного дисплея с динамическим управлением

 

Из диаграмм видно, что полный цикл работы дисплея складывается из шести последовательных интервалов. На каждом из них кодом KWR выбираются, активируются, включается только один индикатор, а остальные погашены. Имя активного индикатора на каждом из интервалов указано на диаграмме кода KIS. Неодновременность работы индикаторов дисплея оказывается заметной пользователю только при достаточно большом времени цикла. Если же это время меньше 1/30…1/50 сек, у пользователя создается полная иллюзия их одновременной работы.

 

4.12.2.Программная поддержка работы семисегментного дисплея с динамическим управлением

 

Один полный цикл управления семисегментным дисплеем формируют с помощью специальной подпрограммы. Блок-схема и текст этой подпрограммы представлены соответственно на рис.4.24 и рис.4.25. Для непрерывной индикации строки символов, занесенных в ячейки S0…S5 достаточно использовать подпрограмму IND в теле бесконечного цикла. Соответствующий фрагмент программы представлен на рис.4.26.

Рис.4.24.Блок-схема подпрограммы IND n – номер ряда на схеме дисплея с динамическим управлением

 

4.12.3.«Бегущая строка»

 

Иногда число знакомест дисплея оказывается меньше числа символов, в выводимой строке. В этих случаях информация может выводиться на дисплей в режиме «бегущей строки». Блок-схема программы, обеспечивающей этот режим вывода приведена на рис.4.27.

Программа использует буфер для семисегментных кодов, выводимых на дисплей, имеющий структуру, представленную на рис.4.28. Символы выводимой строки записываются в N последовательных ячеек буфера, начиная с ячейки S0, после чего управление передается на метку START0. Первые NN циклов индикации на дисплее индицируются шесть левых символов строки. Далее выполняется циклическая пересылка (поворот информации в буфере). При повороте информация пересылается таким образом, чтобы код из ячейки S1 оказался в ячейке S0, из S2 – в S1 и так далее. Код из ячейки S0 пересылается ячейку буфера с самым старшим адресом SH. Эту пересылку удобнее выполнить в два этапа — сначала переслать код из S0 в рабочую ячейку S00 и лишь затем, когда будет переслан код из последней ячейки буфера SH, занести в эту ячейку код из ячейки S00. Поворот буфера иллюстрирует диаграмма (рис.4.29). На ней жирным шрифтом выделены

 

     

; ПОДПРОГРАММА IND

POKWR

EQU

; АДРЕС POKWP

POKIS

EQU

; АДРЕС POKIS

KWRS

EQU

00100000B

; KWR [5]

IND:

MVI

B, KWR5

; ЗАДАТЬ KWR [n=5]

 

LXI

H, S5

; ЗАДАТЬ АДРЕС KIS [n=5]

M0:

MOV

A, B

; ВЫВЕСТИ KWR [N] В

 

OUT

POKWR

; ПОРТ POKWR

MOV

A, M

 

; ВЫВЕСТИ KIS [n] В

OUT

POKIS

 

; ПОРТ POKIS

 

CALL

DELAY

; ПРОГРАММНАЯ ЗАДЕРЖКА

 

MOV

A, B

; НАЙТИ KWR [n = n - 1]

 

RRC

 

;

 

MOV

B, A

;

 

DCX

H

; НАЙТИ АДРЕС KIS [n = n - 1]

 

JNC

M0

; ВСЕ РЯДЫ ? НЕТ, ПОВТОРИТЬ

 

RET

 

; ИНАЧЕ ВЫЙТИ В ОСНОВНУЮ

     

; ПРОГРАММУ

DELAY:

 

; ПРОГРАММНАЯ ЗАДЕРЖКА

S0:

DS

1

; БУФЕР ИЗ ШЕСТИ ЯЧЕЕК

     

; СЕМИСЕГМЕНТНОЙ

     

; ИНДИКАЦИИ

S1:

DS

1

;

S2:

DS

1

;

S3:

DS

1

;

S4:

DS

1

;

S5:

DS

1

;

 

Рис.4.25.Текст подпрограммы IND

 

 

MM:

CALL

IND

 

JMP

MM

 

 

 

Рис.4.26.Фрагмент программы, обеспечивающей непрерывную индикацию строки символов

 

Рис.4.27.Блок-схема программы, обеспечивающий вывод в режиме «бегущей строки»

 

Рис.4.28.Структура буфера программы, обеспечивающий вывод в режиме бегущей строки

 

символы, семисегментные коды которых находятся в буфере. Числа около стрелок задают порядок пересылки кодов в процессе поворота. После поворота буфера вновь выполняется NN циклов индикации. Легко видеть, что при этом символы на дисплее будут последовательно смещаться влево и строка на нем «побежит». Скорость ее движения определяется числом циклов NN циклов индикации. Чем больше NN, тем медленнее бежит строка.

Рис.4.29.Поворот буфера

 

Для поворота буфера имеющего N ячеек можно воспользоваться фрагментом программы, представленным на рис.4.30.

 

     

; ПОВОРОТ БУФЕРА

N

EQU

; ЧИСЛО СИМВОЛОВ В СТРОКЕ

 

LXI

H, S0

; ЗАНЕСТИ В ПАРУ HL НАЧ.

     

; АДРЕС ИСТОЧНИКА КОДА

 

LXI

D, S00

; ЗАНЕСТИ В ПАРУ DE НАЧ.

     

; АДРЕС ПРИЕМНИКА КОДА

 

MVI

B, N

; ВЫПОЛНИТЬ N ЦИКЛОВ

M0:

MOV

A, M

; ПЕРЕСЛАТЬ КОД ИЗ

 

STAX

D

; ИСТОЧНИКА В ПРИЕМНИК

 

INX

H

; МОДИФИЦИРОВАТЬ АДРЕСА

 

INX

D

; ИСТОЧНИКА И ПРИЕМНИКА

 

DCR

B

; ВСЕ ЦИКЛЫ?

 

JNZP

M0

; НЕТ, ПОВТОРИТЬ, ИНАЧЕ

 

LDA

S00

; ПЕРЕСЛАТЬ КОД

 

STA

SH

; ИЗ S00 В SH

 

   

 

Рис.4.30.Фрагмент программы, обеспечиваюший поворот буфера

 

4.12.4. Преобразование двоичных кодов в семисегментные

 

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

Преобразование иллюстрирует подпрограмма BIS7 (рис.4.31), которая преобразует в семисегментный код младшую тетраду байта, находящегося в аккумуляторе.

 

     

; ПОДПРОГРАММА BIS7

MASK

EQU

0FH

; МАСКА МЛАДШЕЙ ТЕТРАДЫ

BIS7:

ANI

MASK

; ВЫДЕЛИТЬ МЛ. ТЕТРАДУ

     

; ВХОДНОГО КОДА

 

MVI

H, 0

; ОЧИСТИТЬ РЕГИСТР H

 

MOV

L, A

; ЗАГРУЗИТЬ МЛ. ТЕТРАДУ ВХ

     

; КОДА В РЕГИСТР L

 

LXI

D, TAB7

; ЗАГРУЗИТЬ НАЧ. АДР.ТАБЛИЦЫ

     

; СЕМИСЕГМЕНТНЫХ КОДОВ

     

; В ПАРУ DE

 

DAD

D

; ВЫЧИСЛИТЬ АДРЕС ВЫХ. КОДА

 

MOV

A, M

; ЗАГРУЗИТЬ ВЫХ. КОД В РЕГ. А

 

RET

 

; ВОЗВРАТИТЬСЯ В ОСНОВНУЮ

     

; ПРОГРАММУ

TAB7:

DB

…, …, …, …, …, …, …, …

; ТАБЛИЦА СЕМИСЕГМЕНТНЫХ

 

DB

…, …, …, …, …, …, …, …

; КОДОВ ЦИФР 0…F

 

Рис.4.31. Текст подпрограммы BIS7

 

Начальный (базовый) адрес таблицы TAB7 складывается в подпрограмме с исходным кодом 0…F. При этом в регистровой паре HL получается адрес соответствующего семисегментного кода. Этот код извлекается из таблицы TAB7 командой MOV    A, M и помещается в аккумулятор.

4.13.Ввод информации с кнопок и клавиатур

4.13.1.Общие сведения

Ввод информации с кнопок и клавиатуры, подключенных к микро-ЭВМ обычно сопряжен с решением следующих специфических проблем:

  1. защитой от дребезга контактов кнопок или клавиш;

  2. идентификацией нажатой клавиши;

  3. обеспечением нужного порядка срабатывания клавиш (при нажатии или при отпускании).

Защита от дребезга может быть обеспечена либо на аппаратном, либо на программном уровне.

Для идентификации клавиш обычно требуется комбинация определенных аппаратных и программных средств.

Нужный порядок срабатывания обычно обеспечивается соответствующим построением программы поддержки работы клавиатуры.

 

4.13.2. Идентификация нажатой клавиши

 

Проблема идентификации нажатой клавиши обычно решается в микро-ЭВМ в два этапа. На первом этапе обеспечивается генерация клавиатурой при нажатии каждой из клавиш уникального двоичного вода. Этот этап обеспечивается либо только аппаратными средствами, либо комбинацией аппаратных и программных средств. Второй этап всегда обеспечивается программными средствами. На этом этапе код нажатой клавиши вводится в микро-ЭВМ и сравнивается с заранее занесенной в память таблицей допустимых кодов. Результатом такого сравнения и является идентификация, опознание нажатой клавиши.

При малом количестве клавиш первый этап идентификации решается чисто аппаратно. Для приема сигнала с каждой из клавиш здесь выделяют отдельные разряды, биты в порте прямого ввода. Пример такого решения иллюстрирует схема клавиатуры, представленная на рис.4.32. Комбинация нажатых клавиш S0…S7 задает здесь уникальный код нажатой клавиши KNK1, который далее вводится в микро-ЭВМ через порт прямого ввода PIKNK1. Если количество клавиш больше числа разрядов порта ввода, можно включить между клавиатурой и портом шифратор с соответствующим количеством входов. При использовании шифратора, восьмиразрядный порт ввода может вводить информацию максимум от 255 клавиш.

Второй этап идентификации нажатой клавиши обеспечивается подпрограммой IDEN2, которая:

  1. вводит в микро-ЭВМ код нажатой клавиши KNK1;

  2. проверяет, содержится ли этот код в таблице допустимых кодов;

  3. устанавливает признак недопустимого ввода Z = 1, если эта проверка не успешна. Некорректный ввод возможен, например, при одновременном нажатии нескольких клавиш;

  4. Устанавливает признак управляющей клавиши С = 1, если нажата управляющая клавиша;

  5. преобразует код нажатой клавиши KNK1 в другой — KNK2, более удобный для последующего использования.

Рис.4.32.Подключение клавиатуры к микро-ЭВМ

 

Для цифровых клавиш, коды KNK2 должны соответствовать их маркировке. Для управляющих клавиш удобно использовать в качестве кодов KNK2 последовательность четных шестнадцатеричных чисел, начинающуюся с 00Н. Код KNK2 получается в подпрограмме из промежуточного кода CKNK2. Младшая тетрада кода CKNK2 есть код KNK2 нажатой клавиши. Старшая тетрада равна 0H для цифровых и 8H для управляющих клавиш. Такая структура кода CKNK2 позволяет одновременно использовать его как для формирования KNK2, так и признака управляющей клавиши.

В случае, если на рис.4.32 клавиши S0…S3 — цифровые, а S4…S7 — управляющие, подпрограмма IDEN2 может иметь вид, представленный на рис.4.33.

Основу подпрограммы составляет цикл, в котором последовательно устанавливаются адреса всех восьми строк таблиц ТАВ1 (KNK1) и ТАВ2 (CKNK2) и идет сравнение кода из таблицы ТАВ1 с кодом нажатой клавиши. Если введенного кода нет в таблице ТАВ1, то есть имел место некорректный ввод, происходит выход из подпрограммы с установленным некорректного ввода Z=1. Этот признак устанавливается командой DCR B при завершении цикла. Если же введенный код опознан в одном из кодов ТАВ1, следует выход из цикла к метке М1. Регистровая пара DE содержит в этом случае адрес кода CKNK2 в таблице ТАВ2. Далее этот код извлекается из ТАВ2 командой LDAX D.

     

; ПОДПРОГРАММА IDEN2

PIKNK1

EQU

; ПОРТ ВВОДА PIKNK1

LTAB

EQU

08H

; ДЛИНА ТАБЛИЦЫ КОДОВ

MASK

EQU

0FH

; МАСКА МЛАДШЕЙ ТЕТРАДЫ

IDEN2:

IN

PIKNK

; ВВЕСТИ KNK1

 

MVI

B,LTAB

; ЗАГРУЗИТЬ ДЛИНУ ТАБЛИЦЫ

     

; В РЕГИСТР B

 

LXI

H, TAB1

; ЗАГРУЗ. НАЧ. АДРЕС ТАБЛИЦЫ

     

; КОДОВ KNK1 В ПАРУ HL

 

LXI

D, TAB2

; ЗАГРУЗ. НАЧ. АДРЕС ТАБЛИЦЫ

     

; КОДОВ СKNK2 В ПАРУ DE

M0:

CMP

M

; KNK1 СОВПАДАЕТ СО СТРОКОЙ

     

;ТАБЛИЦЫ TAB1?

 

JZ

M1

; ДА, ПЕРЕЙТИ К М1, ИНАЧЕ

 

INX

H

; МОДИФИЦИРОВАТЬ АДРЕСА

 

INX

D

; КОДОВ В ТАВ1 И ТАВ2

 

DCR

B

; ПРОСМОТРЕНА ВСЯ ТАВ1?

 

JNZ

M0

; НЕТ, ПОВТОРИТЬ, ИНАЧЕ

 

RET

 

; ВОЗВРАТ С Z=1

M1:

LDAX

D

; ВЫБРАТЬ CKNK2 ИЗ ТАВ2

 

ANI

MASK

; ВЫДЕЛИТЬ KNK2

 

MOV

B, A

; СОХРАНИТЬ В РЕГИСТРЕ В

 

MVI

A, 01H

; УСТАНОВИТЬ

 

ORA

A

; Z=0

 

LDAX

D

; ВЫБРАТЬ CKNK2 ИЗ ТАВ2

 

RLC

 

; ПЕРЕНЕСТИ СТАРШИЙ БИТ CKNK2

     

; В БИТ С РЕГИСТРА F

 

MOV

A, B

; ВОССТАНОВИТЬ KNK2 В

     

; РЕГИСТРЕ А

 

RET

 

; ВОЗВРАТ С Z=0 И С=1 / 0

TAB1:

DB

0FEH, 0FDH, 0FBH, 0F7H

; ЦИФРОВЫЕ КЛАВИШИ

 

DB

0EFH, 0DFH, 0BFH, 7FH

; УПРАВЛЯЮЩИЕ КЛАВИШИ

 

TAB2:

DB

00H, 01H, 02H, 03H

; ЦИФРОВЫЕ КЛАВИШИ

 

DB

80H, 82H, 84H, 86H

; УПРАВЛЯЮЩИЕ КЛАВИШИ

 

Рис.4.33.Текст подпрограммы IDEN2

 

4.13.3. Особенности идентификации нажатой клавиши в матричной клавиатуре

 

В микро-ЭВМ часто используют так называемую матричную клавиатуру. Такая клавиатура представляет собой прямоугольную проводную матрицу, в узлах которой включены контакты клавиш. Принципиальная схема одного из реальных вариантов матричной клавиатуры приведена на рис.4.34

Работу клавиатуры поддерживают порт прямого ввода POKWR и порт прямого ввода PIKAR. Легко видеть, что к каждой из четырех активных линий порта ввода здесь подключено по 6 контактов клавиатуры. Понятно, что эти контакты не могут быть опрошены микро-ЭВМ одновременно. Поэтому в процессе идентификации нажатой клавиши используется процедура последовательного опроса вертикальных рядов клавиш. Эту процедуру, осуществляемую специальной подпрограммой, часто называют сканированием клавиатуры.

Порт POKWR предназначен для выбора ряда клавиш, опрашиваемых в данный момент времени. В этот порт выводится код выбора ряда KWR. Единичный бит этого кода обеспечивает активацию, выбор одного из вертикальных рядов клавиш, задавая на вертикальном проводнике матрицы уровень логического нуля. В невыбранных рядах вертикальные проводники имеют уровень логической единицы. Поэтому замыкание контактов клавиатуры в невыбранных рядах не меняет единичного состояния входов D6, D5, D4 и D2 порта PIKAR. Замыкание же контактов в выбранном ряду приводит к появлению уровня логического нуля на одном или нескольких входах этого порта. Таким образом, формируется код активного ряда KAR, который может ввести в микро-ЭВМ через порт PIKAR.

Последовательный выбор рядов клавиш меняющимся в цикле кодом KWR и ввод кода KAR соответствующего ряда осуществляет специальный блок подпрограммы идентификации IDEN. Байтовые коды KWR и KAR составляют вместе уникальный шестнадцатиразрядный код нажатой клавиши, который используется на втором этапе идентификации. Так, например, если этот код равен 0170H, то нажата клавиша «пробел».

Для рассматриваемого варианта клавиатуры коды KWR и KAR можно объединить в байтовый код нажатой клавиши KNK, используя соотношение

KNK = KWR / 2 + KAR х 2.

Это соотношение может быть реализовано фрагментом программы, приведенным на рис.4.35. Здесь предполагается, что код KWR содержится в регистре С.

Часто нужно определить, нажата ли какая-либо (неважно какая) из клавиш клавиатуры. В этом случае следует выбрать все шесть рядов клавиш одновременно, выдав в порт POKWR код KWR = 3FH. Порт PIKAR будет при этом принимать код KAR = 74H только в том случае, если не нажата ни одна из клавиш.

Процессы сканирования матричной клавиатуры и динамического управления семисегментным дисплеем имеют много общего. Поэтому их часто интегрируют, объединяют на аппаратном (клавиатура и дисплей обычно имеют общий порт выбора ряда POKWR) и (или) на программном уровне.

Рис.4.34.Принципиальная схема матричной клавиатуры

   

IN

PIKAR

; ВВЕСТИ КОД KAR

RLC

 

; KAR x 2

MOV

B,A

; СОХРАНИТЬ KAR x 2 В РЕГ. В

MOV

A,C

; ЗАГРУЗИТЬ KWR В РЕГ. А

RAR

 

; KWR / 2

ADD

B

; KNK = KWR / 2 + KAR х 2

   

 

Рис.4.35.Объединение кодов KWR и KAR в код KNK

 

4.13.4.Программная поддержка работы клавиатуры

 

Вопросы обеспечения нужного порядка срабатывания клавиш клавиатуры, защиты от дребезга ее контактов и идентификации нажатой клавиши обычно решает специальная подпрограмма поддержки клавиатуры KEY. Ее типовая блок-схема представлена на рис.4.36. Блоки 1 и 2 обеспечивают здесь срабатывание клавиш в момент их нажатия. При запуске подпрограмма сначала ожидает отпускания всех клавиш клавиатуры (блок 1). Если же все клавиши отпущены, подпрограмма ждет нового нажатия какой-либо из клавиш (блок 3). Сразу же по этому нажатию идет идентификация нажатой клавиши

Рис.4.36.Блок-схема подпрограммы IND

 

(блок 5) и происходит выход из подпрограммы с кодом KNK2 и нужным значением признака управляющей клавиши. При недопустимом вводе срабатывает блок 6, возвращая управление на начало подпрограммы.

Поменяв местами блоки 1,2 и 3,4,5, можно получить подпрограмму, имеющую другой порядок срабатывания клавиш – по отпусканию нажатой клавиши.

Программные задержки DELAY (блоки 2 и 4) длительностью 10…50 мсек предназначены для защиты от дребезга. В ходе отсчета этих задержек микро-ЭВМ не реагирует ни на какие изменения кода, генерируемого клавиатурой. Реакция восстанавливается лишь после того, как дребезг закончился. Понятно, что блоки 2 и 4 можно исключить из подпрограммы, если используется аппаратная защита от дребезга, например, активные кнопки.

Рассмотренную подпрограмму легко модифицировать таким образом, чтобы обеспечить одновременную поддержку работы и клавиатуры и семисегментного дисплея. Для этого достаточно:

  1. использовать вместо блоков 2 и 4 программной задержки DELAY подпрограмму цикла индикации IND;

  2. ввести выполнение подпрограммы IND в циклы ожидания нажатия и отпускания клавиш – дополнительные блоки 7 и 8.

Блок – схема полученной после модификации подпрограммы (назовем ее KEYIND) приведена на рис.4.37.

Рис.4.37.Блок-схема подпрограммы KEYIND

 

Введение в прикладную программу подпрограммы KEY (KEYIND) иллюстрирует блок-схема (рис.4.38).

Рис.4.38.Введение подпрограммы KEY (KEYIND) в прикладную программу

 

4.13.5.Ввод и выполнение команд управления

 

Пользователь-оператор обычно выдает команды управления микро-ЭВМ нажатием управляющих, функциональных клавиш клавиатуры. Поэтому команды управления вводятся в микро-ЭВМ также как и числа – с помощью подпрограммы KEY (KEYIND). Выполнение каждой такой команды связано с запуском соответствующей заранее подготовленной программы управления.

При малом числе управляющих клавиш допустимо организовывать такой запуск, используя сравнение (по команде CPI D8) кода нажатой клавиши с заданным и условную передачу управления нужной программе по Z = 1.

Если же управляющих клавиш много, применяют табличный способ запуска. Этот способ использует таблицу стартовых адресов программ, запускаемых всеми управляющими клавишами клавиатуры. Стартовые адреса программ записаны в таблицу в порядке возрастания кодов KNK2 соответствующих управляющих клавиш. Код KNK2 нажатой функциональной клавиши оказывается при этом указателем стартового адреса запускаемой программы в этой таблице. Если считать, что код KNK2 содержится в аккумуляторе, функции табличного запуска программ может выполнить фрагмент программы, представленный на рис.4.39.

Следует подчеркнуть еще раз, что таблица стартовых адресов TABST должна содержать стартовые адреса всех имеющихся на клавиатуре управляющих клавиш. Если же нажатие каких-либо клавиш не должно вызывать реакции микро-ЭВМ, следует предусмотреть специальную программу-заглушку, запускаемую этими клавишами.

     

; ЗАПУСК ПРОГРАММ, А = KNK2

 

MOV

L,A

; ЗАГРУЗИТЬ KNK2 В РЕГ. L

 

MVI

H,0

; ОЧИСТИТЬ РЕГ. H

 

LXI

D,TABST

; ЗАГРУЗИТЬ НАЧ. АДРЕС

     

; ТАБЛИЦЫ СТАРТОВЫХ

     

; АДРЕСОВ В ПАРУ DE

 

DAD

D

; ВЫЧИСЛИТЬ АДРЕС МЛ.БАЙТА

     

; СТАРТОВОГО АДРЕСА

 

MOV

E,M

; ПЕРЕСЛАТЬ МЛ. БАЙТ СТ.

     

; АДРЕСА В РЕГИСТР E

 

INX

H

; ВЫЧИСЛИТЬ АДРЕС СТ.БАЙТА

     

; СТАРТОВОГО АДРЕСА

 

MOV

D,M

; ПЕРЕСЛАТЬ МЛ. БАЙТ СТ.

     

; АДРЕСА В РЕГИСТР D

 

XCHG

 

; ПЕРЕСЛАТЬ СТ.АДРЕС ИЗ

     

; ПАРЫ DE В ПАРУ HL

 

PCHL

 

; ЗАПУСТИТЬ ПРОГРАММУ

TABST:

DW

ST0,ST1,…,ST7

; СТАРТОВЫЕ МЕТКИ

     

; ЗАПУСКАЕМЫХ ПРОГРАММ

 

Рис.4.39.Фрагмент программы, обеспечивающий табличный запуск управляющих программ

 

4.14.Простейший монитор

 

Монитором называют системную программу, обеспечивающую диалоговое взаимодействие микро-ЭВМ и ее пользователя-оператора. Монитор обычно обеспечивает:

  1. ввод с клавиатуры цифровой информации и ее отображение на семисегментном дисплее (эхо-печать);

  2. ввод с клавиатуры и выполнение команд управления.

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

Наиболее просто строится монитор, в котором принят следующий порядок взаимодействия с оператором: сначала в буфере ввода и на дисплее формируется вся необходимая для выполнения команды цифровая информация и лишь затем вводится сама команда управления. Блок-схема такого монитора приведена на рис.4.40.

Рис.4.40.Блок-схема простейшего монитора

 

Управляющие программы Пр1…ПрN, запускаемые нажатием функциональных клавиш, получают исходную информацию для своей работы из буфера ввода. Для вывода какой-либо информации на дисплей они должны занести ее в буфер индикации подпрограммы IND, предварительно преобразовав ее в семисегментные коды с помощью подпрограммы BIS7.

Простейший монитор допускает любую последовательность нажатия цифровых и управляющих клавиш клавиатуры. Синтаксические ошибки при вводе здесь невозможны.

Рейтинг@Mail.ru 44