Материал: LS-Sb87104

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

а

б

в

г

Рис. 3.19. Интерфейсные схемы клавиатуры: а – формирователь X2; б – флаг клавиатуры; в – формирователь шины данных для ввода; г – расположение клавиш

Анализ назначения нажатой клавиши. Функциональное назначение клавиш показано на рис. 3.19, г: клавиши k = 0, 1, , 7 задают скорость движения цели vj (j = k), k = 8 и 9 – направление движения цели (клавиши 10 и 11

не используются), k = 12, 13, 14, 15 – период Ti сигнала G (i = 1, 2, 3, 4). Коды этих трех групп клавиш различаются значением двух старших

разрядов DO3DO2: 10 – направление движения; 00 и 01 – значение скорости vj; 11 – значение периода Ti. Для принятия решения маской 00001100 выделяются разряды DO3DO2 и содержимое аккумулятора сравнивается с числом 8: содержимое равно 8, если нажатая клавиша имеет коды 10 (клавиши направления движения); содержимое больше 8, если нажатая клавиша имеет коды 11 (клавиши значений периода Ti); содержимое меньше 8, если нажа-

тая клавиша имеет коды 0 (клавиши значений скорости vj). Программа обслуживания клавиатуры при использовании МЭ (два 16-разрядных счетчика для задания периода и один 16-разрядный счетчик для задания скорости

движения vj и программного ввода данных с квитированием имеет вид (зада-

ны адреса клавиатуры – 28h, триггера направления – 68h).

- 26 -

L1:

IN

port_KB

; А = DO DO DO DO DO

0

 

MOV

C,A

 

 

4

3

2

1

 

; запоминание кода в регистре C

 

ANI

10h

; A = 0 0 0 D4 0 0 0 0 (квитирование)

 

JZ

L1

; если D4 = IR = 0, повторный ввод

 

OUT

port_KB

; сброс флага клавиатуры DO4 (см. рис. 3.19, б)

 

MVI

A,0Fh

; A = 0 0 0 0 1 1 1 1

 

 

 

 

ANA

C

; 0 0 0 D3D2D1D0 – код нажатой клавиши

 

MOV

C,A

; запоминание в регистре C кода нажатой клавиши

 

ANI

0Ch

; A = 0 0 0 0 D3D2 0 0

 

 

 

 

CPI

8

; сравнение старших разрядов кода с числом 8

 

JZ

L2

; переход к заданию направления движения

 

JC

L3

; переход к заданию скорости движения

 

CALL

TAB

; подпрограмма чтения таблицы данных

 

OUT

port_dLT

; запись d

ML

в регистр младшего байта счетчика M

 

INX

H

 

 

 

 

 

1i

 

; адрес старшего байта dMM данных

 

MOV

A,M

; пересылка dMM в аккумулятор

 

OUT

port_dMT

; запись d

MM

в регистр старшего байта счетчика M

 

JMP

L1

 

 

 

 

 

1i

L2:

; переход на ввод кода клавиши

MOV

A,C

; A = 0 0 0 0 D3D2D1D0 – код нажатой клавиши

 

OUT

port_X2

; запись D0 = DAL0 в триггер знака (см. рис. 3.19, а)

L3:

JMP

L1

 

 

 

 

 

 

 

CALL

TAB

; подпрограмма чтения таблицы данных

 

OUT

port_dLV

; запись d

ML

в регистр младшего байта счетчика M

 

INX

H

 

 

 

 

 

1j

 

 

 

 

 

 

 

 

 

MOV

A,M

; A = dMM

 

 

 

 

 

 

OUT

port_dMV

; запись d

MM

в регистр старшего байта счетчика M

 

JMP

L1

 

 

 

 

 

1j

 

 

 

 

 

 

 

 

TAB: LXI

H,700h

; rp H = 0700h

 

 

 

 

 

MOV

A,C

; A = 0 0 0 0 D3D2D1D0 – код нажатой клавиши

 

ADD

A

; A = A + A = 2C

 

 

 

 

 

MOV

C,A

; формирование в rp B числа, равного

 

MVI

B,0

; удвоенному коду клавиши

 

 

DAD

B

; HL = HL + BC = 0700h + 2C – адрес памяти

 

MOV

A,M

; A = dML – младший байт данных

 

RET

 

 

 

 

 

 

 

 

Для таблицы данных отведена область ПЗУ, начинается с адреса 0700h. Для хранения двухбайтовых чисел используются две соседние ячейки памяти

- 27 -

с адресами A и A + 1. Подпрограмма TAB определяет адрес младшего байта данных и читает его из ПЗУ. Для определения адреса A по коду нажатой клавиши к начальному адресу 0700h прибавляется удвоенный код клавиши. Таким образом, по коду клавиши, например, с номером k = 2, задающей в соот-

ветствии с рис. 3.19, г скорость v2, определяются адреса двух ячеек памяти 0704h и 0705h, где хранятся соответственно младший и старший байты числа dM2 . При выполнении команды OUT port_KB на ЛЭ ИЛИ (см. рис. 3.19, б)

поступают сигналы portKB = 0 и I / OW = 0, на выходе ЛЭ вырабатывается сигнал R = 0, устанавливающий триггер флага клавиатуры в состояние Q = 0, что приводит к сбросу флага клавиатуры (сигнал DO4 = 0). При выполнении команды OUT CSX2 по сигналам portX 2 =0 и I / OW = 0 вырабатывается сигнал = 0 (см. рис. 3.19, а), перепадом с 0 на 1 которого в триггер знака x2

записывается значение разряда BD0 = DO0.

Если ввод данных с клавиатуры производится по прерыванию (сигнал IR подается на вход RST7.5), тогда программа обработки прерываний должна начаться с запоминания содержимого регистровых пар, аккумулятора и регистра признаков. Затем следует ввод данных и их анализ.

PUSH

H

PUSH

B

PUSH

PSW

IN

CSKB

MOV

C,A

MVI

A,0Fh

ANA

C

MOV

C,A

ANI

0Ch

CPI

8

JZ

L2

JC

L3

CALL

TAB

OUT

port_dLT

INX

H

MOV

A,M

OUT

port_dMT

JMP

L1

;А = DO4DO3DO2DO1DO0

;запоминание кода в регистре C

;A = 0 0 0 0 1 1 1 1

;0 0 0 D3D2D1D0 – код нажатой клавиши

;запоминание в регистре C кода нажатой клавиши

;A = 0 0 0 0 D3D2 0 0

;сравнение старших разрядов кода с числом 8

;переход к заданию направления движения

;переход к заданию скорости движения

;подпрограмма чтения таблицы данных

;записьdML врегистрмладшегобайта(см. рис. 3.12)

;адрес старшего байта dMM данных

;пересылка dMM в аккумулятор

;записьdMM врегистрстаршегобайта(см. рис. 3.12)

- 28 -

L2:

MOV

A,C

 

OUT

port_X2

 

JMP

L1

L3:

CALL

TAB

 

OUT

port_dLV

 

INX

H

 

MOV

A,M

 

OUT

port_dMV

 

JMP

L1

TAB: LXI

H,700h

 

MOV

A,C

 

ADD

A

 

MOV

C,A

 

MVI

B,0

 

DAD

B

 

MOV

A,M

 

RET

 

L1:

POP

PSW

 

POP

B

 

POP

H

 

EI

 

RET

;A = 0 00 0 D3D2D1D0 – код нажатой клавиши

;записьD0 = DAL0 втриггерзнака(см. рис. 3.19, а)

;подпрограмма чтения таблицы данных

;запись dML в регистр младшего байта счетчика

;M1j, рис. 3.16

;A = dMM

;запись dMM в регистр старшего байта счетчика

;M1j, рис. 3.16

;rp H = 0700h

;A = 0 0 0 0 D3D2D1D0 – код нажатой клавиши

;A = A + A = 2C

;формирование в rp B числа, равного

;удвоенному коду клавиши

;HL = HL + BC = 0700h + 2C – адрес памяти

;A = dML – младший байт данных

;разрешение всех прерываний (после следующей

;команды)

;возврат из подпрограммы обработки прерываний

;RST 7.5

3.7.Приемопередатчик, обслуживающий внешние устройства схемы

Через этот приемопередатчик осуществляется связь системной шины данных с внешними устройствами. На рис. 3.20 представлена схема приемопередатчика, в котором шина DB[7..0] подключена к локальной шине DAL[7..0], а шина DA[7..0] – к системной шине DBS[7..0]. При T = 1 обеспечивается передача от шины DA приемопередатчика к шине DB. Сигнал T =

= RD , поэтому при выполнении команды IN port сигнал RD = 0 и приемопередатчик передает данные от внешнего устройства через локальную шину DB к системной шине DA, а далее от системной шины процессора через приемопередатчик процессора к локальной шине и в процессор. При выполнении

- 29 -

Рис. 3.20. Приемопередатчик внешних устройств

команды OUT port сигнал RD = 1, происходит передача данных от DA к DB в приемопередатчике процессора, т. е. на системную шину данных, а затем от DA к DB в приемопередатчике внешних устройств, т. е. от системной шины данных к локальной и далее во внешнее устройство.

3.8. Дешифратор адресов

При работе имитатора CPU обращается к следующим устройствам: две схемы памяти (ПЗУ и ОЗУ):

○ ПЗУ 573РФ2 объемом 2K 8 бит (для хранения программного обес-

 

печения и таблицы данных);

 

○ ОЗУ 537РУ10 объемом 2K 8 бит (для

 

стека и хранения данных).

 

Поэтому необходимо использовать два

 

дешифратора адресов – адресов схем памяти и

 

адресов внешних устройств. Дешифратор адре-

 

сов схем памяти выполнен на МЭ 74138

Рис. 3.21. Дешифратор адресов

(рис. 3.21). Назначение выходных сигналов де-

схем памяти

шифратора, значения начальных ABEG и конеч-

ных AEND адресов представлены в табл. 3.12. При построении схемы на макроэлементах, в состав которой входят два

16-разрядных счетчика, число внешних устройств увеличивается до восьми:

○регистр младшего байта данных в делителе на M1i

-30 -

Источник: https://studfile.net/preview/16438776/