книги / Вычислительная техника и информационные технологии. Цифровые автоматы и микроконтролеры. Руководство к лабораторным работам в системе PROTEUS 7.2 SP6
.pdfРис. 6.6. Переход 1→3
– 3→2 (рис. 6.7).
Рис. 6.7. Переход 3→2
Аналогично проверяем фиксацию неправильных последовательностей, например 0→2 (рис. 6.8).
81
Рис. 6.8. Переход 0→2
Проверяя другие переходы, например 0→1→0, 0→1→3→1, убедимся, что неправильные переходы фиксируются схемой.
82
Лабораторная работа № 7
Реализация и моделирование заданной ГСА с помощью программы ПЛА
Возьмем полученную ранее отмеченную ГСА – ОГСА (рис. 7.1, 7.2).
|
|
Начало |
|
|
x |
|
|
ZZ |
|
|
1 |
|
|
x |
|
|
ZZ |
|
|
2 |
|
1 |
x |
|
X1 |
|
|
|
|
|
|
0 |
|
|
Z |
|
0 |
x |
|
X2 |
|
|
|
|
|
|
1 |
Z4 |
|
Z5 |
Z |
|
x
Конец
Рис. 7.1. ГСА
Y
Y0
YY1
YY2
Y
Y3
YY0
Рис. 2. ОГСА
83
Тогда обобщенная таблица переходов-выходов такова
(табл. 7.1).
Таблица 7.1
y2 |
y1 |
~ |
~ |
~ |
~ |
x2 |
x1 |
y2(t+1) |
y1(t+1) |
~ |
Микрооперации |
||||
|
|
|
|
|
|
|
|
d2(t) |
d1(t) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
z1 |
z2 |
z3 |
z4 |
z5 |
0 |
0 |
0 |
0 |
0 |
0 |
~ |
~ |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
~ |
~ |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
~ |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
~ |
1 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
~ |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
~ |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
|
Получим массив констант для реализации такой табли- |
||||||||||
цы – без минимизации функций. |
|
|
|
|
|
|
|||||
|
База входного слова имеет вид |
y2 y1 0000x2 x1 , база выход- |
|||||||||
ного слова y2 (t +1)y1 (t +1)0z1z2 z3 z4 z5 – первый ноль |
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
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 |
Тогда первая маска для первой строки: 11000000В, т.е. в шестнадцатеричном коде будет в байтовом формате 0C0H. Вторая маска нулевая по всем позициям: 00000000В, т.е. 00H. Тре-
тья маска 01010000В, т.е. 50H:
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
Аналогично определяем константы для других строк. Получим таблицу:
TABL:
db 0C0H,00H,50H, |
|
db 0C0H,40H,0C8H, |
|
db 0C1H,0C0H,84H, |
|
db 0C1H,0C1H,0C8H, |
|
db 0C2H,80H,02H, |
|
db 0C2H,82H,01H, |
00H |
|
84 |
Используется та же программа ПЛА, только для имитации «синхронизации» используем нулевой бит порта Р3, т.е. наш автомат будет ждать «срабатывания» этого бита для перехода в новое состояние.
Программа выглядит следующим образом.
P1 EQU 90H |
|
|
P2 EQU 0A0H |
|
|
Begin:MOV A, P1 |
; Считываеми заносим в аккумулятор А |
|
ANL A, #03h |
|
; Маскируем |
MOV R1, A |
|
; в R1 |
MOV A, R3 |
|
; Внутреннее состояние в R3 |
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) |
|
|
|
85 |
|
MOV R0,A |
; Х0(i+1) в R0 |
|
JNZ Next |
; Переход по нулю |
|
MOV A,R2 |
; Выход в R2 |
|
ANL A,#0C0H |
; Выделяем y2(t+1)y1(t+1) |
|
MOV R3,A |
; Результат в R3 |
|
MOV P2, R2 |
; Выход на Р2 |
M1: |
JNB 0B0H,M1 |
; организуем петлю по нулевому биту Р3 для |
M2: |
JB 0B0H,M2 |
; имитации «синхронизации» автомата |
|
jmp Begin |
|
TABL:db 0C0H,00H,50H, db 0C0H,40H,0C8H, db 0C1H,0C0H,84H,
db 0C1H,0C1H,0C8H, db 0C2H,80H,02H,
db 0C2H,82H,01H,00H
END
Получаем проект (рис. 7.3):
Рис. 7.3. Проект
86
Видим, что реализуется z1 при х1 = х2 = 0. Далее нажимаем «Синхро» (рис. 7.4).
Рис. 7.4. Состояние при нажатом «Синхро»
Отпускаем «Синхро» (рис. 7.5):
Рис. 7.5. Состояние при отпущенном «Синхро»
87
Получили z2, далее (рис. 7.6).
Рис. 7.6. Состояние z3
Получили z3, далее (рис. 7.7).
Рис. 7.7. Состояние z4
88
Получили z4. Далее возвращаемся к z1 (рис. 7.8).
Рис. 7.8. Возвращение в состояние z1
Теперь проверяем выдачу z при х1 = 1 (рис. 7.9).
Рис. 7.9. Проверка выдачи z при х1 = 1
89
В результате получаем z1. Далее получаем z2 и петлю (рис. 7.10).
Рис. 7.10. Получение состояния z2 и петли
При х1 = 0, х2 = 1 схема работает так (рис. 7.11).
Рис. 7.11. Работа схемы при х1 = 0, х2 = 1
90