Организация обмена между компьютерами по


Интерфейсу 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; просмотров: 276;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.014 сек.