книги / Вычислительная техника и информационные технологии. Цифровые автоматы и микроконтролеры. Руководство к лабораторным работам в системе PROTEUS 7.2 SP6
.pdfРис. 4.3. Граф автомата Мили
Построим обобщенную таблицу переходов-выходов (табл.4.1). Используем D-триггеры со входами d2, d1.
Таблица 4.1
y2 |
y1 |
x2 |
x1 |
y2(t+1) |
y1(t+1) |
|
Микрооперации |
|
|||
d2(t) |
d1(t) |
z1 |
z2 |
z3 |
z4 |
z5 |
|||||
|
|
|
|
||||||||
0 |
0 |
~ |
~ |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
|
0 |
1 |
~ |
~ |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
|
1 |
1 |
~ |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
|
1 |
1 |
~ |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
|
1 |
0 |
0 |
~ |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
|
1 |
0 |
1 |
~ |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
Рассмотрим обобщенную таблицу переходов-выходов, получим по ней таблицу программирования ПЗУ путем преобразования всех функций в СДНФ – совершенную дизъюнктивную нормальную форму (табл. 4.2).
Таблица 4.2
|
Адреса |
|
|
|
Данные |
|
|
|
|||
y2 |
y1 |
x2 |
x1 |
y2(t+1) |
y1(t+1) |
|
Микрооперации |
|
|||
d2(t) |
d1(t) |
z1 |
z2 |
z3 |
z4 |
z5 |
|||||
|
|
|
|
||||||||
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
|
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
|
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
|
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
|
|
|
|
|
|
51 |
|
|
|
|
|
Окончание табл. 4.2
1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
||||||||||||
0 |
|
0 |
|
1 |
|
1 |
|
0 |
|
1 |
|
1 |
|
0 |
|
0 |
|
0 |
|
0 |
|
|||||||||||
0 |
|
1 |
|
0 |
|
0 |
|
1 |
|
1 |
|
0 |
|
1 |
|
0 |
|
0 |
|
0 |
|
|||||||||||
|
0 |
|
|
1 |
|
|
0 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
0 |
|
|
1 |
|
|
0 |
|
|
0 |
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
0 |
|
1 |
|
1 |
|
0 |
|
1 |
|
1 |
|
0 |
|
1 |
|
0 |
|
0 |
|
0 |
|
|||||||||||
0 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
0 |
|
1 |
|
0 |
|
0 |
|
0 |
|
|||||||||||
|
1 |
|
|
1 |
|
|
0 |
|
|
0 |
|
|
1 |
|
|
0 |
|
|
0 |
|
|
0 |
|
|
1 |
|
|
0 |
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
1 |
|
1 |
|
1 |
|
0 |
|
1 |
|
0 |
|
0 |
|
0 |
|
1 |
|
0 |
|
0 |
|
|||||||||||
1 |
|
1 |
|
0 |
|
1 |
|
1 |
|
1 |
|
0 |
|
1 |
|
0 |
|
0 |
|
0 |
|
|||||||||||
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
1 |
|
|
0 |
|
|
1 |
|
|
0 |
|
|
0 |
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
1 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
1 |
|
0 |
|
|||||||||||
1 |
|
0 |
|
0 |
|
1 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
1 |
|
0 |
|
|||||||||||
|
1 |
|
|
0 |
|
|
1 |
|
|
0 |
|
|
0 |
|
|
0 |
|
|
0 |
|
|
0 |
|
|
0 |
|
|
0 |
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
1 |
|
0 |
|
1 |
|
1 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
1 |
|
Запишем массив шестнадцатеричных чисел – таблицу про-
граммирования ПЗУ: 30Н,30Н, 30Н, 30Н, 68Н, 68Н, 68Н, 68Н, 02Н, 02Н,01Н,01Н,44Н,68Н, 44Н,68Н. Схема имеет вид(рис.4.4).
Рис. 4.4. Микропрограммное устройство управления
Сформируем НЕХ-массив. Для этого используем программу PLA16, в которой имеется таблица TABL, в которой и записываем нашу таблицу.
52
Открываем папку «Ассемблер 51» (рис. 4.5).
Рис. 4.5. Выбор рабочей папки
Открываем готовый (созданный ранее) файл PLA16.ASM и изменяем в нем таблицу.
TABL: |
|
|
db 30H,30H,30H, |
|
|
db 30H,68H,68H, |
|
|
db 68H,68H,02H, |
|
|
db 02H,01H,01H, |
|
|
db 44H,68H,44H, |
|
|
db 68H,00H,00H, |
|
|
db 00H,00H,00H, |
|
|
db 00H,00H,00H, |
00H |
|
P1 EQU 90H |
|
|
P2 EQU 0A0H |
|
|
Begin:MOV A, P1 |
; Считываем и заносим в аккумулятор А |
|
ANL A, #03h |
; Маскируем |
|
MOV R1, A |
; в R1 |
|
MOV A, R3 ; Внутреннее состояние в R3
53
ORL A, R1 ; Получаем полное входное слово MOV R1, A ; Полное входное слово в R1
MOV R2,#0 |
|
; Обнуляем R2 в нем выход |
MOV DPTR,#TABL |
; Указатель на массив констант |
|
CLR A |
|
; Очищаем аккумулятор |
MOVC A,@A+DPTR |
; Загружаем Х0(i) в А |
|
MOV R0,A |
|
; Х0(i) в R0 |
Next: MOV A, R0 |
|
; Х0(i) в A |
ANL A,R1 |
|
; Маскируем входное слово Х0(i) |
MOV R0,A |
|
; Результат в R0 |
CLR A |
|
; Очищаем аккумулятор |
INC DPTR |
|
; Инкрементируем регистр указателя |
MOVC A,@A+DPTR |
; Загружаем ХD(i) в А |
|
XRL A,R0 |
; Сложение по модулю 2 с предыдущим |
|
|
; результатом |
|
INC DPTR |
|
; Инкремент регистра указателя |
JNZ Check |
|
; Переход если ноль |
CLR A |
|
; Очищаем аккумулятор |
MOVC A,@A+DPTR |
; Загружаем Z(i) |
|
ORL A,R2 |
|
; Получаем выходное слово |
MOV R2,A |
|
; Сохраняем результат в R2 |
Check:CLR A |
|
; Очищаем аккумулятор |
INC DPTR |
|
; Инкрементируем регистр указателя |
MOVC A,@A+DPTR |
; Загружаем Х0(i + 1) |
|
MOV R0,A |
|
; Х0(i + 1) в R0 |
JNZ Next |
|
; Переход по нулю |
MOV A,R2 |
|
; Выход в R2 |
ANL A,#0CH |
|
; Выделяем y2(t + 1)y1(t + 1) |
MOV R3,A |
|
; Результат в R3 |
MOV P2, R2 |
|
; Выход на Р2 |
jmp Begin |
|
|
NOP |
|
|
NOP |
|
|
NOP |
|
|
NOP |
|
|
NOP
NOP
NOP
54
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
END
После изменения программы ее необходимо откомпилировать, т.е. получить объектный код. Это выполняется с помощью компилятора 51.ВАТ (рис. 4.6).
Рис. 4.6. Запуск компилятора 51.BAT
55
Запускаем компилятор (рис. 4.7).
Пишем название программы (PLA16), нажимаем «Ввод»
(рис. 4.8).
Рис. 4.7. Окно компилятора 51.BAT
Рис. 4.8. Ввод названия файла
После компиляции проверяем отсутствие ошибок в файле Pla16.lst (рис. 4.9). Ошибки не обнаружены. Если ошибки есть, их нужно устранить.
Посмотрим сформированный файл Pla16.hex:
:100000003030303068686868020201014468446832
:10001000000000000000000000E5905403F9EB49E7
:10002000F97A00900000E493F8E859F8E4A39368A3
:10003000A37004E4934AFAE4A393F870ECEA540C36
:10004000FB8AA080D4000000000000000000000037
:080050000000000000000000A8
:00000001FF
Нам необходима только первая строчка – 16 чисел, но в наше ПЗУ мы загрузим все.
56
Рис. 4.9. Файл с описанием ошибок
Вначале строим схему без триггеров (рис. 4.10).
Рис. 4.10. Схема устройства
57
Загружаем в ПЗУ требуемый файл (рис. 4.11).
Рис. 4.11. Загрузка файла программы
Проверяем, что в ПЗУ есть наша таблица по первым 16 адресам. По нулевому адресу проверяем состояние индикато-
ров D2–D5 (рис. 4.12).
Рис. 4.12. Проверка содержимого ПЗУ по нулевому адресу
58
По первому адресу проверяем состояние индикаторов D2–D5
(рис. 4.13).
Рис. 4.13. Проверка содержимого ПЗУ по первому адресу
И так далее, до 1111.
Теперь устанавливаем обратную связь на триггерах микросхемы 74175 (рис. 4.14).
Рис. 4.14. Схема с обратной связью
59
Проверяем работу. Все переменные – по нулям, формируется согласно ГСА – z1. Нажимаем и отпускаем «Синхро» (CLOK) (рис. 4.15). Формируется согласно ГСА – z2.
Рис. 4.15. Формирование состояния z2
Нажимаем и отпускаем «Синхро» (CLOK) (рис. 16). Формируется согласно ГСА – z3.
Рис. 4.16. Формирование состояния z3
60