Радио-86РК/Радио 05-89/Терминал передачи данных

Материал из Emuverse
Версия от 14:56, 28 ноября 2008; Panther (обсуждение | вклад) (http://retro.h1.ru/RK86/RS232/Terminal.php)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Данный материал защищён авторскими правами!

Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей.

Автор: Г. ИВАНОВ

Источник: http://retro.h1.ru/RK86/RS232/Terminal.php

Довольно часто возникает необходимость подключения к компьютеру периферийных устройств, имеющих последовательный интерфейс: например, чтобы связаться с мощным профессиональным компьютером и обменяться с ним текстом программы, а затем вывести его на печатающее устройство. К сожалению, многие простые персональные компьютеры, такие, например, как «Радио-86РК», не имеют необходимого для этой цели встроенного порта последовательного ввода — вывода.

Функции порта последовательного ввода — вывода с успехом можно реализовать программно, возложив функции отсчета временных интервалов, анализа принимаемых сигналов, формирования передаваемых последовательно посылок и сигналов управления на процессор.

Предлагаемая вниманию читателей программа ТЕРМИНАЛ позволяет подключать персональный компьютер «Радио-86РК» в качестве терминала к любому периферийному устройству (ПУ) с последовательным интерфейсом, работающим в полудуплексном режиме со скоростями до 1200Бод. Таким устройством может быть, например, радиолюбительский контроллер пакетной связи TNC, модем или другой компьютер. Принцип работы программы, ее отдельные подпрограммы, обслуживающие последовательный обмен, можно использовать для самостоятельной разработки подпрограмм (драйверов), подключения к компьютеру дополнительных устройств.

Программа работает совместно с усовершенствованным текстовым редактором «МИКРОН»*.

Рассмотрим принцип программной реализации последовательного обмена данными в режиме полудуплекса на примере упрощенной версии программы, исходный текст которой приведен в табл.1. Данная программа выдает в последовательный канал, образованный отдельными разрядами порта D14 код нажатой клавиши, принимает передаваемые в компьютер байты и выводит их на экран, то есть реализует так называемый «прозрачный терминал».

В качестве линий последовательного интерфейса используются четыре разряда параллельного порта D14:

TXD - разряд D0 порта А; 
RTS - разряд D1 порта А; 
RXD - разряд D0 порта В; 
CTS - разряд D1 порта В.

Основу программы составляют модули RXBYTE и TXBYTE.

Модуль RXBYTE осуществляет прием последовательно передаваемых байтов и сохраняет их в промежуточном, «нераспакованном», виде в буфере ОЗУ. Выполнение подпрограммы завершается, если приемный буфер заполнен или если по истечении определенного интервала времени не было принято ни одного байта.

Модуль TXBYTE передает байт, предварительно помещенный в регистр микропроцессора С. Если перед выдачей байта был обнаружен сигнал CTS=1, то байт не передается и выполнение программы завершается. При этом возвращается флаг FZ=1. Если ПУ (периферийное устройство) было готово к приему и байт был передан, то возвращается флаг FZ=0.

Для того чтобы не потерять те несколько байтов, которые ПУ может выдать после получения запроса на передачу RTS=1; канал приема в модуле RCHNL опрашивается дважды: первый раз — в режиме приема, второй раз — после выдачи запроса на передачу.

В модуле OUTBUF разгружается буфер принятых байтов. Принятые байты «распаковываются» и выводятся на экран компьютера. При этом ПУ находится в закрытом состоянии, так как на него подается сигнал RTS=1.

В головной части программы циклически опрашивается канал приема и клавиатура. Если какая-либо клавиша была нажата, то ее код передается на ПУ. В момент передачи ПУ находится в состоянии ожидания и может принять переданный байт. Если требуется только передавать данные, например, на печатающее устройство, то для этого достаточно использовать модули TXBYTE и TIME. Часть программы, выдающая на принтер байт, выглядит следующим образом:

;=====ВЫДАЧА БАЙТА, НАХОДЯЩЕГОСЯ В РЕГИСТРЕ (С) 
OUT: CALL TXBYTE ; ВЫДАЧА БАЙТА НА ПРИНТЕР 
     JNZ OUT     ; НЕ ПЕРЕДАН СНОВА ВЫДАТЬ

Машинные коды программы ТЕРМИНАЛ приведены в табл.2. Программа размещается в ОЗУ с адреса 800Н по CDFH, занимает немногим более 1 Кбайт и подключается к текстовому редактору «МИКРОН». Контрольные суммы блоков программы приведены в табл.3. В редакторе «МИКРОН» необходимо произвести изменения в соответствии с табл.4.

Таблица 3.

ОБЛАСТЬ ОЗУ КОНТР.СУММА
0800-08 FF 41EB
0900-09PF B94E
0A00-0AFF D027
0B00-0BFF C399
0C00-0CDF 8A56
0800-0CDF 194F


Таблица 4.

АДРЕС 0002 0021 0739
32K 74 74 21
16K 34 34 21


Для работы со стандартными последовательными интерфейсами к порту D14 необходимо подключить формирователи и приемники уровней протокола интерфейса V.24, схема которых приведена на рисунке. Компараторы DA1, DA2 формируют уровни с размахом около 4В, чего вполне достаточно для линий связи длиной до нескольких метров.

Программу запускают директивой МОНИТОРа G800. После запуска она инициализирует порт D14 и вызывает редактор «МИКРОН». Находясь в редакторе, можно готовить тексты, которые затем будут передаваться из компьютера на периферийное устройство. Особенно следует отметить команду редактора AP2+S — занесение в промежуточный буфер помеченного фрагмента текста. Помеченный текст из ТЕРМИНАЛА можно передать на подключенное к компьютеру периферийное устройство.

Переход из РЕДАКТОРа в ТЕРМИНАЛ происходит после нажатия клавиши СТР. На экране появляется сообщение:

ТЕРМИНАЛ RA3AU КОНЕЦ ТЕКСТА: ХХХХ

Вместо ХХХХ будет выведено шестнадцатеричное число, соответствующее адресу конца текста. Область текста начинается с адреса 2100Н и продолжается до адреса 73FFH, а область стека простирается до адреса 74FFH. С адреса 7500Н по 75FFH размещается буфер принимаемых байтов.

В ТЕРМИНАЛе, как и в РЕДАКТОРе, команды состоят из комбинации АР2 и какой-либо буквы (вводимой, однако, в любом — РУС или ЛАТ — регистре). Всего в ТЕРМИНАЛе шесть команд: S, G, А, С, Е, и ? Если команда задана неправильно, то на экран выводится сообщение об ошибке со списком-подсказкой команд:

ОШИБКА 
СПИСОК КОМАНД: 
АР2+АР2 ПЕРЕДАЧА АР2 
S ПЕРЕДАЧА ТЕКСТА ИЗ БУФЕРА 
G ВКЛ/ВЫКЛ ПРИЕМА ТЕКСТА
А ВКЛ/ВЫКЛ ВК/ПС 
С ВКЛ/ВЫКЛ ЭХО 
Е ПЕРЕХОД В РЕДАКТОР 
? ВЫДАЧА СПИСКА КОМАНД 

Если на АР2 нажать дважды, то в линию будет один раз выдан код АР2. По команде АР2+? выводится список подсказка команд.

Команда АР2+Е передает управление текстовому РЕДАКТОРу. После перехода в РЕДАКТОР передача из ПУ останавливается и возобновляется только при возврате из РЕДАКТОРа в ТЕРМИНАЛ.

Команда AP2+G включает или выключает режим приема текста в память компьютера (после начального запуска по умолчанию прием выключен). После ввода команды выдается звуковой сигнал и сообщение о текущем состоянии режима:

ПРИЕМ ВКЛ - если ранее прием был выключен,
ПРИЕМ ВЫКЛ - если ранее прием был включен.

После включения режима приема весь принимаемый от периферийного устройства текст не только отображается на экране компьютера, но и заносится в память редактора, дополняя уже имеющийся там текст. Если область текста заполнена, то есть адрес очередного заносимого в память кода превышает 73FFH, то выдается звуковой сигнал и сообщение:

ПЕРЕПОЛНЕНО ОЗУ

После этого нажатие на любую клавишу вызовет переход в РЕДАКТОР. В этом случае необходимо освободить хотя бы часть занятой текстом памяти, выводя, например, принятый текст на магнитную ленту и удаляя затем ненужное. После перехода обратно в ТЕРМИНАЛ прием продолжится. Приемный буфер при переполнении сохраняется и повторно выводится как на экран, так и в память, что позволяет не потерять фрагмент принятого текста.

Команда АР2+А включает или выключает режим выдачи кода перевода строки (ПС-0АН) после выдачи каждого кода возврата каретки (ВК — 0DН). Начальная установка ТЕРМИНАЛа — режим ВК/ПС выключен. Этот режим требуется для некоторых периферийных устройств, например, печатающего устройства. После ввода команды выдается сообщение:

ВК/ПС ВКЛ - если режим ранее был выключен;
ВК/ПС ВЫКЛ - если режим ранее был включен.

Команда АР2+С включает или выключает режим эхо — выдачи на экран каждого передаваемого на ПУ символа. Начальная установка ТЕРМИНАЛа — ЭХО выключено. Режим ЭХО необходимо устанавливать, если ПУ не выдает обратно на компьютер каждый принимаемый символ. После ввода команды выдается сообщение:

ЭХО ВКЛ - если режим эхо ранее был выключен;
ЭХО ВЫКЛ - если режим эхо ранее был включен.

Команда AP2+S вызывает передачу на ПУ содержимого временного буфера РЕДАКТОРа, в который предварительно в РЕДАКТОРе был занесен фрагмент текста также с помощью команды AP2+S. После ввода команды также выдается соответствующее сообщение.

Если перед началом передачи был включен режим ЭХО, то каждый передаваемый символ отображается на экране. Если режим ЭХО выключен, то после передачи символа ТЕРМИНАЛ переходит на прием и ожидает от ПУ некоторое время эхо символа. Получив от ПУ эхо, или после истечения времени ожидания, передается следующий символ и т. д. При выключенном ЭХО несколько замедляется скорость передачи из-за ожидания эхо от ПУ.

При необходимости прервать передачу необходимо ввести команду УС+Z. Передача текста из буфера прекратится и будет выдано сообщение: ПРЕРВАНА.

По окончании передачи содержимого буфера на экран будет выведено сообщение: ОКОНЧЕНА.

Если во время предыдущего сеанса работы с РЕДАКТОРОМ во временный буфер ничего не было записано (то есть буфер пуст), при попытке его передачи выдается сообщение: ПЕРЕДАЧА ПРЕРВАНА

Таблица 5.

АДРЕС 50 БОД 110 БОД 300 БОД 600 БОД 1200 БОД
0CD0 F4 58 2B 14
0CD1 02 00 00 00 00

Для сопряжения программы ТЕРМИНАЛ с различными ПУ необходима настройка на требуемые параметры последовательного интерфейса. Скорость обмена определяется содержимым ячеек программы, приведенным в табл.5 (указанные значения справедливы для частоты кварца РК-16МГц). Длина передаваемого слова (7 или 8 бит) заносится в ячейку 0GD2H. Удвоенное число стоповых бит - в ячейку 0CD3H. Приведенная версия программы не учитывает бит паритета.

По адресу 08С1Н размещена константа, определяющая размер приемного буфера. Оптимальный размер буфера определяется допустимым временем заполнения буфера (1-2сек) и зависит от скорости обмена. Чем меньше скорость, тем меньший буфер целесообразно использовать. Для скорости 1200 Бод оптимальный размер буфера — 127 байт (7F). Для скорости 300Бод — 32 байта, для скорости 50Бод — 5 байт.

Таблица 6.

АДРЕС 080E 0823 08BB 0924 092C 0944 098A 09CB
32К 75 74 75 75 75 75 74 75
16K 35 34 35 35 35 35 34 35

Программа ТЕРМИНАЛ предназначена для компьютера «Радио-86РК» с объемом ОЗУ в 32 Кбайт. В табл.6 приведены адреса ячеек памяти, содержимое которых нужно изменить для 16-ки-лобайтной версии компьютера. Соответственно нужно настроить на 16 Кбайт и редактор «МИКРОН».

Программа испытана с различными периферийными устройствами: радиолюбительскими TNC типов MFJ-1274, РК-232, РК-88, модемом Concord-224. Со всеми из них ТЕРМИНАЛ устойчиво работал при скорости обмена 1200 Бод.

На основе приведенных в табл.1 модулей для редактора «МИКРОН» и БЕЙСИКа «МИКРОН» разработаны драйверы печатающего устройства типа «Роботрон-К6312» с последовательным интерфейсом.

ТАБЛИЦА 7 

7400: 31 FF 73 21 AA 74 CD 18 F8 3E 82 32 03 АО 3E 03
7410: 32 00 АО 21 00 21 22 E4 74 CD 03 F8 2A E4 74 7C
7420: FE 73 CA 36 74 7E 4F FE FF CA 3C 74 23 22 E4 74
7430: CD 3F 74 C3 1С 74 21 C8 74 CO 18 F8 C3 6C F8 79
7440: FE 00 C2 40 74 CO 54 74 C2 45 74 OE OA CD 54 74
7450: C2 40 74 C9 C5 05 E5 06 FF ЗА 01 АО E6 02 CA 69
7460: 74 05 C2 59 74 A7 C3 98 74 3E 02 32 00 АО 16 02
7470: CO 9C 74 ЗА E2 74 47 79 F6 02 E6 03 32 00 АО 79 
7480: OF 4F 16 02 CO 9C 74 05 C2 77 74 3E 03 32 00 АО
7490: ЗА E3 74 57 CO 9C 74 AF E1 01 C1 C9 2A EO 74 2В
74AO: 7C B5 C2 9F 74 15 C2 9C 74 C9 IF ОС ЗЕ ЗЕ 6Е 61
74BO: 76 60 69 74 65 20 6C 60 62 75 60 20 6В 6C 61 77
74CO: 69 7В 75 3C 3C 00 OA 00 ЗЕ ЗЕ 70 65 72 65 70 6Г
7400: 6C 6E 65 6E 69 65 20 20 6F 7A 75 3C 3C 00 0A 00
74E0: 14 00 08 04 00 00 00 00 00 00 00 00 00 00 00 00 

Код драйвера для редактора ((МИКРОН" приведен в табл.7. Драйвер размещается в ОЗУ, начиная с адреса 7400Н, и запускается директивой МОНИТОРа G7400. После запуска драйвера необходимо включить принтер и затем нажать любую клавишу. Текст, размещенный в ОЗУ с адреса 2100Н, будет выведен на принтер.

ТАБЛИЦА 8 

7400: 31 FP 73 ЗЕ 82 32 03 АО ЗЕ 03 32 00 АО 21 1В 74
7410: 22 85 03 ЗЕ 73 32 02 00 C3 00 00 F5 C5 D5 E5 CD
7420: 2A 74 C2 IP 74 E1 01 C1 F1 C9 C5 05 E5 06 FF ЗА
7430: 01 АО E6 02 CA 3F 74 05 C2 ?F 74 Д7 C3 6E 74 ЗЕ
7440: 02 32 00 АО 16 02 CO 72 74 ЗА 82 74 47 79 F6 02
7450: E6 03 32 00 АО 79 OF 4F 16 02 CO 72 74 05 C2 40
7460: 74 ЗЕ 03 32 00 АО ЗА 83 74 57 CD 72 74 AF El D1
7470: C1 C9 2A 80 74 2В 7C B5 C2 75 74 15 C2 72 74 C9
7480: 14 00 08 04 00 00 00 00 00 00 00 00 00 00 00 00

Код драйвера для БЕЙСИКа «МИКРОН» приведен в табл.8. Драйвер размещается, начиная с адреса 7400Н. После запуска по директиве G7400 инициализируется порт D14 и вызывается интерпретатор БЕЙСИКа. Драйвер поддерживает работу операторов LPRINT и LLIST.

Г. ИВАНОВ, г. Москва