Читайте также: |
|
Интерфейсные схемы шифратора клавиатуры подключают к системной шине данных 4-разрядный код нажатой клавиши помощью буфера данных, показанного на рис. 3.19, в. Перепадом сигнала IR с 0 на 1 D -триггер
Рис. 3.17. Схема шифратора клавиатуры |
Рис. 3.18. Временные диаграммы работы шифратора клавиатуры |
устанавливается в состояние 1 (рис. 3.19, б). С выхода триггера флаг клавиатуры FKB = DO 4 = 1 подается на буфер данных 74244b вместе с 4-разрядным кодом клавиатуры DO 3 DO 2 DO 1 DO 0. При выполнении команды IN CSKB с дешифратора адреса поступает значение сигнала = 0 (chip select keyboard), а с шины управления – значение = 0, что приводит к появлению значения сигнала = Ú = 0, разрешающего передачу по шине данных 5-разрядного кода в аккумулятор CPU.
а | б |
в | г |
Рис. 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).
Коды этих трех групп клавиш различаются значением двух старших разрядов DO 3 DO 2: 10 – направление движения; 00 и 01 – значение скорости vj; 11 – значение периода Ti. Для принятия решения маской 00001100 выделяются разряды DO 3 DO 2, и содержимое аккумулятора сравнивается с числом 8: содержимое равно 8, если нажатая клавиша имеет коды 10´´ (клавиши направления движения); содержимое больше 8, если нажатая клавиша имеет коды 11´´ (клавиши значений периода Ti); содержимое меньше 8, если нажатая клавиша имеет коды 0´´´ (клавиши значений скорости vj). Программа обслуживания клавиатуры при использовании МЭ (два 16-разрядных счетчика для задания периода и один 16-разрядный счетчик для задания скорости движения vj и программного ввода данных с квитированием имеет вид (заданы адреса клавиатуры – 28 h, триггера направления – 68 h).
L1: | IN | port_KB | ; А = ´´´ DO 4 DO 3 DO 2 DO 1 DO 0 |
MOV | C,A | ; запоминание кода в регистре C | |
ANI | 10 h | ; A = 0 0 0 D 4 0 0 0 0 (квитирование) | |
JZ | L1 | ; если D 4 = IR = 0, повторный ввод | |
OUT | port_KB | ; сброс флага клавиатуры DO 4 (см. рис. 3.19, б) | |
MVI | A,0F h | ; A = 0 0 0 0 1 1 1 1 | |
ANA | C | ; 0 0 0 D 3 D 2 D 1 D 0 – код нажатой клавиши | |
MOV | C,A | ; запоминание в регистре C кода нажатой клавиши | |
ANI | 0C h | ; A = 0 0 0 0 D 3 D 2 0 0 | |
CPI | ; сравнение старших разрядов кода с числом 8 | ||
JZ | L2 | ; переход к заданию направления движения | |
JC | L3 | ; переход к заданию скорости движения | |
CALL | TAB | ; подпрограмма чтения таблицы данных | |
OUT | port_dLT | ; запись d ML в регистр младшего байта счетчика M 1 i | |
INX | H | ; адрес старшего байта dMM данных | |
MOV | A,M | ; пересылка dMM в аккумулятор | |
OUT | port_dMT | ; запись d MM в регистр старшего байта счетчика M 1 i | |
JMP | L1 | ; переход на ввод кода клавиши | |
L2: | MOV | A,C | ; A = 0 0 0 0 D 3 D 2 D 1 D 0 – код нажатой клавиши |
OUT | port_ X 2 | ; запись D 0 = DAL0 в триггер знака (см. рис. 3.19, а) | |
JMP | L1 | ||
L3: | CALL | TAB | ; подпрограмма чтения таблицы данных |
OUT | port_dLV | ; запись d ML в регистр младшего байта счетчика M 1 j | |
INX | H | ||
MOV | A,M | ; A = dMM | |
OUT | port_dMV | ; запись d MM в регистр старшего байта счетчика M 1 j | |
JMP | L1 | ||
TAB: | LXI | H,700 h | ; rp H = 0700 h |
MOV | A,C | ; A = 0 0 0 0 D 3 D 2 D 1 D 0 – код нажатой клавиши | |
ADD | A | ; A = A + A = 2C | |
MOV | C,A | ; формирование в rp B числа, равного | |
MVI | B,0 | ; удвоенному коду клавиши | |
DAD | B | ; HL = HL + BC = 0700 h + 2C – адрес памяти | |
MOV | A,M | ; A = dML – младший байт данных | |
RET |
Для таблицы данных отведена область ПЗУ, начинается с адреса 0700 h. Для хранения двухбайтовых чисел используются две соседние ячейки памяти с адресами A и A + 1. Подпрограмма TAB определяет адрес младшего байта данных и читает его из ПЗУ. Для определения адреса A по коду нажатой клавиши к начальному адресу 0700 h прибавляется удвоенный код клавиши. Таким образом, по коду клавиши, например, с номером k = 2, задающей в соответствии с рис. 3.19, г скорость v 2, определяются адреса двух ячеек памяти 0704 h и 0705 h, где хранятся соответственно младший и старший байты числа . При выполнении команды OUT port_KB на ЛЭ ИЛИ (см. рис. 3.19, б) поступают сигналы = 0 и = 0, на выходе ЛЭ вырабатывается сигнал = 0, устанавливающий триггер флага клавиатуры в состояние Q = 0, что приводит к сбросу флага клавиатуры (сигнал DO 4 = 0). При выполнении команды OUT CSX2 по сигналам =0 и = 0 вырабатывается сигнал a = 0 (см. рис. 3.19, а), перепадом с 0 на 1 которого в триггер знака x 2 записывается значение разряда BD 0 = DO 0.
Если ввод данных с клавиатуры производится по прерыванию (сигнал IR подается на вход RST 7.5), тогда программа обработки прерываний должна начаться с запоминания содержимого регистровых пар, аккумулятора и регистра признаков. Затем следует ввод данных и их анализ.
PUSH | H | ||
PUSH | B | ||
PUSH | PSW | ||
IN | CSKB | ; А = ´´´ DO 4 DO 3 DO 2 DO 1 DO 0 | |
MOV | C,A | ; запоминание кода в регистре C | |
MVI | A,0F h | ; A = 0 0 0 0 1 1 1 1 | |
ANA | C | ; 0 0 0 D 3 D 2 D 1 D 0 – код нажатой клавиши | |
MOV | C,A | ; запоминание в регистре C кода нажатой клавиши | |
ANI | 0C h | ; A = 0 0 0 0 D 3 D 2 0 0 | |
CPI | ; сравнение старших разрядов кода с числом 8 | ||
JZ | L2 | ; переход к заданию направления движения | |
JC | L3 | ; переход к заданию скорости движения | |
CALL | TAB | ; подпрограмма чтения таблицы данных | |
OUT | port_dLT | ; запись dML в регистр младшего байта (см. рис. 3.12) | |
INX | H | ; адрес старшего байта dMM данных | |
MOV | A,M | ; пересылка d MM в аккумулятор | |
OUT | port_dMT | ; запись dMM в регистр старшего байта (см. рис. 3.12) | |
JMP | L1 | ||
L2: | MOV | A,C | ; A = 0 00 0 D 3 D 2 D 1 D 0 – код нажатой клавиши |
OUT | port_ X 2 | ; запись D 0 = DAL0 в триггер знака (см. рис. 3.19, а) | |
JMP | L1 | ||
L3: | CALL | TAB | ; подпрограмма чтения таблицы данных |
OUT | port_dLV | ; запись d ML в регистр младшего байта счетчика ; M 1 j , рис. 3.16 | |
INX | H | ||
MOV | A,M | ; A = dMM | |
OUT | port_dMV | ; запись d MM в регистр старшего байта счетчика ; M 1 j , рис. 3.16 | |
JMP | L1 | ||
TAB: | LXI | H,700 h | ; rp H = 0700 h |
MOV | A,C | ; A = 0 0 0 0 D 3 D 2 D 1 D 0 – код нажатой клавиши | |
ADD | A | ; A = A + A = 2C | |
MOV | C,A | ; формирование в rp B числа, равного | |
MVI | B,0 | ; удвоенному коду клавиши | |
DAD | B | ; HL = HL + BC = 0700 h + 2C – адрес памяти | |
MOV | A,M | ; A = d ML – младший байт данных | |
RET | |||
L1: | POP | PSW | |
POP | B | ||
POP | H | ||
EI | ; разрешение всех прерываний (после следующей ; команды) | ||
RET | ; возврат из подпрограммы обработки прерываний ; RST 7.5 |
3.7. Приемопередатчик, обслуживающий внешние устройства схемы
Через этот приемопередатчик осуществляется связь системной шины данных с внешними устройствами. На рис. 3.20 представлена схема приемопередатчика, в котором шина DB[7..0] подключена к локальной шине DAL[7..0], а шина DA[7..0] – к системной шине DBS[7..0]. При T = 1 обеспечивается передача от шины DA приемопередатчика к шине DB. Сигнал T = = , поэтому при выполнении команды IN port сигнал = 0 и приемопередатчик передает данные от внешнего устройства через локальную шину DB к системной шине DA, а далее от системной шины процессора через приемопередатчик процессора к локальной шине и в процессор. При выполнении
Рис. 3.20. Приемопередатчик внешних устройств |
команды OUT port сигнал = 1, происходит передача данных от DA к DB в приемопередатчике процессора, т. е. на системную шину данных, а затем от DA к DB в приемопередатчике внешних устройств, т. е. от системной шины данных к локальной и далее во внешнее устройство.
3.8. Дешифратор адресов
При работе имитатора CPU обращается к следующим устройствам:
две схемы памяти (ПЗУ и ОЗУ):
Рис. 3.21. Дешифратор адресов схем памяти |
○ ПЗУ 573РФ2 объемом 2K ´ 8 бит (для хранения программного обеспечения и таблицы данных);
○ ОЗУ 537РУ10 объемом 2K ´ 8 бит (для стека и хранения данных).
Поэтому необходимо использовать два дешифратора адресов – адресов схем памяти и адресов внешних устройств. Дешифратор адресов схем памяти выполнен на МЭ 74138 (рис. 3.21). Назначение выходных сигналов дешифратора, значения начальных ABEG и конечных AEND адресов представлены в табл. 3.12.
При построении схемы на макроэлементах, в состав которой входят два 16-разрядных счетчика, число внешних устройств увеличивается до восьми:
○ регистр младшего байта данных в делителе на
○ регистр старшего байта данных в делителе на
○ регистр младшего байта данных в делителе на
○ регистр старшего байта данных в делителе на
○ триггер знака ;
○ контроллер клавиатуры;
○ дисплей.
Таблица 3.12 Адреса схем памяти | ||||||
Адрес | A15– A14 | A13–A11 | A10 – A8 | A7 – A0 | A15–0 | |
ПЗУ | AB | 0000 h | ||||
AE | 07FF h | |||||
ОЗУ | AB | 0800 h | ||||
AE | 0FFF h | |||||
SP = AE + 1 | 1000 h |
Таблица 3.13 Адресация внешних устройств | ||
Сигнал | Адрес | Селектируемое устройство |
20 h –27 h | Дисплей | |
28 h –2F h | Клавиатура | |
2C h /2D h | Регистр мл. байта счетчика M 1 i | |
38 h –3F h | Регистр ст. байта счетчика M 1 i | |
68 h –6F h | Триггер X2 | |
70 h –77 h | Регистр мл. байта счетчика M 1 j | |
78 h –7F h | Регистр ст. байта счетчика M 1 j | |
Рис. 3.22. Дешифратор адресов внешних устройств |
Для создания схемы дешифратора адресов внешних устройств, обязанной обеспечить заданный адрес 28 h, выбираем значения разрешающих адресных сигналов BA7 = 0, BA5 = 1, а на адресные входы С, B и A подаем сигналы BA6, BA4 и BA3 (сигналы BA 2–0 не поступают на схему). Таблица 3.13 показывает адреса и названия внешних устройств, селектируемых дешифратором. На рис. 3.22показана схема дешифратора адресов внешних устройств.
3.9. Организация памяти
Принципиальная схема памяти изображена на рис. 3.23: 573РФ2 – ПЗУ объемом 2 K ´ 8 бит, 537РУ10 – ОЗУ объемом 2K ´ 8 бит. Выбор ПЗУ производится значением сигнала = 0, а выбор ОЗУ – значением сигнала = 0. Адресные сигналы BA 10–0 подаются непосредственно на адресные входы БИС и обеспечивают адресацию 2K 8-разрядных ячеек памяти от адреса 0000 h до адреса 07FF h для ПЗУ и от адреса 0800 h до адреса 0FFF h для ОЗУ (см. табл. 3.12). Чтение ПЗУ и ОЗУ производится значением сигнала = 0, а запись данных в ОЗУ – сигналом = 0. Обычно под стек
Рис. 3.23. Схема подключения памяти |
отводится часть ОЗУ, занимающая старшие адреса, поэтому инициализацию стека следует производить командой LXI SP,1000 h.
Данные D 7–0 должны подаваться с системной шины данных BD 7–0 через приемопередатчик (см. рис. 1.3). При обращении CPU к другим устройствам (пульт управления, плата расширения системы) этот приемопередатчик должен быть выключен, поэтому следует правильно определить управляющий приемопередатчиком сигнал .
3.10. Дисплей
Пульт управления (ПУ) состоит из клавиатуры и дисплея. Значения параметров Ti и vj задаются с клавиатуры. Дисплей выполняется на базе 5-разрядного 7-сегментного светодиодного индикатора АЛС328В (рис. 3.24, а–г). Cхема контроллера дисплея приведена на рис. 3.24, д.
разряд 1 – индикация числа (период Ti),
разряды 2 и 3 – индикация направления b/F («–» – back, «+» – Forward) и числа (скорость vj * ),
разряды 4 и 5 – индикация направления b/F и числа (скорость vj),
где v j*– предыдущее значение скорости цели, vj – текущее значение скорости. Постоянный прямой ток через сегмент I max = 10 мА.
Таблица 3.14 | |
Функции управляющих сигналов | |
Вход | Значение |
MODE | 1 – HEX код Z-состояние – код B 0 – дисплей погашен |
0 – загрузка 1 – нет загрузки |
Принципиальная схема и схема подключения дисплея изображены на рис. 3.24. Управление дисплеем производится при помощи специализированной микросхемы ICM7218C [4] как обычным внешним устройством. Для конфигурации схемы драйвера необходимо на вход MODE подать одно из трех логических состояний (см. табл. 3.14).
Таблица 3.15 | |||||
Коды управляющих катодов светоизлучающих диодов | |||||
Порт внешнего устройства | Линии данных | Унитарный код | Номер разряда | ||
20 h | D1 | ||||
21 h | D2 | ||||
22 h | D3 | ||||
23 h | D4 | ||||
24 h | D5 | ||||
25 h | D6 | ||||
26 h | D7 | ||||
27 h | D8 |
Управление драйвером дисплея происходит согласно сигналам кода данных ID и адреса разряда DA (см. табл. 3.15–3.16).
Например, на пятый разряд необходимо вывести число 3. Для этого на шину записывается код пятого разряда 100, а на шину код числа «3» – 0011.
MVI | A, 0011 b | ||
OUT | 24 h |
Переменные: TN = 1, 2, 3, 4 (период зондирующих импульсов);
– VS1 = (знак предыдущей скорости);
– VN1 = 0, 1,.., 7 (модуль предыдущей скорости);
– VS2 = (знак текущей скорости);
– VN2 = 0, 1,..., 7 (модуль текущей скорости);
– DN = 0, 1, 2, 3, 4 (номер разряда дисплея).
Для хранения значений кодов предыдущего направления и скорости в
ОЗУ резервируются 2 ячейки памяти. Первая ячейка (с адресом 0803 h) соответствует предыдущему направлению, вторая (с адресом 0804 h) – предыдущей скорости.
Рис. 3.24. Контроллер 5-разрядного 7-сегментного дисплея |
DN1 | DN2 | DN3 | DN4 | DN5 | |
TN | VS1 | VN1 | VS2 | VN2 | |
20 h | 21 h | 22 h | 23 h | 24 h | – катоды (OUT port) |
803 h | 804 h | – адрес ячейки памяти |
Процесс вычисления значения разряда дисплея происходит следующим образом: если нажата клавиша скорости, значение которой лежит в пределах 0…7, то код нажатой клавиши отправляется непосредственно по адресу требуемого разряда дисплея.
Дата добавления: 2015-12-08; просмотров: 70 | Нарушение авторских прав