Для работы МПУ осуществляющего обмен информацией с ПК, необходима программа эмулирующая на программном уровне протокол обмена по последовательному порту V.24.
Данная программа написана на языке ассемблера с использованием программного эмулятора процессора класса ВЕ35 написанного для компьютера IBM-PC на языке высокого уровня Pascal - 7.0.
Драйвер поддержки протокола V.24, в дальнейшем драйвер, позволяет кроме обмена данными с ПК осуществлять управление всеми составными частями комплекса с помощью программирования регистров.
Подробнее остановимся на работе программы, листинг которой представлен в прил.18. Алгоритм программы представлен на рис. 15.
Программа реализует программную поддержку протокола V.24, что накладывает свой отпечаток на структуру программы. После запуска программа начинает ожидать стартовый бита, по пришествии которого происходит последовательный прием 8 бит, которые образуют байт команды. В зависимости от команда происходит соответствующее ветвление по структуре алгоритма и выполнения заложенных действий.
Для управления МПУ существует набор команд (табл.6) состоящих из 1 или 2 байт.
Таблица 6
Команды управления
Команда | Назначение | Количество бит | |
DEC | BIN | ||
17 | 0001 0001 | Чтение Р2 | 1 |
128+ | 1000 хххх | Запись в регистры | 2 |
144+ | 1001 хххх | Чтение регистров | 1 |
0 | 00000000 | Запись Р1 | 2 |
1 | 00000001 | Запись Р2 | 2 |
32 | 00100000 | Чтение Т1 | 1 |
2-х байтных командах, предназначенных для управления АЦП, передачи информации в ЦАП, или внешнее ОЗУ (регистры), вторым
Алгоритм работы виртуального драйвера
1
Начало
2
CBYTE=127
ENTO CLK
3
Вывод в порт
Р1 числа 127
4
Вывод в порт
Р2 числа 0
5
LOAD
6
RBYTE = A
7
Биты Да
4,5,6 аккумулятора
выключены?
Нет
8
Да Бит 4
аккумулятора
включен?
Нет
Нет Бит 5
аккумулятора
включен?
Да
Уровень Да
на входе Т1
высокий?
Нет
R2 = 0 R2 = 255
SAVE SAVE
Процедура СНН
Начало
R4 = 1, 13
Конец
RBYTE = A
Бит 7
аккумулятора
включен?
А = RBYTE1
A = A and 15
R0 = A
MOVX A,@R0 Чтение из
порта Р2
R2 = A R2 = A
SAVE SAVE
Процедура HHH
Начало
R4 = 1, 10
Конец
LOAD
RBYTE2 = A
A = RBYTE1
Бит 7
аккумулятора
включен?
A = RBYTE1
A = RBYTE1
A = A and 1
R0 = A
A = RBYTE2
Бит 0
аккумулятора
включен?
MOVX @R0,A
A = RBYTE2
A = RBYTE2
A = A and 127
CBYTE = A
Вывод в порт Вывод в порт
Р1 аккумулятора Р2 аккумулятора
Процедура LOAD
Начало
R2 = 0
R5 = 8
С = 0 A = R2
Уровень С = С R5 = R5-1
на входе INT RRC A A = R5
высокий?
R3 = 1,14
Нет В
аккумуляторе
ноль?
CHH
Уровень
на входе INT
высокий?
C = 0 R2 = A
A = R2 R5 = R5-1
RRC A A = R5
NOP
LOAD
RBYTE2 = A
A = RBYTE1
В
Нет аккумуляторе
ноль?
Да
A = R2
Конец
Процедура SAVE
Начало
A = CBYTE
A = A or 128 HHH
Вывод в порт R3 = R3 - 1
Р2 аккумулятора A = R3
NOP
NOP В Нет
NOP аккумуляторе
ноль?
HHH
Да
R3 = 8
A = R2 А = CBYTE
RRC A A = A and 127
R2 = A
Ввод в порт Р2
аккумулятора
Флаг «С»
включен? ННН
Конец
A = CBYTE A = CBYTE
A = A and 127 A = A or 128
Вывод в порт Р2 Вывод в порт Р2
аккумулятора аккумулятора
байтом идет сам байт информации, а адрес получателя заложен в младших битах команды управления.
Дата: 2019-05-28, просмотров: 208.