Организация обмена между компьютерами по
Интерфейсу RS-232С
Для подключения к компьютерам удаленных терминалов, систем сбора информации или других компьютеров часто используют интерфейс последовательной связи RS-232C. Этот популярный интерфейс получил свое название от Рекомендуемого Стандарта номер 232 (Recommended Standard 232 – RS-232) на соединение оборудования, введенного в 1969 году Ассоциацией электронной промышленности (EIA) США. Вариант С этого стандарта определяет протокол, электрические параметры сигналов и описывает разъемы системы последовательной передачи данных, обеспечивающей на расстоянии до 15 м скорость передачи до 20 Кбит/сек /22/. К настоящему времени введены и широко применяются родственные стандарты RS-422A, RS-423A и RS-485, позволяющие реализовать скорости обмена до 100 Кбит/сек на расстояниях до 1000м /14/. Назначение некоторых сигналов интерфейса RS-232C и разводка разъемов DB25 и DB9 коммуникационных портов компьютера приведены в табл.11.10.
Каждый СОМ порт компьютера помимо микросхемы асинхронного связного адаптера, регистровая структура которого рассмотрена выше, содержит буферные схемы приемников и передатчиков (например, MAX222, MAX232, MAX242), преобразующих двуполярные сигналы интерфейса RS-232C в сигналы TTL/CMOS уровней, используемые микросхемой связного адаптера. Функциональная схема типового коммуникационного порта компьютера приведена на рис.11.6.
Для осуществления обмена данными между компьютерами по интерфейсу RS-232C необходимо организовать управление потоком данных как между процессором и связным адаптером в каждом из компьютеров, так и управление потоком данных между процессорами компьютеров (микропроцессорных систем).
При передаче очередной байт данных из памяти в буферный регистр связного адаптера процессор может записывать только при условии, что предыдущий байт передан в линию связи. При приеме байт из буферного регистра связного адаптера процессор может считывать в память только при условии его полного приема из линии связи. Для управления потоком данных между процессором и буферным регистром связного адаптера применяется два метода – программный опрос и коммуникационное прерывание.
Таблица 11.10
Сигналы интерфейса RS-232С
Номер контакта разъема | Сигнал | Назначение сигнала | Вход или выход | |
DB25 | DB9 | |||
FG | Защитное заземление (Frame Ground), соединяется с корпусом устройства и экраном кабеля | |||
TD | Передаваемые данные (Transmitted Data) | Выход | ||
RD | Принимаемые данные (Received Data) | Вход | ||
RTS | Запрос для передачи данных (Request To Send) | Выход | ||
CTS | Разрешение терминалу (передатчику) передавать данные (Clear To Send) | Вход | ||
DSR | Сигнал готовности от аппаратуры передачи данных (модема) (Data Set Ready) | Вход | ||
SG | Сигнальное заземление (Signal Ground) | |||
DCD | Сигнал обнаружения несущей удаленного модема (Data Carrier Detect) | Вход | ||
9-19 | -- | Не используются | ||
DTR | Сигнал готовности терминала (РС) к обмену данными (Data Terminal Ready) | Выход | ||
-- | Не используются | |||
RI | Сигнал вызова (звонка) (Ring Indicator) | Вход | ||
23-35 | -- | Не используются |
При обмене с использованием программного опроса процессор постоянно проверяет регистр состояния связного адаптера для определения моментов чтения из порта данных принятого байта или записи в порт данных очередного передаваемого байта.
В ПСА i8251 регистр состояния имеет адрес на единицу больший базового адреса адаптера.
В СОМ портах компьютера, выполненных на основе микросхемы i8250 или ее аналогов, программно опрашивается порт 3FDh (2FDh), называемый регистром состояния линии.
Бит 0 этого регистра будет равен 0 до тех пор, пока не будет принят код данных в буферный регистр данных приемника адаптера. Когда бит 0 становится равным 1, код данных надо немедленно считать из буферного регистра приемника, в противном случае на него может наложиться следующий принимаемый код данных. После того как код данных считан, бит 0 опять становиться равным 0 и остается таковым, пока не будет принят следующий код.
Бит 5 регистра состояния линии будет равен 0, пока идет процесс передачи кода данных из буферного регистра передатчика в линию связи. Когда буферный регистр передатчика освобождается, бит 5 становиться равным 1 и возможна запись из памяти в буферный регистр передатчика очередного кода данных.
Коммуникационная программа кроме управления приемом и передачей данных должна контролировать правильность процесса обмена. Для этого производится анализ бита 1 – бита 4 регистра состояния линии (см. табл.11.8), что позволяет определить наличие тех или иных ошибок, возникающих при обмене.
Коммуникационные программы, реализующие метод программного опроса, неэффективно используют ресурсы микропроцессора, ибо временные затраты программы существенно превышают время на собственно прием и передачу данных.
Более эффективным, и поэтому более предпочтительным, является второй метод управления потоком данных между процессором и буферным регистром связного адаптера, основанный на коммуникационных прерываниях, генерируемых асинхронными связными адаптерами СОМ портов компьютера при программируемых условиях. Порт СОМ1 генерирует аппаратное прерывание IRQ4, которому соответствует вектор прерывания INT0Ch, а порт СОМ2 – аппаратное прерывание IRQ3 с вектором INT0Bh. Сигналы коммуникационных прерываний портов поступают на соответствующие входы запросов на прерывания микросхемы i8259 – программируемого контроллера прерываний. Коммуникационные программы, использующие прерывания портов, не затрачивают на ввод и вывод больше времени, чем он того требует, и обычно функционируют в фоновом режиме.
Для разрешения прерываний необходимо на этапе инициализации асинхронного связного адаптера установить в 1 биты порта 3F9h (2F9h) управления прерываниями, соответствующие тем прерываниям, которые нужно обрабатывать.
Когда происходит прерывание, программа – обработчик прерывания должна проанализировать причину прерывания, прочитав содержимое порта 3FAh (2FAh) идентификации прерывания. Определив причину прерывания программа – обработчик устраняет ее и выполняет все необходимые действия. Например, если прерывание вызвано событием «данные приняты и доступны для чтения», обработчик прерывания считывает байт из буферного регистра приемника и записывает его в память.
Перед завершением своей работы программа – обработчик прерывания должна проанализировать наличие других прерываний, ожидающих обслуживания. Такая ситуация может возникнуть, когда одновременно произойдет несколько прерываний. В этом случае бит 0 регистра идентификации прерывания будет установлен в 1. Если такая ситуация имеет место, перед завершением обработки прерывания, необходимо снова прочитать регистр идентификации прерывания и обработать очередное прерывание. Так следует поступать до тех пор, пока бит 0 регистра идентификации прерывания не станет равным 0.
В конце программы – обработчика аппаратного прерывания обязательно требуется очистить внутренний регистр обслуживания прерывания контроллера i8259, чтобы разрешить обработку прерываний с более низкими уровнями, чем только что обработанное.
Обычная микросхема асинхронного связного адаптера i8250 не имеет буферной памяти, поэтому при больших скоростях обмена число прерываний, генерируемых схемой за одну секунду будет велико. Например, при скорости обмена 115200 бит/сек за одну секунду генерируется в среднем 11520 прерываний, и выполнение фоновой задачи обмена может существенно замедлить выполнение основных задач. Более современные асинхронные адаптеры, например, NS16550A, содержат буферную память. При использовании режима буферизации, например, на 14 символов, число прерываний за одну секунду при той же скорости 115200 бит/сек сократиться до 823, поэтому степень влияния фоновой задачи на скорость выполнения основной задачи будет значительно меньше.
Для управления потоком данных между компьютерами могут использоваться два варианта протокола –аппаратный и программный.
Аппаратный протокол RTS/CTS управления потоком использует сигнал CTS, который позволяет остановить передачу данных компьютером, если другой компьютер – приемник не готов к их приему. Компьютер – передатчик передает в линию связи очередной байт только при сигнале CTS=1. При сигнале CTS=0 (неготовность компьютера - приемника) компьютер – передатчик останавливает передачу, но байт, который уже начал передаваться задержать сигналом CTS невозможно. Это гарантирует целостность кодовой посылки.
Аппаратный протокол обеспечивает самую быструю реакцию компьютера – передатчика на состояние компьютера – приемника. Обычно даже самые простые микросхемы асинхронных адаптеров имеют не менее двух регистров в приемной части – сдвигающий для приема очередной кодовой посылки и буферный, из которого принятый байт считывается процессором. Это позволяет реализовывать обмен с аппаратным протоколом RTS/CTS без потери данных, не используя программную буферизацию.
При непосредственном (без модемов) соединении двух компьютеров (микропроцессорных систем) аппаратный протокол требует перекрестного соединения линий RTS – CTS, как показано на рис.11.8.
Программный протокол XON/XOFF управления потоком предполагает наличие двунаправленного канала передачи данных. Управление обменом производится следующим образом.
Если компьютер, принимающий данные, обнаруживает причины, по которым он не может их далее принимать, этот компьютер по обратному последовательному каналу посылает байт – символ XOFF (13h). Другой компьютер, приняв этот символ, приостанавливает передачу. Далее, когда компьютер - приемник снова становится готовым к приему данных, он посылает байт – символ XON (11h), приняв который компьютер – передатчик возобновляет передачу. Время реакции передатчика на изменение состояния приемника по сравнению с аппаратным протоколом увеличивается по крайней мере на время передачи управляющего символа (XON или XOFF) плюс время реакции программы передатчика на прием символа. Поэтому данные без потерь могут приниматься только приемником, имеющим дополнительную буферную память для принимаемых данных. В этой буферной памяти всегда должно быть зарезервировано свободное место на случай неготовности компьютера- приемника продолжать прием данных и передачи им символа XOFF.
Преимущество программного протокола при непосредственном соединении компьютеров (МС) заключается в отсутствии необходимости передачи управляющих сигналов RTS или CTS интерфейса, что позволяет использовать для двухстороннего обмена минимальный трехпроводный кабель, как показано на рис.11.8.
Недостатком этого протокола, кроме требования наличия буферной памяти и большого времени реакции, является сложность реализации полнодуплексного режима обмена. В этом случае из потока принимаемых данных должны выделяться и обрабатываться байты – символы управления потоком, что ограничивает набор передаваемых символов.
Кроме этих двух распространенных стандартных протоколов, поддерживаемых различными периферийными устройствами и операционными системами, существуют и некоторые другие. Например, ряд протоколов использует для управления обменом условие BREAK – запрос на прерывание передачи, для чего анализируется состояние бита 4 порта 3FDh (2FDh), представляющего собой регистр состояния линии.
Рассмотрим примеры фрагментов коммуникационных программ на языке Turbo Assembler, реализующих изложенные выше алгоритмы обмена /13,22/.
Пример 1.
;Этот фрагмент коммуникационной программы выполняет программный
;опрос регистра состояния линии, т.е. порта 3FDh (2FDh), и анализирует
;байт – символ XOFF
;Процедура цикла опроса регистра состояния (статуса) линии порта 3FDh | |||
KEEP_TRYING: | MOV | DX,BASE_ADDRESS | ;Запись базового адреса ;адаптера |
ADD | DX,5 | ;Указываем на регистр ;статуса линии | |
IN | AL,DX | ;Получаем байт статуса ;линии | |
TEST | AL,00011110B | ;Проверяем, есть ли ;ошибки при обмене | |
JNZ | ERROR_ROUTINE | ;Если да, то переходим к ;обработке ошибок ;процедурой ;ERROR_ROUTINE | |
TEST | AL,00000001B | ;Проверяем, получены ли ;данные | |
JNZ | RECEIVE | ;Если да, то переходим к ;приему процедурой ;RECEIVE | |
TEST | AL,00100000B | ;Проверяем готовность к ;передаче | |
JZ | KEEP_TRYING | ;Если нет, то переходим к ;началу цикла опроса ;KEEP_TRYING | |
;Процедура передачи символа, принимаемого с клавиатуры | |||
MOV | AH.1 | ;Функция проверки ;нажатия клавиши | |
INT | 16H | ;Прерывание клавиатуры ;BIOS | |
JZ | KEEP_TRYING | ;Возврат, если не было ;нажатия на клавишу | |
MOV | AH,0 | ;Функция получения кода с ;клавиатуры | |
INT | 16H | ;Теперь символ клавиши в ;AL | |
SUB | DX,5 | ;Запись базового адреса ;адаптера – буферного ;регистра передатчика | |
OUT | DX,AL | ;Передача символа в ;линию связи | |
JMP | SHORT KEEP_TRYING | ;Возврат к началу цикла | |
;Процедура приема символа и вывода его на экран | |||
RECEIVE: | MOV | DX,BASE_ADDRESS | ;Запись базового адреса ;адаптера |
IN | AL,DX | ;Считываем полученный ;символ | |
CMP | AL,13H | ;Проверка символа на ;XOFF | |
JE | XOFF_ROUTINE | ;Если принятый символ ;XOFF, то переходим к ;процедуре обработки ;XOFF_ROUTINE (передачу ;прекращаем до ;получения ;символа XON) | |
MOV | DL,AL | ;Готовим символ для ;вывода на экран | |
MOV | AH,2 | ;Функция вывода символа ;на экран | |
INT | 21h | ;Вывод символа на экран | |
JMP | SHORT KEEP_TRYING | ;Возврат к началу цикла |
Пример 2.
;Этот фрагмент коммуникационной программы использует коммуникационное прерывание
;Производим установку вектора прерывания на адрес программы IO_INT – ;обработчика коммуникационного прерывания | ||||
PUSH | DS | ;Сохраняем регистр DS | ||
MOV | DX,OFFSET IO_INT | ;Записываем смещение IP ;процедуры обработчика ;прерываний IO_INT | ||
MOV | AX,SEG IO_INT | ;Записываем значение ;сегмента CS процедуры ;обработчика прерываний ;IO_INT в сегментный ;регистр DS | ||
MOV | DS.AX | |||
MOV | AL,0BH | ;Записываем номер ;вектора прерываний для ;порта СОМ1 | ||
MOV | AH,25H | ;Функция DOS установки ;вектора 0Bh на адрес ;программы - обработчика | ||
INT | 21H | ;Производим установку ;вектора на адрес программы ; - обработчика | ||
;Инициализация регистра управления прерываниями – порта 3F9h (2F9h) | ||||
MOV | DX,BASE_ADDRESS | ;Запись базового адреса ;адаптера | ||
INC | DX | ;Получаем адрес регистра ;управления прерываниями | ||
MOV | AL,00000011B | ;Разрешаем прерывания ;приема и передачи | ||
OUT | DX,AL | |||
POP | DS | ;Восстанавливаем ;сегментный регистр DS | ||
…………………. | ………. | ………………………... | …………………………………. | |
;Процедура IO_INT обработки прерывания, сначала определяем его тип | ||||
;IO_INT PROC FAR | ||||
NEXT_INT: | MOV | DX,BASE_ADDRESS | ;Запись базового адреса ;адаптера | |
INC | DX | ;Указываем на регистр ;идентификации ;прерывания | ||
INC | DX | |||
IN | AL,DX | ;Считываем содержимое ;этого регистра | ||
TEST | AL,00000100B | ;Проверяем, это ;прерывание от передатчика? | ||
JNZ | TRANSMIT | ;Если да, переходим к ;процедуре передачи ;TRANSMIT | ||
RECEIVE: | MOV | DX,BASE_ADDRESS | ;Если нет, выполняем ;процедуру приема ;RECEIVE | |
…………………………………… | ………. ………. | ……………………..………………………….. | ;Здесь расположена ;процедура приема RECEIVE | |
…………………. | ………. | ………………………... | …………………………………. | |
JMP | SHORT ANOTHER | ;Переходим к проверке на ;наличие других прерываний, ;ожидающих обслуживания | ||
TRANSMIT: | MOV | DX,BASE_ADDRESS | ;Здесь расположена процедура ;передачи TRANSMIT | |
…………………. | ………. | ………………………... | …………………………………. | |
;Перед выходом из программы – обработчика проверяем, нет ли других ;прерываний, ожидающих обслуживания | ||||
ANOTHER: | MOV | DX,BASE_ADDRESS | ;Запись базового адреса ;адаптера | |
INC | DX | ;Указываем на регистр ;идентификации ;прерывания | ||
INC | DX | |||
IN | AL,DX | ;Считываем содержимое ;этого регистра | ||
TEST | AL,00000001B | ;Проверяем бит 0 регистра | ||
JNZ | NEXT_INT | ;Если бит 0 равен 1, то ;переходим на начало ;обработчика IO_INT | ||
MOV | AL,20H | ; Если бит 0 равен 0, то ;очищаем регистр ;обслуживания прерываний ;контроллера прерываний | ||
OUT | 20H,AL | |||
IRET | ;Возврат из обработчика ;прерываний | |||
IO_INT | ENDP | |||
Контрольные вопросы и задания
1.Составить программу для тестирования коммуникационного порта компьютера. Контакты порта соединены по схеме, приведенной на рис.11.7.
2.Составить программу для тестирования коммуникационных портов компьютера. Контакты портов соединены по схеме, приведенной на рис.11.8.
3.Составить программу для тестирования коммуникационного порта компьютера. Контакты порта соединены по схеме на рис.11.9.
Дата добавления: 2021-12-14; просмотров: 280;