литература / Пухальский Проектирование микропроцессорных систем 2001
.pdf1.9. Генератор и системный контроллер |
101 |
мости использовать не только все адресное пространство ввода-вывода, но и все адресное про странство памяти. Выгода же очевидна — уменьшаются аппаратные затраты на реализацию дешифрации адресов портов ввода-вывода.
Для устройств ввода-вывода можно использовать и независимый адресный дешифратор 1533ИД7. Так, каждый выход дешифратора, изображенного на рис. 1.36, будет селектировать
по четыре порта ввода-вывода, адреса которых указаны в табл. 1.17. |
|
|
|
|
|||||||||||
|
|
|
Таблица 1.17. Адресация внешних устройств |
||||||||||||
1533ИД7 |
|
Разряды адреса |
Выход |
|
Адреса |
|
|||||||||
7 |
6 |
5 |
4 |
3 |
2 |
1 0 |
DMX |
|
портов |
|
|||||
1 |
РМГ |
0 |
|
|
|||||||||||
0 |
1 |
1 |
0 |
0 |
0 |
X X |
0 |
60, |
61, |
62, |
63 |
||||
г |
1 |
||||||||||||||
4 |
|
г { |
0 |
1 |
1 |
0 |
0 |
1 |
X X |
1 |
64, |
65, |
66, |
67 |
|
&Е |
|
Я f |
0 |
1 |
1 |
0 |
1 |
0 |
X X |
2 |
68, |
69, |
6А, |
6В |
|
|
|
||||||||||||||
1 |
|
5 с |
0 |
1 |
1 |
0 |
1 |
1 |
X X |
3 |
6С, 6D, 6Е, |
6F |
|||
2 |
|
7 ^ |
0 |
1 |
1 |
1 |
0 |
0 |
X X |
4 |
70, |
71, |
72, |
73 |
|
3 |
|
0 |
1 |
1 |
1 |
0 |
1 |
X X |
5 |
74, |
75, |
76, |
77 |
||
(от ОШ С) |
|
|
|||||||||||||
Рис. 1.36. Адресный дешифратор |
0 |
1 |
1 |
1 |
1 |
0 |
X X |
6 |
78, |
79, |
7А, |
7В |
|||
0 |
1 |
1 |
1 |
1 |
1 |
X X |
7 |
7С, |
7D, |
7Е, |
7F |
||||
Заметим, что в интерфейсных БИС применяются и более изощренные способы адресации внутренних регистров, чем их прямая адресация с помощью шины адреса. Например, одна часть байта, поступающего от МП в интерфейсную БИС, может содержать адрес регистра, адругая часть — данные. Такой способ адресации (по шине данных) используется с целью уменьшения числа адресов портов, занимаемых БИС в адресном пространстве ввода-вывода. Применяется также и способ адресации регистров БИС с помощью внутреннего цифрового автомата, изменяющего свои состояния в строго соблюдаемой последовательности при каждой записи в нее байта данных. Каждое же состояние автомата адресует определенный регистр. Таким образом, интерфейсные БИС могут иметь значительно большее число регистров памяти, доступных микропроцессору, чем непосредственно адресуемое командами IN port и OUT port.
М одульность построения МП-систем. Рассматриваемый микроконтроллер выполнен на трех небольших печатных платах, на каждой из которых имеется свой приемопередатчик для системной шины данных:
плата 1 — центральное процессорное устройство на МП 8085А (см. рис. 1.10) или МП 8080А (см. рис. 1.32), память и интерфейсные БИС (рис. 1.33 и 1.34), матричный шифратор 16-клавишной клавиатуры (см. рис. 1.37) и 5-разрядный 7-сегментный дисплей (см. рис. 1.38);
плата 2 — программатор EPROM 573РФ2/573РФ5, выполненный на программируемом параллельном интерфейсе 580ВВ55А (см. рис. 3.16);
плата 3 — контроллер 64-клавишной клавиатуры и 16-разрядного алфавитно-цифрового дисплея (см. рис. 3.144 и 3.145), который может использоваться параллельно или вместо мат ричного шифратора клавиатуры и 5-разрядного 7-сегментного дисплея.
Приведенное разбиение микроконтроллера на платы демонстрирует модульность по строения МП-систем — плата 1 уже представляет собой законченный микроконтроллер, спо собный воспринимать команды, вводимые оператором с клавиатуры, и выводить результат выполнения программ на дисплей (функционирование платы 1 не зависит от наличия или от сутствия плат 2 и 3). С помощью таймера 580ВИ53 на его выходе OUTx можно получить метки времени 1 с из сигнала ф2, частота которого равна 2 11 кГц, если два канала таймера запрограм мировать на коэффициенты деления 2й и 103. Контроллер прерываний обеспечивает выполне
1 0 2 |
Глава 1. Микропроцессоры 8080 и 8085 |
ние операций ввода-вывода в реальном масштабе времени с обслуживанием 8 внешних уст ройств. В частности, по запросам прерываний сигналом OUTx - 1R-, программным способом можно организовать счет времени в минутах и часах с выводом текущего времени на дисплей.
При подключении плат расширения функциональных возможностей микроконтроллера следует обеспечить, чтобы при выполнении операций ввода данных в МП они могли поступать только от одного из приемопередатчиков, установленных на печатных платах (включая и пла ту 1). Сигналы выбора кристалла GS30 и CS38, формируемые на плате 1, управляют интер фейсными БИС 580ВВ55А, 580ВВ79 и соответствующими им приемопередатчиками, располо женными на платах 2 и 3, что экономит аппаратные затраты на дешифраторы адресов. В связи с этим приемопередатчиком 1533АП6 на плате 1 (рис. 1.33) должны управлять сигналы
Ш = ДАis v ВАН v (CS38 v CS30) 1/OR и Т = MEMR v I/OR
включения приемопередатчика (ОЕ) и указания направления передачи данных (Т). Значение сигнала ОЕ = 1 (приемопередатчик выключен) при обращении к внешним устройствам, селек тируемым сигналами CS38 = 0 или GS30 = 0 при их чтении (IIOR - 0). Таким образом, данный приемопередатчик обслуживает адресное пространство памяти 0000 3FFF/; и адресное про странство портов ввода-вывода 00 2Fh.
Матричный контроллер клавиатуры. На рис. 1.37, а приведен пример внешнего уст ройства ввода данных с помощью любого из двух методов: программного метода ввода с кви тированием (используется флаг IBF — см. § 2.3) или метода ввода по прерыванию (использу ется сигнал IRQ — см. § 2.4). Данное внешнее устройство представляет собой матричный кон троллер клавиатуры, содержащий 17 клавиш. Выход IRQ можно подключить к входу IR0 кон троллера прерываний 580ВН59А (рис. 1.33) или к входу RST 7.5 микропроцессора 8085.
Принцип работы контроллера клавиатуры основан на сканировании матрицы из 16 кла виш с помощью синхронного 4-разрядного двоичного счетчика 561ИЕ11 и 8-канального муль- типлексора-демультиплексора 561КП2 (M UX -DM X ; см. § 6.5 в книге [5]). Выходные сигналы трех младших разрядов счетчика бг-о поданы на адресные входы каналов MUX-DMX. Эти сиг налы поступают на его внутренний дешифратор D C 3 x 8 , который обеспечивает периодиче ское сканирование (опрос) линий возврата /?L7_o (Return Line) матрицы. Вертикальные сигналь ные линии матрицы периодически переключаются внешним дешифратором DC 1 х 2, выдаю щим на них сигналы Q3 и <2зЗначения выходных сигналов этих двух дешифраторов однознач но определяют текущее состояние счетчика. Поэтому при нажатии клавиши к = 0 ... 15 выход ной сигнал Scan ИС 564КП2 примет значение 1 в момент времени, когда счетчик 561ИЕ11 на ходится в состоянии к = QiQiQiQu (рис. 1.37, б). Это приведет к получению значения сигнала Р0 = 1, которое блокирует дальнейшие изменения его состояний. Изменение сигнала Р и с 0 на 1 вызывает срабатывание триггера, выдающего сигналы IBF/IRQ, информирующие МП о готов ности кода нажатой клавиши. Пока клавиша нажата, счет будет заторможен, и на буфер дан ных 561JIH3 счетчик будет выдавать число к. Далее будем считать, что микроконтроллер по строен на основе МП 8085А и используется метод ввода данных по прерыванию.
В ответ на значение сигнала IRQ - 1 микропроцессор вызывает подпрограмму обслужива ния прерывания, которая выполняет чтение состояния буфера данных
D7D6D5D4 О зВД О о = Ш Shift хх Q3Q2Q 1Q0,
где х — неопределенные значения разрядов; Shift — дополнительная 17 клавиша (“пассивная”), удваивающая число кодов основных 16 клавиш.
После ввода байта данных МП должен выполнить команду OUT С.уОО д л я сброса триггера, формирующего сигналы IBF/IRQ, в исходное состояние. При отпускании клавиши сигнал Р 0 установится в 0, и счетчик продолжит счет — сканирование клавиатуры возобновится.
1.9. Генератор и системный контроллер |
103 |
5 ) |
Нажатие клавиши----- |
^ |
^— Отпускание клавиши |
я ш гш и и и Ш ___ rlTLn_JbrLruTJui_n_r
IBF/IRQ
Рис. 1.37. Матричный контроллер клавиатуры
Задача 1. Написать программу ввода по прерыванию кода нажатой клавиши. Записать принятый код в ячейку памяти с символическим именем Key. Решение:
PUSH |
PSW |
; Сохранение в стеке состояния прерванной программы |
PUSH |
Н |
|
PUSH |
D |
|
PUSH |
В |
___ |
IN |
C.vOO |
; А < - D 7D 6x x D3D2D,D0 = IBF Shift xx QiQ2Q\Qq ( С у00 = 00h) |
ANI |
0CFh |
; A <— A & CF/г (CF/г = 1100 1111): “очистка” случайных значений D5D4 |
104 |
|
Глава 1. Микропроцессоры 8080 и 8085 |
я) |
|
б) |
|
|
14 |
|
т " " |
ф д я |
|
-* 12 |
|
|
|
&
|
|
|
|
|
i / v |
* |
|
|
|
|
|
-* |
2 |
|
|
|
|
|
ф д я |
|
|
|
|
|
|
|
10 |
|
|
|
|
|
ф л т > |
|
|
|
|
|
|
- 1 |
8 |
|
|
|
|
|
У ” |
5 |
|
|
|
|
|
А ™ |
|
i |
|
13 |
4 11 |
9 |
7 |
|
ст, |
|
ст9 ст3 |
c r 4 |
с т 5 |
|
|
с>) |
|
|
1533ИК7 |
|
|
|
|
|
Local |
|
|
||
|
|
|
|
0 |
|
|
Data Bus |
0 |
RG |
|
|||
|
|
|
и |
|
|
|
|
|
|
|
0 |
|
|
|
|
d 2 - |
2 |
|
7 |
|
HS. |
D3 - \ |
3 |
|
3 |
|
|
D4- |
4 |
|
4 |
|
||
|
|
D5 - |
5 |
|
5 |
|
|
|
|
6 |
|
б |
|
|
____£ 7 - |
7 |
|
7 |
|
|
|
l/O W - |
>с* |
|
|
|
|
|
CSQS- |
1 |
|
|
|
|
|
|
|
1533ИР27 |
|
|
|
|
|
|
£> |
RG |
Q |
|
|
|
D0 — |
0 |
|
|
|
|
|
|
0 |
|
||
|
|
Dl - |
|
|
1 |
|
|
|
D2 - |
2 |
|
? |
|
с т ■ Дз “ |
3 |
|
"7 |
|
||
4 |
|
4 |
|
|||
L |
-1 |
А , — |
|
|
||
|
|
DS - |
5 |
|
5 |
|
|
|
d 6 - |
6 |
|
6 |
|
|
|
d 7 - |
7 |
|
7 |
|
|
I/O W — X |
|
|
|
||
|
m o —<!>i |
|
|
|
||
«) |
|
|
|
|
|
|
c r, |
|
i |
i |
|
|
|
11
c r 2
с^з
И
□
«) 14 8
Л Г1П п_п п п
<г< D и С
<I____( I
'□ e r a е г о it t j
1 2 3 4 5 6 7
Ю115Г
c r 4
C T 5
АЛС328В
4
* H 7 S
R
С
D
Я
F
G
H
CT
0
2
3
4 J
АЛС328В
A
* H 7 S
n u D
Я
F
G
H
CT
0
2
3
4
5
Рис. 1.38. 5-разрядный 7-сегментный дисплей
|
|
1.9. Генератор и системный контроллер |
105 |
STA |
Key |
; |
|
OUT |
CsOO |
; Вывод произвольного байта для сброса триггера IRQ запроса ввода |
|
|
|
Программа, выполняющая действия, по коду нажатой клавиши |
|
POP |
В |
Восстановление состояния прерванной программы |
|
POP |
D |
|
|
POP |
H |
|
|
POP |
PSW |
' Разрешение прерываний |
|
EI |
|
|
|
RET |
|
Возврат в прерванную программу |
|
Для уменьшения потребляемой мощности контроллер клавиатуры выполнен на КМОП ИС. Если необходимо построить 64-клавишный контроллер клавиатуры, то вместо 4-разряднго счетчика и дешифратора DC 1 х 2 следует взять 6-разрядный счетчик и дешифратор DC 3 х 8 и на его адресные входы подать сигналы с трех старших разрядов счетчика (вместо двух верти кальных линий в сканируемой матрице будет восемь линий). Следует заменить также 6-разрядный буфер данных 561ЛНЗ 8-разрядным буфером. Остальная часть схемы контроллера останется без изменений.
Период сканирования 16-клавишной клавиатуры равен 16 • Гн, где 7V— период тактового сигнала Н, вырабатываемого генератором, выполненном на триггере Шмитта 561TJT2. Чем ни же частота этого генератора, тем надежнее исключается “дребезг” контактов клавиш. При час тоте генератора 7 кГц дребезг в 64-клавишной клавиатуре надежно устраняется даже при ис пользовании не высококачественных клавиш.
5-разрядный 7-сегментный дисплей. В качестве дисплея в МП-системе можно исполь зовать 7-сегментные светоизлучающие индикаторы [8]. На рис. 1.38, а показана структура 5-разрядного 7-сегментного индикатора AJIC328B, на рис. 1.38, б — расположение и обозначе ния сегментов, на рис. 1.38, в — внешний вид индикатора и на рис. 1.38, г — его условное гра фическое обозначение (СТ — Cathode). Прямой постоянный ток через сегмент = 5 мА.
Принципиальная схема контроллера дисплея, содержащая два порта вывода для управле ния сегментами и катодами индикатора в мультиплексном режиме, изображена на рис. 1.38, д. Временные диаграммы, показанные на рис. 1.38, е, наглядно поясняют работу схемы. Для ис ключения мигания индикатора частота развертки выбирается не менее 50 Гц. Для мультип лексной развертки разрядов индикатора следует использовать унитарный код для представле ния значений катодов СТ5_{ (табл. 1.18). Таблицу кодов управления катодами можно хранить в ПЗУ (А — адрес ПЗУ). Преобразование 16-ричных чисел X = 0, 1, ..., 9, А, В, ..., F и некоторых символов в 7-сегментный код У = Yc Yf YeY0 YcYbYa проще всего выполняется табличным спосо бом (табл. 1.19). Для этого все используемые символы должны быть пронумерованы числами X. Коды Y должны храниться в ПЗУ по адресам, возрастающим в порядке увеличения числа X. Это позволяет достаточно просто по числу X вычислить адрес кода Y и вывести его в регистр
памяти значений сегментов в контроллере дисплея. |
|
|
|
|
|
|
|
|
|
|
|
|||
Информация, выводимая на дисплей, должна |
|
|
|
|
|
|
|
|
|
|
|
|||
храниться в ОЗУ в пяти ячейках памяти в виде чисел |
Таблица 1.18. Управление катодами |
|||||||||||||
X. Шестую ячейку памяти ОЗУ следует отвести для |
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
||||
хранения текущего |
номера |
мультиплексируемого |
|
Унитарный код |
|
Катод |
Y |
А |
||||||
разряда дисплея. Например, |
для вывода на дисплей |
|
|
|||||||||||
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
CTi |
01 |
0740 |
||||
сообщения “-П ЗУ -” |
в ячейки памяти следует запи |
|||||||||||||
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
ст2 |
02 |
0741 |
||||
сать числа 17, 20, 3, 22 и 17, а для вывода сообщения |
||||||||||||||
"-ОЗУ-” — числа 17, 0, 3, 22 и 17. Эти сообщения |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
стъ |
04 |
0742 |
|||
можно использовать при тестировании для иденти |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
ст4 |
08 |
0743 |
|||
фикации неисправных устройств. |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
СТ, |
10 |
0744 |
|||
106 |
|
|
|
|
Глава 1. Микропроцессоры 8080 и 8085 |
|
|
||||||||||
|
|
Таблица 1.19. Управление 7-сегментным дисплеем |
|
|
|||||||||||||
X |
|
x 4 Хз |
x 2 X, |
Xo |
Yc |
Yf |
Ye |
Yd |
Yc |
Yb |
Ya |
Символ |
Y |
A |
|||
00 |
00 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
G |
40 |
0720 |
|
01 |
01 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
1 |
r |
1 |
79 |
0721 |
T |
1 |
||||||||||||||||
02 |
02 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
a |
24 |
0722 |
|
03 |
03 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
3 |
|
30 |
0723 |
04 |
04 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
4 |
|
19 |
0724 |
05 |
05 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
s |
|
12 |
0725 |
06 |
06 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
6 |
|
02 |
0726 |
07 |
07 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
“1 |
78 |
0727 |
|
|
1 |
||||||||||||||||
08 |
08 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
8 |
|
00 |
0728 |
09 |
09 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
9 |
|
10 |
0729 |
10 |
0A |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
R |
08 |
072A |
|
11 |
0B |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
b |
03 |
072B |
|
12 |
ОС |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
p |
|
46 |
072C |
13 |
0D |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
|
21 |
072D |
|
d |
|
||||||||||||||||
14 |
0E |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
E |
|
06 |
072E |
15 |
OF |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
F |
|
0E |
072F |
16 |
10 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
£ I |
7F |
0730 |
|
17 |
11 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
-r*'i |
3F |
0731 |
|
18 |
12 |
1 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
r |
4E |
0732 |
|
19 |
13 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
И |
09 |
0733 |
|
20 |
14 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
n |
48 |
0734 |
|
21 |
15 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
R |
ОС |
0735 |
|
22 |
16 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
3 |
|
11 |
0736 |
23 |
17 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
и |
|
47 |
0737 |
24 |
18 |
1 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
LI |
41 |
0738 |
|
25 |
19 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
H |
IB |
0739 |
|
26 |
1A |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
0 |
1 |
J |
|
71 |
073A |
Задача 2. Написать программу управления 5-разрядным 7-сегментным дисплеем с вы водом информации по прерыванию. Решение:
defseg |
S_rstl5, start = 3Ch |
; 7,5 x 8 = 60d = 3Ch |
||
seg |
S_rst75 |
; ROM |
|
|
; Подпрограмма обработки прерывания RST 7.5 |
||||
PUSH |
PSW |
|
; Сохранение в стеке состояния прерванной основной программы |
|
PUSH |
Н |
|
; (подпрограмма RST 7.5 использует РОНы Н, L и В) |
|
PUSH |
В |
|
|
|
LXI |
Н, Тп + 5 ; HL = 0805/г — адрес хранения текущего активного разряда |
|||
INR |
М |
|
|
|
MVI |
A, |
; Обеспечение счета по модулю 5 обслуживаемых разрядов индикатора |
||
CMP |
M |
|
|
|
JNZ |
LR1 |
|
|
|
SUB |
A |
|
|
|
MOV |
M, A |
|
|
|
LR1: MOV |
A, M |
|
|
|
ADD |
L |
|
|
|
SUI |
5 |
|
|
|
|
|
|
1.9. Генератор и системный контроллер |
107 |
|
|
MOV |
L, A |
; В — номер разряда индикатора |
|
|
|
MOV |
B, A |
|
||
|
MOV |
A, M |
; T ls - 0720ft — начальный адрес таблицы 7-сегментных кодов |
||
|
LXI |
H, Tls |
|||
|
ADD |
L |
|
|
|
|
MOV |
L, A |
|
|
|
|
SUB |
A |
|
|
|
|
OUT |
CSct |
; Гашение дисплея (Blanking Display) |
|
|
|
MOV |
A, M |
; Вывод значений сегментов (Output Segment) |
||
|
OUT |
CShs |
|||
|
LXI |
H, Tct |
; Tct = 0740ft — начальный адрес таблицы унитарного кода катодов |
||
|
MOV |
A, В |
|
|
|
|
ADD |
L |
|
|
|
|
MOV |
L, A |
|
|
|
|
MOV |
A, M |
; Включение разряда дисплея (Output Cathode) |
||
|
OUT |
CSct |
|||
|
POP |
В |
; Восстановление состояния прерванной основной программы |
||
|
POP |
H |
|
|
|
|
POP |
PSW |
|
|
|
|
EI |
|
; Возврат из подпрограммы обработки прерывания RST 7.5 |
||
|
RET |
|
|||
Ram |
equ |
800ft |
; Ram = 0800/г — начальный адрес RAM |
Data Segment |
|
Rsz |
equ |
800ft |
; Rsz = 800ft — объем RAM (RAM Size) |
|
|
Ssz |
equ |
20ft |
; Ssz = 20ft — размер стека (Stack Size) |
|
|
|
defseg D\_seg, start = Ram, class = Data |
|
|
||
|
seg |
D\_seg |
; RAM |
|
|
Tn |
ds |
6 |
; Tn = Ram = 0800ft, M(0805) — текущий номер разряда дисплея |
||
|
defseg |
D2_seg, start = 720ft, class = Data ; T ls = 0720ft — начальный адрес таблицы |
|||
Tls |
seg |
D2_seg |
; ROM |
|
кодов сегментов Tls |
db |
40ft, 79ft, 24ft, 30ft, 19ft, 12ft, 2, 78Л, 0, 10ft, 8, 3, 46ft, 21ft, 6, OEft |
||||
|
db |
7Fft, 3Fft, 4Eft,9, 48ft, OCft,lift, 47ft, 41ft, |
lBft, 71ft |
|
|
|
defseg |
D3_seg, start = 740ft, class = Data |
|
|
|
|
seg |
D3_seg ; ROM |
|
|
|
Tct |
db |
1,2, 4, 8, |
10ft, 0 ; Tct = 0740ft — начальный адрес таблицы кодов катодов Tct |
||
|
defseg |
Stack_seg, start = Ram + Rsz - Ssz, class = Data |
; Stack Segment |
||
|
seg |
Stack_seg |
|
|
|
|
ds |
Ssz |
|
|
; I/O Segment |
|
defseg |
IO_seg, start = 8, class = lOspace |
|
||
|
seg |
IO_seg |
; Порты вывода |
|
|
CShs |
ds |
1 |
; CShs = 08ft — адрес порта вывода кода сегментов (рис. 1.38) |
||
|
org |
10ft |
; CSct = 1 0 ft — адрес порта вывода кода катодов |
||
CSct |
ds |
1 |
|||
|
defseg |
Main_seg, start = 100ft, class = Code |
|
; Code Segment |
|
|
seg |
Main_seg ; ROM |
|
|
|
|
LXI |
SP, Ram + Rsz ; Инициализация указателя стека SP |
|
||
|
LXI |
H,0011ft |
; Инициализация RAM для вывода на дисплей сообщения: -О ЗУ - |
||
|
SHLD |
Tn |
; М(0800) <—11ft — символ |
М (0801) <— 00ft — символ “0” |
|
|
LXI |
H, 1603ft |
; Н < - 16ft, L < - 03ft |
|
|
|
SHLD |
Tn + 2 |
; М(0802) <— 03ft — символ “3”, М(0803) <— 16й — символ “У” |
||
108 |
|
Глава I. Микропроцессоры 8080 и 8085 |
LXI |
Н, 0411/г |
; Н <—04/г, L <— 11Л |
SHLD |
77; + 4 |
; А/(0804) <— 11/г— символ |
|
|
; М{0805) <— 04h — номер разряда дисплея |
MVI |
A ,0B h |
; А <— ОВ/г = 0000 1011 (А3 = MCE = 1, А2 = M l.5 = 0) |
SIM |
|
; Разрешение прерывания по входу RST 7.5 |
EI |
|
; Общее разрешение прерывания |
LM1: JMP |
LM1 |
; Свернутая в одну точку основная программа |
e n d |
|
; Конец программы |
Частота запросов прерываний должна быть не менее 250 Гц, чтобы обеспечить частоту развертки не менее 50 Гц. Для генерации запросов прерываний обычно используется таймер 580ВИ53 (8253 фирмы Intel). Чем выше частота развертки, тем больше будут затраты процес сорного времени на обслуживание индикатора.
В подпрограмму обслуживания дисплея, например перед командой POP В, можно доба вить команды для программного ввода с квитированием байта данных с клавиатуры:
IN |
C.S-00 |
AN1 |
0CFh |
MOV |
C, A |
ANI |
80h |
JNZ |
LR2 |
OUT С.Ю0 |
|
LR2: POP |
В |
А <- D 7D 6x x D3D2D\D0 = 1 b F Shift xx Q3QzQ\Qu (CsOO = 00h)
A <— A & CFh (CFh = 1100 1111): очистка случайных значений DSD4 С <— очищенный код нажатой клавиши
Анализ значения флага IBF
;Вывод произвольного байта для сброса триггера IRQ запроса ввода
;Программа, выполняющая действия, по коду нажатой клавиши
;Эта команда в подпрограмме уже есть
В этом случае вход запроса прерываний, обслуживающий клавиатуру, освобождается для других целей. Если время выполнения операций по коду нажатой клавиши будет больше 4 мс, то очередной запрос прерывания будет пропущен, что может привести к временному измене нию яркости одного из разрядов индикатора. Частота опроса клавиатуры равна 250 Гц, что вполне приемлемо.
1.10. Статические запоминающие устройства
Для записи, хранения и чтения данных в процессе их обработки используются оператив ные запоминающие устройства (ОЗУ) с произвольной выборкой (RAM — Random Access Mem ory). Они содержат 2" ячеек памяти, однозначный выбор которых производится адресными сигналами А„_,, ..., Ло- В современных МП-системах находит применение как статическая память (SRAM — Static RAM), так и динамическая память (DRAM — Dynamic RAM). В SRAM
запоминание информации производится в триггерах, а в DRAM — на конденсаторах. Длитель ность хранения информации в триггерах не ограничена, тогда как время хранения информации на конденсаторах определяется токами утечки через шунтирующие цепи, а, следовательно, с некоторой частотой необходимо производить регенерацию заряда на конденсаторах, что ус ложняет процесс управления памятью. В первых DRAM допустимое время хранения информа ции составляло 1 ...2 мс, что соответствует частоте регенерации ячеек памяти 1,0... 0,5 кГц. В современных DRAM это время составляет 8 ... 128 мс.
Площадь, занимаемая на кристалле одной ячейкой памяти в DRAM, значительно меньше, чем в SRAM, что обуславливает высокую плотность их упаковки и как результат — гораздо меньшую стоимость одного бита информации. Выпускаются и синхронные SRAM и DRAM (SSRAM — Synchronous SRAM, SDRAM — Synchronous DRAM).
