.CHARSET 1251 ; Запись текущего времени ; Перед запуском записать в RX требуемую разницу во времени с UTC, ч ; Пример работы с устройством УСОМК-5 (1 дискретный выход, GPS) ; Приём сигналов от модуля GPS по протоколу NMEA ; Cкорость 4800, 8 бит, без контроля чётности ; Разбор пакета GGA - Global Positiong System Fixed Data ; Для коррекции даты следует использовать сообщение RMC M8 ; Разница с UTC, ч CX PP M 9072 ; Установить режим 8 бит 7 PP M 9071 ; Установить скорость 4800 8 PP M 9073 ; Задержка между байтами в ответе 8*1,25=10 мс. 1 PP M 9070 ; Разрешение порта, запись 1 - разрешение использования порта ЭКВМ 9087 M9 ; константа R9087 A0: 0 PP M 9085 ; буфер приёма, смещение 0 1 PP M 9076 ; Начать приём данных A1: PP RM 9076 ; Проверить окончание приёма, считав содержимое регистра приёма F X=0 A1 ; пока оно не равно 0 - продолжать считывание ; Приём окончен, количество принятых байт в R9075, ; пакет для обработки в буфере приёма (R9086-R9089) PP RM 9075 ; Проверка количества принятых байт F X!=0 A0 ; Повтор при нулевом значении CX PP M 9085 ; Индексный регистр буфера приёма, запись 0 - выбрать первый байт K RM 9 ; Считать первый байт (R9087) 36 - ; Вычесть код символа '$' F X=0 A0 ; Если не '$' - продолжить ожидание P GSB GPGGA ; Найти в буфере строку "GPGGA," F X!=0 A0 ; Если строка не найдена - продолжить ожидание P GSB LCHIS ; Считать числовое поле 10000 / RM8 + P X<0 A2 24 + A2: PP M 9055 ; Коррекция часов R/S GPGGA: ; Поиск строки "GPGGA," PP RM 9085 ; индекс буфера приёма 250 - P X!=0 EGPGGA ; Выход RX=0 K RM 9 ; считать очередной байт из пакета 71 - ; 'G' P X=0 GPGGA K RM 9 ; считать очередной байт из пакета 80 - ; 'P' ('L'=76) P X=0 GPGGA K RM 9 ; считать очередной байт из пакета 71 - ; 'G' P X=0 GPGGA K RM 9 ; считать очередной байт из пакета 71 - ; 'G' P X=0 GPGGA K RM 9 ; считать очередной байт из пакета 65 - ; 'A' P X=0 GPGGA K RM 9 ; считать очередной байт из пакета 44 - ; ',' P X=0 GPGGA 1 ; RX=1 EGPGGA: RTN LCHIS: ; Считать числовое поле в RA ; Используются RA, RB, RC CX MA ; число MB ; признак точки LCHIS1: K RM 9 ; считать очередной байт из пакета MC 44 - ; ','=44 P X!=0 ELCHIS 2 - ; '.'=46 F X=0 LCHIS2 ; точка RMB P X=0 LCHIS1 ; Если одна точка уже была - игнорировать 10 MB ; Коэффициент деления P GOTO LCHIS1 LCHIS2: RMB P X!=0 LCHIS3 ; если точка уже была RB!=0 RMC 48 - ; Предполагаемые значения от '0' до '9' RMB / RMA + MA RMB 10 * MB P GOTO LCHIS1 LCHIS3: RMA 10 * RMC 48 - ; Предполагаемые значения от '0' до '9' + MA P GOTO LCHIS1 ELCHIS: RMA RTN .END