rgz
.pdf
|
|
21 |
|
|
|||
|
|
|
|
|
Таблица 1.10 |
||
|
Распределение адресного пространства памяти в УМПК-80 |
||||||
|
|
|
|
|
|
|
|
|
Адреса |
|
|
|
Назначение |
|
|
|
|
|
|
|
|
|
|
|
0000–07FF |
|
|
|
П/п Монитора и сервисные программы |
|
|
|
|
|
|
|
|
|
|
|
0800–0AFF |
|
|
|
ОЗУ пользователя: область для программ, доступная для запи- |
|
|
|
|
|
|
||||
|
|
|
|
си только из Монитора; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0B00–0BB0 |
|
|
|
ОЗУ пользователя: область для данных и стек |
|
|
|
|
|
|
|
|
|
|
|
0BB1–0BFF |
|
|
|
ОЗУ данных для п/п стандартного Монитора: |
|
|
|
|
|
|
|
|
||
|
0BF0–0BF5 |
|
|
|
область недекодированных сообщений дисплея – UDSP |
|
|
|
|
|
|
|
|
||
|
0BFA–0BFF |
|
|
|
область декодированных сообщений дисплея – DDSP |
|
|
|
|
|
|
|
|
|
|
Следует отметить, что область ОЗУ для программ пользователя 0800– 0AFF в микро-ЭВМ УМПК-80 аппаратно защищена от записи из программ пользователя, то есть использовать эту область для хранения своих данных пользователь не может. Хранить данные следует в области 0B00–0BB0. Причем, рассчитывая, что в этой же области Монитор определяет стековую память (вершина стека – 0BB0).
Схема управления пошаговым режимом представляет собой логиче-
скую схему, которая обеспечивает возможность останова программы пользователя после каждого шага выполняемой программы. Шаг может быть равен:
одной команде программы; одному машинному циклу команды.
При работе по шагам-командам обеспечивается останов и возврат в Монитор после каждой очередной команды программы пользователя. Таким образом, появляется возможность контролировать ход выполнения программы и отслеживать ошибки.
При работе по шагам-машинным циклам обеспечивается перевод процессора в состояние ожидания после выполнения каждого очередного машинного цикла. В состоянии ожидания линии системной шины остаются с неизменными значениями логических уровней. Эти значения соответствуют предстоящему машинному циклу, а для их наблюдения имеются светодиодные индикаторы красного цвета:
16 – для линий адреса,
8 – для линий данных,
6 – для линий управления.
Таким образом, наблюдая отдельные машинные циклы команд, можно исследовать ход выполнения процессором этих команд.
В ходе интерпретации команд программы, записанной в памяти, микропроцессор управляет внешними устройствами микро-ЭВМ. Последние подключаются к шине через интерфейсы. Поэтому управление внешним устройством есть взаимодействие процессора с интерфейсом этого внешнего устройства. Оно сводится к обмену данными с регистрами (портами) интерфейса при помощи соответствующих команд программы. Адреса портов интерфейсов внешних устройств данной микро-ЭВМ представлены в табл. 1.11.
22
Таблица 1.11 Распределение адресного пространства портов внешних устройств в УМПК-80
|
Адрес |
|
|
|
Направл |
|
|
|
Обозн |
|
|
|
Назначение |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
18 |
|
|
|
Ввод |
|
|
|
KeyRg |
|
|
|
Регистр чтения клавиатуры |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
|
|
|
Ввод |
|
|
|
InRg |
|
|
|
Внешний регистр ввода |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
|
|
|
Вывод |
|
|
|
ScnRg |
|
|
|
Регистр сканирования клавиатуры и дисплея |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
|
|
|
Вывод |
|
|
|
OutRg |
|
|
|
Внешний регистр вывода |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
38 |
|
|
|
Вывод |
|
|
|
SegRg |
|
|
|
Регистр сегментов дисплея |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
80 |
|
|
|
Вывод |
|
|
|
RngRg |
|
|
|
Регистр вывода звукового сигнала |
|
Пульт управления предназначен для реализации взаимодействия оператора с микро-ЭВМ. Он состоит из клавиш, объединенных в клавиатурную матрицу (8 строк x 3 столбца), и шести индикаторов дисплея. Управление клавиатурной матрицей и индикаторами дисплея реализовано путем сканирования, то есть путем циклического поочередного выбора строк клавиатурной матрицы и индикаторов дисплея. Выбор выполняется процессором через запись соответствующего кода в регистр сканирования. При выборе очередной строки клавиатурной матрицы процессор через регистр клавиатуры принимает код состояния клавиш выбранной строки для анализа наличия их нажатия. При выборе очередного индикатора дисплея процессор выводит через регистр сегментов дисплея код изображения на этом индикаторе. Описанные выше действия по управлению клавиатурной матрицей и дисплеем реализованы программой Монитора. В состав клавиатурной матрицы объединены все кла-
виатурные клавиши кроме трех: ШЦ (шаг цикла), Ст (стоп) и R (сброс).
Клавиша ШЦ функционально относится к схеме управления шаговыми ре-
жимами. Клавиша Ст предназначена для формирования запроса прерывания
процессора с целью прерывания любых действий процессора для возврата в
Монитор. Клавиша R предназначена для формирования сигнала на вход
процессора RESET для сброса процессора в исходное состояния.
Схема звукового вывода обеспечивает возможность управления динамиком посредством команд процессора. По команде вывода OUT 80 битом D7 выводимого из аккумулятора байта обеспечивается включение или отключение тока через цепь катушки динамика.
Для реализации параллельного вывода данных из микро-ЭВМ предназначен регистр вывода. К выходам регистра вывода подключены светодиодные индикаторы, показывающие логическое состояние этих выходов. По команде OUT 30 процессор может вывести байт из своего аккумулятора в этот выходной регистр.
Для реализации параллельного ввода данных в микро-ЭВМ предназначен регистр ввода. А для имитации входных сигналов этому регистру имеется имитатор внешнего устройства (ВУ) ввода, состоящий из 8 переключателей. Поэтому пользователь может установкой переключателей задавать уров-
23
ни логических сигналов на входах регистра ввода. Чтобы затем процессор, при выполнении команды IN 20, имел возможность принять заданный переключателями код в свой аккумулятор. Состояния входов регистра ввода, задаваемые переключателями, отображаются на светодиодных индикаторах.
Пультовой терминал УМПК-80
Пультовой терминал микро-ЭВМ представляет собой аппаратное средство организации взаимодействия пользователя с процессором микро-ЭВМ. Пультовой терминал состоит из клавиатурной и индикаторной частей.
Дисплейная часть
Дисплейная часть пультового терминала (рис. 1.6) состоит из 6 восьмисегментных светодиодных индикаторов. Изображение на каждом отдельном индикаторе формируется, в случае выбора данного индикатора, из кода изображения, выводимого через регистр сегментов дисплея SegRg (адрес 38). Выбор индикатора реализуется выводом через соответствующий ему один из разрядов регистра сканирования ScnRg (адрес 28). Пример в программе 1.4 показывает зависимость байта отправляемого на дисплей через SegRg от изображения, полученного на выбранном индикаторе.
; Программа 1.4
;Показ на индикаторе HL5 двоичного кода из регистра ввода
;Адреса регистров:
ScnRg .equ 28h |
;регистр сканирования клавиатуры/дисплея |
SegRg .equ 38h |
;регистр сегментов дисплея |
InRg .equ 20h |
;регистр ввода |
.org 0800h |
|
MVI A,20h |
; A 00100000, для выбора индикатора HL5 |
OUT ScnRg |
; выбор HL5 выводом кода из A через ScnRg |
CNT: IN InRg |
; код для индикации из регистра ввода A |
OUT SegRg |
; отправляем на индикаторы через SegRg |
JMP CNT |
; на продолжение вывода кода |
.end |
|
Все 16 кодов, вывод которых через регистр SegRg обеспечит индикацию соответствующих шестнадцатеричных цифр представлены в табл. 1.12.
Очевидно, что коды отвечающие за индикацию цифр никак не связаны со значением выводимых на индикаторы цифр. А при программировании вывода цифры на индикатор дисплея удобно когда выводимой цифре соответствует ей равный байт. Например, индикация цифры "5" должна получаться из исходного байта "05".
24
|
|
|
|
|
|
|
|
ScnRg |
|
|
|
|
Регистр |
|
|
|
|
Ключ |
|
|
|
|
+5 В |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
сканирования |
|
|
|
транзисторный |
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
К589ИР12 |
|
|
220 |
|
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
Q0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
КТ816А |
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SW6 |
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
Адрес – |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28h |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SW5 |
|
|
|
|
||||
|
|
|
|
|
|
|
|
Q1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
STB |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SL0 |
||||||
D0..D7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SW4 |
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
D0..D7 |
Q2 |
|
|
|
|
|
|
|
|
|
|
|
|
SL1 |
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SW3 |
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
(8) |
|
|
|
|
Q |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SL2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SW2 |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
Q4 |
|
|
|
|
|
|
SL3 |
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
SW1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Q5 |
|
|
|
SL4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SL5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Данные |
|
|
|
|
|
|
|
|
|
|
|
|
Регистр |
|
HL5 |
HL4 |
HL3 |
HL2 |
HL1 |
|
HL0 |
|
|
сегментов |
|
|
|
|
|
|
|
|
|
|
дисплея |
|
|
|
|
|
|
|
|
|
SegRg |
|
(8) |
(8) |
(8) |
(8) |
(8) |
(8) |
|
(8) |
|
К589ИР12 |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
||
|
|
Q0 |
|
SW14 |
|
|
|
|
|
|
|
D0..D7 |
Q1 |
SW13 |
|
|
|
|
|
A |
|
(8) |
Q |
|
SW12 |
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
B |
|
|
|
|
|
|
|
|
|
|
||
|
|
Q3 |
SW11 |
|
|
|
|
F |
|
|
Q0 |
|
|
|
|
|
G |
|
|||
|
Q4 |
|
SW10 |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
||
Адрес – |
|
Q5 |
SW9 |
|
|
|
|
E |
|
C |
38h |
|
Q6 |
|
SW8 |
|
|
|
|
D |
H |
|
STB |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
220 |
|
|
|
Расположение светодиодных |
|||
|
|
|
|
|
|
сегментов индикатора |
||||
|
|
Q7 |
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
КТ315Д |
62 |
|
|
SW7 |
|
|
|
SLx |
|
|
|
|
|
|
|
|
|
HLx |
Подключение |
B |
|
E |
H |
светодиодных |
|
|
||
|
|
|
|
|
сегментов |
A |
D |
|
G |
индикатора |
|
C |
|
F |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Q0 |
Q1 |
Q2 |
Q3 |
Q4 |
Q5 |
Q6 |
Q7 |
|
Выходы регистра SegRg |
|
|
|
|
|
|
|
|
|
|
Рис. 1.6. Дисплейная часть пультового терминала.
25
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблица 1.12 |
||
|
|
Синтезированное изображение шестнадцатеричных цифр |
|
|
|
|||||||||||
Цифра |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
Код |
3F |
06 |
5B |
4F |
66 |
6D |
7D |
07 |
7F |
6F |
77 |
7C |
39 |
5E |
79 |
71 |
Изобра- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
жение |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Для обеспечения этого требуется программно организовать преобразование исходного байта в код, вывод которого обеспечит индикацию цифры, соответствующей исходному байту. Иначе говоря, требуется выполнить де-
кодирование исходного недекодированного кода, получить результат – деко-
дированный код, и его уже выводить на индикатор через регистр сегментов. Операция декодирования организуется с применением таблицы декодирования DCC (см. табл. 1.13): имея адрес начала таблицы DCC и используя исходный недекодированный код в качестве смещения можно находить в таблице декодированный код.
Таблица 1.13
Таблица декодирования (DCC)
|
Адрес |
|
|
|
|
Код |
|
|
|
Цифра |
|
||||
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
перемен |
|
|
|
|
знач |
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
DCC+00 |
|
|
|
0218 |
|
|
|
3F |
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|||||||||
|
DCC+01 |
|
|
|
|
0219 |
|
|
|
06 |
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
DCC+02 |
|
|
|
021A |
|
|
|
5B |
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
DCC+03 |
|
|
|
021B |
|
|
|
4F |
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
DCC+04 |
|
|
|
021C |
|
|
|
66 |
|
|
|
4 |
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
DCC+05 |
|
|
|
|
021D |
|
|
|
6D |
|
|
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
DCC+06 |
|
|
|
021E |
|
|
|
7D |
|
|
|
6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
DCC+07 |
|
|
|
021F |
|
|
|
07 |
|
|
|
7 |
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
DCC+08 |
|
|
|
|
0220 |
|
|
|
7F |
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
DCC+09 |
|
|
|
0221 |
|
|
|
6F |
|
|
|
9 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
DCC+0A |
|
|
|
0222 |
|
|
|
77 |
|
|
|
A |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
DCC+0B |
|
|
|
0223 |
|
|
|
7C |
|
|
|
B |
|
|
|
|
|
|
|
|
|
|
||||||||
|
DCC+0C |
|
|
|
|
0224 |
|
|
|
39 |
|
|
|
C |
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
DCC+0D |
|
|
|
0225 |
|
|
|
5E |
|
|
|
D |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
DCC+0E |
|
|
|
0226 |
|
|
|
79 |
|
|
|
E |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
DCC+0F |
|
|
|
0227 |
|
|
|
71 |
|
|
|
F |
|
Таблица DCC хранится в ПЗУ, начиная с адреса 218 и не заканчивается кодом цифры F, а продолжается. Последующие места таблицы отданы дополнительным символам (например, "H", "П" и т.п.), которые можно отобразить средствами восьмисегментного индикатора. Декодированные коды этих символов получают синтезом символов на индикаторе, как в программе 1.5. Затем, просматривая продолжение таблицы DCC, находят место хранения син-
26
тезированного декодированного кода. Ему соотвествует какой-то адрес Adr_S. Если из этого адреса Adr_S вычесть адрес начала таблицы DCC, то получится недокодированный код данного символа.
Для формирования сообщения на шести индикаторах дисплея требуется разместить коды изображений индикаторов в шести последовательно расположенных ячейках памяти сообщения, а затем выполнять циклически про-
граммное сканирование индикаторов. Чтобы сообщение на дисплее зритель-
но воспринималось, коды изображения требуется фиксировать на соответствующем индикаторе в течение определѐнного времени. Алгоритм такого сканирования можно представить как показано на рис. 1.7.
Задержку в этом случае может обеспечить мониторная подпрограмма DELB (адрес 430h). Еѐ входным параметром является числовое значение интервала временной задержки: количество миллисекунд задержки должно быть задано в регистровой паре BC.
; Программа 1.5
;Сканирование декодированного сообщения дисплея
;Входные переменные: M(0900h–0905h) – коды декодированного
; |
сообщения Mes |
; |
|
ScnRg .equ 28h |
;регистр сканирования клавиатуры/дисплея |
SegRg .equ 38h |
;регистр сегментов дисплея |
DELB .equ 430h |
;адрес подпрограммы временной задержки |
; |
|
.org 0800h |
|
LXI B,400h |
; Загрузить время задержки |
CNT1: LXI H,Mes+5 |
; Исх сост указателя кодов сообщения |
MVI D,20h |
; Указатель индикаторов – на HL5 |
CNT2: MOV A,D |
; Загрузка указателя индикаторов |
OUT ScnRg |
; и вывод для выбора очередного индикатора |
MOV A,M |
; Загрузка очередного кода из M[HL] |
OUT SegRg |
; и вывод на индикатор |
CALL DELB |
; Временная задержка BC миллисекунд |
DCX H |
; Перемещение указателя кодов сообщения |
MOV A,D |
; |
RRC |
; Перемещение указателя индикаторов |
MOV D,A |
; |
JNC CNT2 |
; Оценка положения указателя индикаторов |
|
; если последний не пройден – к следующему |
JMP CNT1 |
; иначе начинать сначала |
.org 0900h |
|
Mes: .db 0,0,0,0,0,0 |
;байты декодированного сообщения |
.end |
|
|
|
27 |
|
|
Начало |
|
|
|
1 |
|
|
|
BC400h |
Установка интервала |
|
|
временной задержки |
||
|
|
||
|
2 |
|
|
|
HLMes+5 |
Установка в исходное состояние (Mes+5) |
|
|
указателя байтов сообщения (HL) |
||
|
|
||
|
3 |
|
|
|
D20h |
Установка в исходное состояние 100000d |
|
|
указателя индикаторов дисплея (D) |
||
|
|
||
|
4 |
|
|
|
D |
Выбор очередного индикатора выводом байта |
|
|
ScnRg |
через регистр сканирования (ScnRg) |
|
|
5 |
|
|
|
M(HL) |
Вывод очередного байта через регистр |
|
|
SegRg |
сегментов (SegRg) на индикатор дисплея |
|
|
6 |
|
|
|
DELB |
Пауза для фиксации изображения в |
|
|
течение BC миллисекунд |
||
|
|
||
|
7 |
|
|
|
HLHL+1 |
Продвижение указателя байтов сообщения |
|
|
8 |
|
|
|
Сдвиг D |
Продвижение бита выбора индикатора с |
|
|
вправо |
переходом младшего бита в перенос CY |
|
- |
9 |
|
|
CY=1 |
Бит выбора вышел за границы байта? |
||
|
|||
|
+ |
|
|
|
Рис. 1.7. Алгоритм программы 1.5 сканирования дисплея. |
В программе 1.5 исходное сообщение представлялось декодированными кодами. Возможность сканирования недекодированных сообщений обеспечивают мониторные средства УМПК-80. Для этих целей в ОЗУ организует-
ся 5-байтная область недекодированных сообщений UDSP (адреса 0BF0– 0BF5). Исходные байты из этой области принимает как входные параметры подпрограмма декодирования DCD (адрес 01E9). Она выполняет для каждого
28
недекодированного байта выборку по таблице декодирования соответствующего декодированного кода. А результаты декодирования подпрограмма
DCD отправляет в область декодированных сообщений DDSP (адреса
0BFAh–0BFFh). Поскольку область DDSP используется монитором, прямая загрузка еѐ из монитора невозможна. Для загрузки исходного сообщения в DDSP можно применять команду процессора RST3, вызывающую мониторную подпрограммы по адресу 0018. Пользователь может записать коды своего сообщения в любую доступную ему 5-байтную область. Чтобы это сообщение оказалось в DDSP следует загрузить его исходный адрес в регистровую пару DE и выполнить команду RST3. Однократное сканирование на индикаторы дисплея сообщения, хранящегося в области DDSP может обеспечить мониторная подпрограмма SDS (адрес 01С8). Применение мониторных средств для индикации недекодированного сообщения иллюстрируется программой 1.6
;
;Сканирование недекодированного сообщения дисплея
;Входные переменные: M(0900h–0905h) – коды недекодированного
; |
|
сообщения Mes |
; |
|
|
DCD .equ 1E9h |
;адрес подпрограммы декодирования |
|
SDS .equ 1C8h |
;адрес подпрограммы сканирования |
|
; |
|
|
.org 0800h |
|
|
|
LXI D,900 |
; Подготовить адрес начала сообщения |
|
RST 3 |
; Загрузить сообщение в UDSP |
|
CALL DCD |
; Декодировать сообщение UDSP DDSP |
CNT: |
CALL SDS |
; Однократно просканировать сообщение |
|
JMP CNT |
; Повторять сканирование сообщения |
.org 0900h |
|
|
Mes: |
.db 0,0,0,0,0,0 |
;байты декодированного сообщения |
.end |
|
|
Клавиатурная часть
Клавиатурная часть пультового терминала УМПК-80 представлена клавишами, объединѐнными в клавиатурную матрицу (рис. 1.8) 8×3 (8 строк и 3 столбца).
29
|
Регистр |
|
|
|
|
|
сканирования |
ScnRg |
|
||
|
|
|
|
||
|
|
|
К589ИР12 |
||
|
|
|
|
Q0 |
|
|
|
|
|
Q1 |
|
|
Адрес – |
|
|
Q2 |
|
|
28h |
|
|
||
|
|
|
|
||
|
|
|
STB |
|
|
|
|
|
|
Q3 |
|
|
D0..D7 |
|
|
|
|
Данные |
(8) |
|
D0..D7 |
Q4 |
|
|
|
|
|
||
|
|
|
|
Q5 |
|
|
|
|
|
Q6 |
|
|
|
|
|
Q7 |
|
|
|
|
KeyRg |
|
|
|
|
|
DB |
A0 |
|
|
D0..D3 |
|
B0 |
||
|
|
|
|||
|
|
|
|
||
|
(4) |
|
... |
|
|
|
|
B4 |
A1 |
||
|
|
|
|||
|
|
|
|
||
|
Адрес – |
|
|
|
|
|
18h |
|
|
A2 |
|
|
|
|
CS |
|
|
Регистр |
|
|
A3 |
||
чтения |
DIEN |
||||
|
|||||
клавиатуры |
|
К589АП16 |
|||
|
"1" |
|
|||
|
|
|
|
+5 В |
|
|
ШК |
ПрСч |
|
П |
ОтРг |
ОтА |
0 |
ЗпУв |
Ум |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
A |
B |
C |
D |
E |
F |
СПД |
СПД |
СПД |
|
ШЦ |
Схема подавления |
дребезга контактов |
|
|
клавиш |
+5 В |
|
Рис. 1.8. Клавиатурная часть пультового терминала.
Для процессора клавиатурная матрица представляет собой обычное внешнее устройство. Управление этим внешним устройством осуществляется через программный обмен данными с ним процессора. Аппаратные средства сопряжения с внешним устройством реализованы на основе микросхемы буферного регистра RG (К589ИР12), выступающей в роли регистра сканирова-
30
ния ScnRg (адрес 28), а также на основе микросхемы шинного формирователя BF (К589АП16) в роли регистра чтения клавиатуры KeyRg (адрес 18). Регистр сканирования обслуживает одновременно обе части пультового терминала, обеспечивая при сканировании одновременный выбор как строки клавиатурной матрицы, так и соответствующего индикатора дисплея
Управление клавиатурной матрицей сводится к решению следующих задач:
выявление факта нажатия клавиши клавиатуры; определение кода нажатой клавиши.
Выявление факта нажатия клавиши клавиатуры организовано посредством сканирования элементов матрицы следующими последовательными действиями.
1.Путѐм вывода кода выбора строки через регистр ScnRg последовательно выбираются строки матрицы;
2.В момент выбора каждой строки через регистр KeyRg принимается код, показывающий состояние клавиш данной строки (код столбцов);
3.Процессор, анализируя принятый код, выявляет факт нажатия клави-
ши.
В случае выявления факта нажатия клавиши с механическим контактом актуальной проблемой является "дребезг контакта", сопровождающий нажатия. Когда клавиша нажимается или отпускается, ее контакт, до перехода в устойчивое замкнутое или разомкнутое положение, несколько раз перескакивает из одного состояния в другое ("дрожит"). Из-за этого схема управления клавиатурой может зафиксировать, вместо одного, несколько нажатий. Устранение дребезга клавишных контактов в микро-ЭВМ УМПК-80 обеспечивается схемой подавления дребезга (СПД), работу которой иллюстрирует диаграмма на рис. 1.9).
Среди мониторных подпрограмм есть подпрограмма KPU (адрес 0185), обеспечивающая определение факта нажатия. Подпрограмма KPU сначала однократно сканирует 8 строк, принимая коды состояния клавиш этих строк в 8-байтную области UDKY (0BE8..0BEF). Затем подпрограмма KPU проверяет область UDKY на наличие зафиксированных там нажатий клавиш. И если обнаружено хотя бы одно нажатие, то перед завершением KPU будет сброшен бит нулевого результата Z=0. По состоянию бита Z вызывающая программа может, таким образом, оценить факт нажатия на момент запуска подпрограммы KPU. Например программа 1.7.
; |
Программа 1.7 |
;Определение факта нажатия клавиши
;Выходные переменные: UDKY (0BE8–0BEF)– коды состояния клавиш
; |
строк клавиатурной матрицы |
; |
|
KPU .equ 185h |
;адрес п/п проверки состояния клавиш |
InRg .equ 20h |
; адрес регистра ввода |