Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

rgz

.pdf
Скачиваний:
50
Добавлен:
12.04.2015
Размер:
784.45 Кб
Скачать

 

31

OutRg .equ 30h

; адрес регистра вывода

;

 

.org 0800h

 

CNT: CALL KPU

; оценка нажатия и установка флага Z

JZ CNT

; если не нажата, ждать нажатия

IN InRg

; иначе ввод из регистра ввода

OUT OutRg

; вывод через регистр вывода

JMP CNT

; к ожиданию нового нажатия

.end

Моментнажатия клавиши

Моментотпускания

клавиши

Сигнал отклавиши на входе СПД

Интервал дребезга

 

Интервал дребезга

при нажатии

 

при отпускании

 

 

 

 

 

 

Сигнал на выходе СПД

Рис. 1.9. Диаграммы сигналов при дребезге контакта.

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

мер, при нажатии клавиши B должен быть сформирован байт кода этой кла-

виши – 0Bh. Из мониторных подпрограмм для определения кода нажатой клавиши может быть применена подпрограмма KIND (адрес 0185). Подпрограмма KIND –многофункциональная подпрограмма для организации управления пультовым терминалом. Она объединяет в себе возможности представленных ранее подпрограмм DCC, KPU, SDS. Действия подпрограммы KIND заключаются в следующем. Сразу после запуска организуется циклическое сканирование дисплея недекодированным сообщением из UDSP (адреса 0BF0–0BF5) c одновременной проверкой состояния клавиатуры. Сканирование продолжается пока не нажата клавиша. Как только клавиша нажата и отпущена, KIND формирует код нажатой клавиши в аккумуляторе и завершается. Пример использования подпрограммы KIND дан в программе 1.8.

32

;

Программа 1.8

;Управление пультовым терминалом мониторной п/п KIND

; Входные переменные:

UDSP (0BF0–0BF5) – коды недекодированного

;

 

сообщения

; Выходные переменные: A – код нажатой клавиши

;

 

 

BLNK .equ 297h

;адрес п/п очистки дисплея

KIND. equ 14Bh

; адрес п/п управления пультовым терминалом

;

 

 

.org 0800h

 

 

CALL BLNK

; Очистить дисплей

CNT:

CALL KIND

; Ожидать нажатие, выводя сообщение из UDSP

 

 

; после нажатия, код клавиши A и возврат из п/п

 

LXI H,UDSP

; Указание на место UDSP для байта

 

 

; соответствующего индикатору HL0

 

MOV M,A

; запись кода клавиши в новое сообщение

 

OUT Out_Rg

; вывод кода клавиши в выходной регистр

 

JMP CNT

; Повторять сканирование сообщения

.org 0BF0h

 

UDSP:

.db 0,0,0,0,0,0

;байты декодированного сообщения

.end

 

 

2. Пример разработки программы

2.1. Задание

Разработать программу для УМК-80 умножения двух однобайтных чисел вводимых с пульта с последующим выводом результата умножения на дисплей.

2.2. Операторный интерфейс программы

Оператор будет вести диалог с машиной, работая с двумя экранами: экран ввода сомножителей; экран показа результата умножения.

Ввод сомножителей Компоновка экрана ввода сомножителей представлена на рис. 2.1.

33

Область недекодированных сообщений, сканируемая подпрограммой SCAN_KD

DDSP

HL1

DDSP+1 DDSP+2 DDSP+3 DDSP+4 DDSP+5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

HL2

 

 

 

HL3

 

 

 

HL4

 

 

 

HL5

 

 

 

HL6

 

Множимое

Множитель

Рис. 2.1. Компоновка экрана ввода сомножителей.

Сразу после начала программы выводится сообщение, показанное на рис. 2.2 с приглашением к вводу множимого нажатием цифровых клавиш с показом вводимых цифр числа на индикаторах HL2 и HL3. Например, требуется выполнить операцию 39h×ACh.

Приглашение к вводу

DDSP

HL1

DDSP+1 DDSP+2 DDSP+3 DDSP+4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

HL2

 

 

HL3

 

 

HL4

 

 

HL5

 

DDSP+5

HL6

Множимое

Рис. 2.2. Исходный вид экрана перед вводом множимого.

Начинаем ввод множимого со старшей цифры "3". После нажатия клавиши "3" на экране отобразится символ этой клавиши (рис. 2.3).

34

DDSP

HL1

DDSP+1 DDSP+2 DDSP+3 DDSP+4 DDSP+5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

HL2

 

 

 

HL3

 

 

 

HL4

 

 

 

HL5

 

 

 

HL6

 

Множимое

Рис. 2.3. Экран после первого нажатия клавиши "3".

После очередного нажатия символ предыдущего нажатия сдвигается влево на индикатор HL2, а на его месте на HL3 отображается символ клавиши нового нажатия. Информация о ещѐ более раннем нажатии теряется. Таким образом, остаѐтся отображѐнной информация лишь о двух последних нажатиях. Если, например, случайно была повторно нажата клавиша "3" (рис. 2.4), то можно просто исправить ошибку ввода. При вводе должны восприниматься только цифровые клавиши, из символов которых можно создавать цифры байта множимого. Остальные клавиши должны игнорироваться. Исключение

– клавиша "└┘", служащая для указание на завершение ввода цифр числа.

DDSP

HL1

DDSP+1 DDSP+2 DDSP+3 DDSP+4 DDSP+5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

HL2

 

 

HL3

 

 

HL4

 

 

HL5

 

 

HL6

 

Множимое

Рис. 2.4. Экран после второго (ошибочного) нажатия клавиши "3".

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

35

DDSP

HL1

DDSP+1 DDSP+2 DDSP+3 DDSP+4 DDSP+5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

HL2

 

 

 

HL3

 

 

 

HL4

 

 

 

HL5

 

 

 

HL6

 

Множимое

Рис. 2.5. На экране нормальное значение множимого.

Далее нажимается – клавиша "└┘", цифры байта множимого сохраняются в памяти микро-ЭВМ и появляется приглашение к вводу множителя

(рис. 2.6).

Приглашение к вводу

DDSP

HL1

DDSP+1 DDSP+2 DDSP+3 DDSP+4 DDSP+5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

HL2

 

 

 

HL3

 

 

 

HL4

 

 

 

HL5

 

 

 

HL6

 

Множимое

Множитель

Рис. 2.6. Приглашение к вводу множителя сразу после нажатия "└┘".

Ввод множителя производится аналогично вводу множимого. Когда требуемые символы цифр отображаются на соответствующих индикаторах (рис. 2.7), можно снова нажимать клавишу "└┘", указывая на завершение ввода множителя.

36

DDSP

HL1

DDSP+1 DDSP+2 DDSP+3 DDSP+4 DDSP+5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

HL2

 

 

 

HL3

 

 

 

HL4

 

 

 

HL5

 

 

 

HL6

 

Множимое

Множитель

Рис. 2.7. На экране нормальные значения множимого и множителя.

Вывод результата

После завершения ввода экран обновляется.

Введѐнные сомножители перемножаются стандартной подпрограммой умножения. Полученный двухбайтный результат 264Ch разделяется на 4 цифры. Из них получаются 4 декодированных кода. Они помещаются в ячейки области декодированных сообщений DDSP, соответствующих положениям индикаторов, на которых их следует отображать. Вызывается процедура сканирования сообщения до нажатия и на экране получается вид, представленный на рис. 2.8.

DDSP

HL1

DDSP+1 DDSP+2 DDSP+3 DDSP+4 DDSP+5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

HL2

 

 

 

HL3

 

 

 

HL4

 

 

 

HL5

 

 

 

HL6

 

Результат умножения

Рис. 2.8. После завершения ввода множителя на экране – результат умножения.

Далее необходимо обеспечить оператору нажатием клавиш выбирать один из двух путей продолжения:

завершить программу, вернувшись в Монитор по нажатию клавиши

"ВП".

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

37

2.3. Блок-схемы алгоритмов

Блок-схема алгоритма основной программы умножения однобайтных чисел представлена на 3-х листах (рис. 2.9, 2.10, 2.11).

Она состоит из четырѐх модулей: ввод множимого (элементы с 1 по 11);

ввод множителя (элементы с 12 по 21); умножение (элементы с 22 по 24);

подготовка результата в показу на дисплее и сканирование до нажатия (элементы с 25 по 29).

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

Процедуры, вызываемые основной программой подробно представлены выше в разделе 1, либо они разрабатывались при выполнении заданий в лабораторной №4.1 из цикла лабораторных работ.

38

 

 

 

 

 

Начало

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

(DE)

Mes_0

 

 

Копирование сообщения

29

 

 

 

 

 

MES_DDSP

 

 

MES_0 в DDSP

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

 

 

SCAN_KD

Сканирование сообщения до

 

нажатия: код нажатия (A)

 

 

 

3

 

+

Key_Code

Нажата цифровая клавиша?

 

> 10

 

 

4

 

 

Key_Code=4C

 

Нажата клавиша "└┘"?

5

 

 

+

DIG_1

 

 

DIG_0

 

 

 

Модификация буфера кодов

6

 

цифр вводимого байта

1

DIG_0

 

11

 

Key_Code

 

 

 

7

 

 

(A)

Декодирование кода цифры в

 

Key_Code

 

символ для DDSP -> (A)

 

DCD

 

 

9

 

(DDSP+1)

 

 

(DDSP+2)

Модификация буфера из DDSP

 

 

символов цифр вводимого байта

10

 

(DDSP+2)(A)

 

Рис. 2.9. Блок-схема алгоритма программы. Лист 1 (3).

 

39

 

 

2

 

 

4

 

 

11

Объединение отдельных цифр

 

 

 

KEY_CODE

(DIG_1, DIG_0) в один байт

 

(MUL_1)(A)

сомножителя (A).

 

 

Сохранение множимого в MUL_1.

 

12

 

 

(DDSP+4)08

Формирование приглашения

 

(DDSP+5)08

к вводу множителя

 

13

 

 

SCAN_KD

Сканирование сообщения до

 

нажатия: код нажатия (A)

 

 

 

14

 

+

Key_Code

Нажата цифровая клавиша?

 

> 10

 

 

15

 

 

Key_Code=4C

 

Нажата клавиша "└┘"?

 

16

 

+

 

 

 

DIG_1DIG_0

 

 

17

Модификация буфера кодов

3

цифр вводимого байта

 

 

 

21

DIG_0

 

 

 

 

Key_Code

 

 

18

 

 

(A)

Декодирование кода цифры в

 

Key_Code

 

символ для DDSP -> (A)

 

DCD

 

 

 

19

 

 

(DDSP+4)

 

 

(DDSP+5)

Модификация буфера из

 

 

DDSP символов цифр

 

20

вводимого байта

 

(DDSP+5)(A)

 

Рис. 2.10. Блок-схема алгоритма программы. Лист 2 (3).

40

2

15

21

Объединение отдельных цифр в KEY_CODE один байт сомножителя

(MUL_2)(A) (KEY_CODE1, KEY_CODE_0)

Сохранение множителя в MUL_2

22

 

 

(MUL0)(E)

 

 

 

 

 

(MUL1)(D)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

23

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MULTIPLY

 

 

 

Выполнение умножения

 

 

 

 

 

 

 

 

MUL0×MUL1 àRES0, RES1

 

 

 

 

 

 

 

 

 

 

24

(RES_0)(C) (RES_1)(B)

25

 

(DE)

Копирование сообщения

MES_1

MES_1 в DDSP

MES_DDSP

 

 

26

 

 

 

Подготовка для индикации на местах

 

DCD RES0

DDSP+2, DDSP+3 цифр младшего

 

 

байта RES0 результата

 

27

 

 

 

Подготовка для индикации на местах

 

DCD RES1

DDSP+0, DDSP+1 цифр старшего

 

 

байта RES1 результата

 

28

 

1

 

Сканирование сообщения до нажатия.

 

 

1

SCAN_KD

Затем сохранение кода нажатия в

 

 

 

Key_Code

 

29

 

 

Key_Code=8С

Нажата клавиша "ВП"?

 

+

 

 

Конец

 

 

Рис. 2.11. Блок-схема алгоритма программы. Лист 3 (3).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]