Проектирование имитатора сигналов на микропроцессоре 1821ВМ85, страница 5

Рис

Рис. 17. Временные диаграммы работы шифратора клавиатуры.

Интерфейсные схемы шифратора клавиатуры подключают к системной шине данных 4-разрядный код нажатой клавиши помощью буфера данных, показанного на рисунке 18. Перепадом сигнала  с 0 на 1 D-триггер устанавливается в состояние 1 (рисунок 19). Подается на буфер данных 74244b 4-разрядный код клавиатуры . При выполнении команды  с дешифратора адреса поступает значение сигнала , а с шины управления – значение , что приводит к появлению значения сигнала , разрешающего передачу по шине данных 5- разрядного кода в аккумулятор CPU.

Рис.18. Формирователь шины данных для ввода.

Анализ назначения нажатой клавиши. Функциональное назначение клавиш показано на рисунке 20: клавиши  задают скорость движения цели ,  – направление движения цели (клавиши не используются),  – период  сигнала  Коды этих трех групп клавиш различаются значением двух старших разрядов : 10 – направление движения, 00 и 01 – значение скорости  11 – значение периода . Для принятия решения маской  выделяются разряды , и содержимое аккумулятора сравнивается с числом 8: содержимое равно 8, если нажатая клавиша имеет коды  (клавиши направления движения); содержимое больше 8, если нажатая клавиша имеет коды  (клавиши значений периода ); содержимое меньше 8, если нажатая клавиша имеет коды  (клавиши значений скорости ).

keyb16

Рис.19. Расположение клавиш.

Рис.20. Формирователь X2.

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

PUSH

H

PUSH

B

PUSH

PSW

IN

58h

;

MOV

C,A

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

MVI

A,

;

ANA

C

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

MOV

C,A

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

ANI

  

;

CPI

8

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

JZ

L2

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

JC

L3

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

CALL

TAB

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

OUT

30h

; запись  в регистр младшего байта (рисунок 10)

INX

H

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

MOV

A,M

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

OUT

18h

; запись  в регистр старшего байта (рисунок 10)

JMP

L1

L2:

MOV

A,C

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

OUT

10h

; запись  в триггер знака (рисунок 21)

JMP

L1

L3:

CALL

TAB

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

OUT

50h

; запись  в регистр младшего байта счетчика M1j, рисунок 14

INX

H

MOV

A,M

;

OUT

38h

; запись  в регистр старшего байта счетчика M1j, рисунок 10

JMP

L1

TAB:

LXI

H,700h

; rp H = 0700h

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

;возврат из ПП обработки прерываний RST 7.5