.CHARSET 1251 ; Программа опроса нескольких результатов измерений ; по протоколу приборов Мультитест ; Версия 1.1 от 17.01.2011 ; Вывод данных в виде чисел или графика (переключение по <->) ; Проверка на выход за границы: звук, инверсия вывода, управление линиями параллельного порта ; Записать перед началом работы: ; RB - период опроса (сек <= 655) ; RC - продолжительность опроса (число записей < 16384) ; R9 - сетевой номер прибора ; R20, R21, R23, R24, R26, R27 - границы диапазонов для R4, R5, R6 ; Используются ; R7,R8 - текущие Z,R ; R4,R5,R6 - В базовом варианте - ЭДС, pH, температура ; RD - вид отображения: 0-числа, 1 - график (после запуска 0) ; RE - используется для косвенной адресации и временного хранения ; R22, R25, R28 - ширина диапазона (для отрисовки графика) ; R30, R31, R32 - признак выхода за границу диапазона для R4, R5, R6 (атрибут: 4 - выход, 0 - нет) ; R33 - данные в параллельный порт (D0:R4R21; D2:R5R24; D4:R6R27) .ORG 0 ; Графика CX MD P GSB INITGR0 P GSB PORT_I ; Инициализация порта ; Проверка границ диапазонов P RM 21 P RM 20 - F X<0 B1 P RM 21 P RM 20 P M 21 <-> P M 20 - B1: P M 22 P RM 24 P RM 23 - F X<0 B2 P RM 24 P RM 24 P M 24 <-> P M 23 - B2: P M 25 P RM 27 P RM 26 - F X<0 B3 P RM 27 P RM 26 P M 27 <-> P M 26 - B3: P M 28 RMC F X<0 A0 P GOTO A_END P GSB IZM ; Считать данные с прибора A0: 16384 - F X>=0 A00 16384 MC A00: CX PP M 9060 ; Группа записей блокнота RMB 656 - ; Период записи должен быть меньше 65600 секунд P X>=0 A01 655 MB A01: RMB EE 2 MB A1: RMB PP M 9051 ; Таймер 1 P GSB ZAP ; Записать в блокнот RMC 1 - MC P X>=0 A_END ; Количество записей достигнуто A2: PP RM 9051 F X!=0 A1 ; Повторить запись 50 - F X<0 A21 A22: PP RM 9051 ; За 0,5 секунды - больше ничего не измерять и не выводить F X!=0 A22 GOTO A1 A21: PP RM 9051 50 / K FRAC F X=0 A2 ; Цикл ожидания 0,5 сек PP RM 9029 19 - ; 19 "<->" F X=0 A24 RMD F X=0 A25 1 MD GOTO A23 A25: CX MD P GSB INITGR0 GOTO A23 A24: 13 - ; 19+13=32 "Выход" F X=0 A23 P GOTO A_END A23: P GSB IZM ; Считать новые данные P X=0 A2 ; Если ошибка - вернуться P GSB PROV ; Проверка выхода за диапазон ; Вывести их на экран A3: RMD F X!=0 A31 P GSB GRAF ; Вывести график GOTO A2 ; Вывод числовых результатов измерений A31: 4 PP M 9001 ; Атрибуты вывода NOT 14 ENT 64 PP M 9000 ; Начальные координаты 38 ENT 63 PP M 9013 ; Вывод прямоугольника 55 ENT 50 PP M 9000 ; Начальные координаты 8 ENT 77 PP M 9013 ; Вывод прямоугольника 0 PP M 9001 ; Атрибуты вывода 0 14 ENT 64 PP M 9000 4 ENT 2 PP RM 9055 ; Часы PP M 9024 ; Вывод форматированного числа 24 ENT 64 PP M 9000 P RM 30 PP M 9001 ; Атрибуты 2 ENT 4 RM4 ; ЭДС PP M 9024 ; Вывод форматированного числа 34 ENT 64 PP M 9000 P RM 31 PP M 9001 ; Атрибуты 3 ENT 4 RM5 ; pH PP M 9024 ; Вывод форматированного числа 44 ENT 64 PP M 9000 P RM 32 PP M 9001 ; Атрибуты 2 ENT 4 RM6 ; Температура PP M 9024 ; Вывод форматированного числа 56 ENT 50 PP M 9000 0 PP M 9001 ; Атрибуты вывода 0 PP RM 9060 ; Текущая группа записи PP M 9023 ; Вывод числа K GRPH ; Перерисовка P GOTO A2 A_END: P GSB PORT_UI ; запрет использования порта RMB EE 2 /-/ MB ; Вернуть значение RB R/S ;------------------------- Инициализация экрана для вывода результатов в виде чисел INITGR0: 2 PP M 9010 ; Сброс экрана 9021 ME .NUM TXT1 KME ; PP M 9021 - Вывод строки RMA PP M 9023 ; Номер прибора 10 ENT 0 PP M 9000 10 ENT 127 PP M 9012 ; Линия 14 ENT 0 PP M 9000 .NUM TXT2 KME 24 ENT 0 PP M 9000 .NUM TXT3 KME 34 ENT 0 PP M 9000 .NUM TXT4 KME 44 ENT 0 PP M 9000 .NUM TXT5 KME 54 ENT 0 PP M 9000 54 ENT 127 PP M 9012 ; Линия 56 ENT 0 PP M 9000 .NUM TXT6 KME RTN ;----------------------------- Измерение .PAGE IZM: 16 M7 16 M8 P GSB PORT_K F X=0 IZM_E <-> M4 16 M7 48 M8 P GSB PORT_K F X=0 IZM_E <-> M5 26 M7 32 M8 P GSB PORT_K F X=0 IZM_E <-> M6 0 RTN IZM_E: ME 100 ENT PP M 9052 RMD F X=0 IZM_E1 ; Если график - перейти 4 PP M 9001 ; Атрибуты вывода NOT 14 ENT 64 PP M 9000 ; Начальные координаты 38 ENT 63 PP M 9013 ; Вывод прямоугольника 0 PP M 9001 ; Атрибуты вывода 0 14 ENT 64 PP M 9000 .NUM TXT7 PP M 9021 RME PP M 9023 K GRPH IZM_E1: 1 RTN ;-------------------- Вывод графика GRAF: 2 PP M 9010 CX M2 PP RM 9060 ME 127 - F X>=0 GRAF1 M1 127 M0 GOTO GRAF2 GRAF1: PP RM 9060 M0 CX M1 GRAF2: RM1 PP M 9060 PP RM 9062 P RM 20 - P RM 22 F X!=0 GRAF3 / 63 * 63 <-> - RM2 PP M 9011 GRAF3: PP RM 9063 P RM 23 - P RM 25 F X!=0 GRAF4 / 63 * 63 <-> - RM2 PP M 9011 GRAF4: PP RM 9064 P RM 26 - P RM 28 F X!=0 GRAF5 / 63 * 63 <-> - RM2 PP M 9011 GRAF5: RM2 1 + M2 RM1 1 + M1 PFL0 GRAF2 K GRPH RME PP M 9060 RTN ;-------------------- Проверка выхода за границы диапазонов PROV: CX PM 30 PM 31 PM 32 PM 33 1 PP M 9090 ; Статический режим параллельного порта PP M 9093 ; запись PRM 21 RM 4 - F X<0 PROV2 PRM 33 2 + PM 33 PROV1: 4 PM 30 200 ENT 100 PP M 9052 GOTO PROV3 PROV2: RM 4 PRM 20 - F X<0 PROV3 PRM 33 1 + PM 33 GOTO PROV1 PROV3: PRM 24 RM 5 - F X<0 PROV5 PRM 33 8 + PM 33 PROV4: 4 PM 31 300 ENT 100 PP M 9052 P GOTO PROV6 PROV5: RM 5 PRM 23 - F X<0 PROV6 PRM 33 4 + PM 33 P GOTO PROV4 PROV6: PRM 27 RM 6 - F X<0 PROV8 PRM 33 32 + PM 33 PROV7: 4 PM 32 400 ENT 100 PP M 9052 GOTO PROV9 PROV8: RM 6 PRM 26 - F X<0 PROV9 PRM 33 16 + PM 33 GOTO PROV7 PROV9: PRM 33 PP M 9091 ; Запись в порт RTN ;---------------------- Запись в блокнот .PAGE ZAP: PP RM 9055 PP M 9061 PP RM 9065 F X=0 ZAP_E RM4 PP M 9062 PP RM 9065 F X=0 ZAP_E RM5 PP M 9063 PP RM 9065 F X=0 ZAP_E RM6 PP M 9064 PP RM 9065 F X=0 ZAP_E PP RM 9060 1 + PP M 9060 PP RM 9065 F X=0 ZAP_E RTN ZAP_E: 100 ENT PP M 9052 ; звук RMD P X=0 ZAP_E1 ; Если числа - вывести ошибку на экран 4 PP M 9001 ; Атрибуты вывода NOT 55 ENT 50 PP M 9000 ; Начальные координаты 8 ENT 77 PP M 9013 ; Вывод прямоугольника 0 PP M 9001 ; Атрибуты вывода 0 55 ENT 50 PP M 9000 .NUM TXT7 PP M 9021 K GRPH ZAP_E1: RTN TXT1: .TEXT "Измерение, прибор \0" TXT2: .TEXT "Время\0" TXT3: .TEXT "ЭДС\0" TXT4: .TEXT "pH\0" TXT5: .TEXT "Температура\0" TXT6: .TEXT "Запись \0" TXT7: .TEXT "Ошибка\0" .PAGE ; Драйвер протокола приборов Мультитест используются R0 и RE (RЕ если понадобится можно убрать) ; Инициализация последовательного порта PORT_K: ; Команда протокола - запрос данных в формате float. Используется регистр R0 ; Формирование команды в буфере 9082 ME ; Для косвенной адресации регистра 9082 CX PP M 9080 ; Индексный регистр буфера передачи. Запись нуля - заполнение буфера с начала KME ; PP M 9082 Запись с автоинкрементом. Первое число =0 RM9 KME ; Сетевой номер 4 KME ; Длина мл CX KME ; Длина ст 16 KME ; K RM7 KME ; Z RM8 KME ; R 7 M0 CX PP M 9080 ; Индесный регистр буфера передачи (Последовательный порт) PORT_K1: KRME ; Подсчёт КС + F L0 PORT_K1 P GSB MOD_256 ; По модулю 256 KME ; Запись КС в буфер 8 PP M 9077 ; Передача команды запроса Z=R7, R=R8, адрес=R9 (8 байт) PORT_K2: PP RM 9077 F X=0 PORT_K2 30 PP M 9050 ; Тайм-аут приёма - 300 мс (таймер 0) PORT_K3: PP RM 9075 ; Счетчик посылок F X=0 PORT_K5 ; Приём начался PP RM 9050 ; Таймер 0 F X=0 PORT_K3 ; Ожидание PORT_K4: CX ENT 256 ; Выход с кодом 256 - тайм-аут RTN PORT_K5: PP RM 9076 F X=0 PORT_K5 ; Ожидание окончания приёма 9085 ME ; Для косвеной адресации регистра 9085 CX KME ; PP M 9085 Индексный регистр буфера приема (Последовательный порт) PP RM 9087 ; Байт буфера приёма, автоинкремент F X=0 PORT_K4 ; Первый байт не 0 - выход с ошибкой 256 PP RM 9087 ; Байт буфера приёма, автоинкремент RM 9 - F X=0 PORT_K4 ; Сетевой номер не совпадает - выход с ошибкой 256 PP RM 9086 ; Байт буфера передачи (Последовательный порт) 3 + M 0 ; Длина пакета CX KME ; PP M 9085 Индесный регистр буфера приема (Последовательный порт) PORT_K6: PP RM 9087 ; Байт буфера приёма, автоинкремент + ; КС принятого пакета PF L0 PORT_K6 P GSB MOD_256 PP RM 9087 ; Байт буфера приёма, автоинкремент (Последовательный порт) - P X=0 PORT_K4 ; Сравнение КС, выход с ошибкой при несовпадении 4 KME ; PP M 9085 Индесный регистр буфера приема (Последовательный порт) PP RM 9086 ; Байт буфера передачи (Последовательный порт) 33 - F X>=0 PORT_K7 ; Проверка кода команды K>20h, переход на обработку ошибки протокола 7 KME ; PP M 9085 Индесный регистр буфера приема (Последовательный порт) PP RM 9086 ; Байт буфера передачи (Последовательный порт) 0 <-> ; В RX - код ошибки протокола RTN PORT_K7: CX PP M 9031 ; Индексный регистр 1 (Универсальный байтовый буфер) PP M 9030 ; Индексный регистр 0 (Универсальный байтовый буфер) 4 M0 7 PP M 9085 ; Индесный регистр буфера приема (Последовательный порт) PORT_K8: PP RM 9087 ; Байт буфера передачи, автоинкремент (Последовательный порт) PP M 9034 ; Запись и чтение по индексному регистру 1, автоинкремент (Универсальный байтовый буфер) F L0 PORT_K8 ; перенос принятых данных float в универсальный буфер PP RM 9038 ; Преобразование числа в float и обратно (В индексном регистре 0 - 0) 0 RTN MOD_256: ; Нахождение суммы по модулю 256 ENT ENT 256 M0 / KINT RM0 * - RTN PORT_I: 1 PP M 9070 ; Разрешение порта, запись 1 - разрешение использования порта ЭКВМ 9 PP M 9071 ; Установить скорость 9600 0 PP M 9072 ; Установить режим 8 бит 5 PP M 9073 ; Задержка между байтами в ответе 5*1,25=6 мс. 0 PP M 9074 ; Режим автоматического приёма разрешён 240 PP M 9078 ; Время ожидания ответа 240*1,25=300 мс. RTN PORT_UI: 0 PP M 9070 ; Регистр разрешения порта, запись 0 - запрет использования порта программой ЭКВМ RTN ; конец драйвера протокола .END