|
Драйвер предназначен для организации обмена данными через последовательный порт при помощи клавишной ЭВМ "Электроника МК-152".
Текст драйвера с комментариями в формате PDF: drivermtest.pdf (279 кб)
|
Драйвер может применяться в практических целях для построения систем контроля и мониторинга химического состава и физических параметров водных сред. Для этого может быть использован измерительно-вычислительный комплекс на базе ЭВМ "Электроника МК-152" и аналитических приборов серии Мультитест.
Программа может быть использована как пример построения перемещаемого драйвера для МК-152, работающего с оборудованием по последовательному порту.
Размещение подпрограммы драйвера в памяти программ и используемые регистры данных
Подпрограмма драйвера размещается в памяти программ ЭВМ с начала любой страницы (адрес кратный числу 100) и занимает три последовательно расположенные страницы.
Параметры команды протокола передаются в регистрах R7-R9. Содержащиеся в регистрах R99-R102 значения изменяются при работе подпрограммы. Содержимое остальных регистров данных не изменяется.
Вызов подпрограммы
Перед вызовом подпрограммы в регистры загружаются значения: R7 - параметр Z; R8 - параметр R; R9 - сетевой номер. Обращение к подпрограмме производится соответствующей командой с косвеной или прямой расширенной адресацией по адресу начала подпрограммы в памяти.
При каждом вызове происходит однократная посылка команды запроса в соответствии с установленными параметрами. Принятое по протоколу числовое значение в формате float преобразуется в число в формате ЭВМ.
Значения регистров функций последовательного порта устанавливаются при каждом вызове подпрограммы.
Возвращаемые значения
Подпрограмма возвращает в регистре X стека значение 0 при успешном окончании обмена, значения 1-255 при возникновении ошибок в соответствии с протоколом или значение 256 при отсутствии связи с прибором.
В регистре стека Y возвращается число, полученное от опрашиваемого устройства, или нулевое значение при возникновении ошибок.
Текст подпрограммы драйвера
| |
x0 |
x1 |
x2 |
x3 |
x4 |
x5 |
x6 |
x7 |
x8 |
x9 |
| 00x |
ИП4 |
9 |
9 |
П4 |
↔ |
КП4 |
ИП0 |
КП4 |
ИПА |
КП4 |
| 01x |
РРИП |
90 |
41 |
0 |
, |
0 |
1 |
× |
K[x] |
1 |
| 02x |
0 |
0 |
× |
РП |
99 |
2 |
5 |
0 |
+ |
ПА |
| 03x |
КППА |
Сх |
РРП |
90 |
80 |
РРП |
90 |
82 |
ИП9 |
РРП |
| 04x |
90 |
82 |
4 |
РРП |
90 |
82 |
Сх |
РРП |
90 |
82 |
| 05x |
1 |
6 |
РРП |
90 |
82 |
ИП7 |
РРП |
90 |
82 |
ИП8 |
| 06x |
РРП |
90 |
82 |
7 |
П0 |
Сх |
РРП |
90 |
80 |
РРИП |
| 07x |
90 |
82 |
+ |
FL0 |
69 |
РИП |
99 |
2 |
7 |
0 |
| 08x |
+ |
ПА |
КППА |
РРП |
90 |
82 |
8 |
РРП |
90 |
77 |
| 09x |
РРИП |
90 |
77 |
Fx=0 |
90 |
3 |
0 |
РРП |
90 |
50 |
| 10x |
РРИП |
90 |
75 |
Fx=0 |
24 |
РРИП |
90 |
50 |
Fx=0 |
00 |
| 11x |
РИП |
99 |
2 |
8 |
5 |
+ |
ПА |
КППА |
Сх |
В↑ |
| 12x |
2 |
5 |
6 |
В/О |
Сх |
РРП |
90 |
85 |
РРИП |
90 |
| 13x |
87 |
Fx=0 |
10 |
РРИП |
90 |
87 |
ИП9 |
- |
Fx=0 |
10 |
| 14x |
РРИП |
90 |
86 |
3 |
+ |
П0 |
Сх |
РРП |
90 |
85 |
| 15x |
РРИП |
90 |
87 |
+ |
FL0 |
50 |
РИП |
99 |
2 |
7 |
| 16x |
0 |
+ |
ПА |
КППА |
РРИП |
90 |
87 |
- |
Fx=0 |
10 |
| 17x |
4 |
РРП |
90 |
85 |
РРИП |
90 |
86 |
3 |
3 |
- |
| 18x |
Fx<0 |
90 |
РИП |
99 |
2 |
0 |
8 |
+ |
ПА |
КБПА |
| 19x |
РИП |
99 |
2 |
8 |
5 |
+ |
ПА |
КППА |
7 |
РРП |
| 20x |
90 |
85 |
РРИП |
90 |
86 |
0 |
↔ |
В/О |
Сх |
РРП |
| 21x |
90 |
31 |
РРП |
90 |
30 |
4 |
П0 |
7 |
РРП |
90 |
| 22x |
85 |
РРИП |
90 |
87 |
РРП |
90 |
34 |
FL0 |
21 |
РИП |
| 23x |
99 |
2 |
8 |
5 |
+ |
ПА |
КППА |
РРИП |
90 |
38 |
| 24x |
0 |
В/О |
0FFh |
0FFh |
0FFh |
0FFh |
0FFh |
0FFh |
0FFh |
0FFh |
| 25x |
Сх |
РРП |
90 |
72 |
РРП |
90 |
74 |
0 |
9 |
РРП |
| 26x |
90 |
71 |
5 |
РРП |
90 |
73 |
РРП |
90 |
70 |
В/О |
| 27x |
↔ |
В↑ |
В↑ |
2 |
5 |
6 |
П0 |
÷ |
K[x] |
ИП0 |
| 28x |
× |
- |
В/О |
0FFh |
0FFh |
9 |
9 |
П4 |
КИП4 |
КИП4 |
| 29x |
П0 |
↔ |
КИП4 |
ПА |
↔ |
П4 |
В/О |
|
|
|
Описание подпрограммы
| Смещение |
Выполняемые действия |
| 00-09 |
Сохранение регистров R0, R4, RA в R100-102 для последующего восстановления |
| 10-24 |
Вычисление базового адреса для перемещения подпрограммы и сохранение его в R99 |
| 25-30 |
Инициализация порта с использованием подпрограммы по адресу 250 |
| 31-62 |
Формирование команды опроса. Загрузка буфера передачи: в 35 - начальный нуль, 38-41 - сетевой номер, 42-49 - длина, 50-54 - параметр K=16 (10h), 55-62 - параметры Z и R |
| 63-74 |
Подсчет суммы байтов буфера передачи |
| 75-85 |
Вычисление контрольной суммы с использованием подпрограммы 270 и помещение контрольной суммы в буфер передачи |
| 86-89 |
Передача команды |
| 90-94 |
Ожидание окончания передачи |
| 95-99 |
Установка времени ожидания приема (300 мс) |
| 100-109 |
Ожидание окончания приема и проверка тайм-аута |
| 110-123 |
Выход по тайм-ауту и ошибкам формата пакета |
| 124-139 |
Проверка буфера приема: 124-132 - неверный заголовок, 133-139 - неверный сетевой номер |
| 140-155 |
Вычисление контрольной суммы пакета в буфере приема: 140-145 - в R0 вычисляется длина пакета, 146-149 - переход на начало буфера, 150-155 - цикл |
| 156-163 |
Вычисление контрольной суммы, обращение к подпрограмме 270 |
| 164-169 |
Сравнение с принятой контрольной суммой, переход на 110 при ошибке |
| 170-181 |
Проверка кода команды K>20h, переход на обработку ошибки протокола |
| 182-189 |
Переход на обработку принятого числа |
| 190-207 |
Выход по ошибке протокола |
| 208-241 |
Преобразование принятого числа из float в формат ЭВМ и выход из подпрограммы драйвера |
| 242-269 |
Подпрограмма инициализации регистров последовательного порта: 8 бит данных, автоприем, 9600 бит/с, время ожидания около 6 мс |
| 270-284 |
Подпрограмма вычисления вычета по модулю 256 (остатка от деления на 256) |
| 285-296 |
Восстановление регистров R0, R4, RA |
Пример использования
Предположим, что приведенная выше подпрограмма загружена с адреса 100. Следующая программа, выполняет непрерывный опрос параметра по протоколу Мультитест и выводит в регистр Х значение числа, в регистр Y - состояние обмена (0-нет ошибок, 1-255 ошибка протокола, 256 - нет связи). Программа занимает 7 байт с нулевого адреса. В связи с небольшими размерами запишем программу в одну строку без указания адресов:
РПП; 01; 00; ↔; К ЭКР; БП; 00
Перед запуском в регистры R7-R9 следует занести необходимые значения. Например, для считывания значения ЭДС из первого канала pH-метра-иономера Мультитест ИПЛ с сетевым номером 1 (параметры Z=10h, R=10h) в регистры следует занести следующие значения: R7=16, R8=16, R9=1.
Программа запускается командами В/О, С/П.
Останов программы производится нажатием клавиши С/П.
|