ПРОГРАММИРОВАНИЕПОСЛЕДОВАТЕЛЬНОГО ПОРТА
Последовательный порт в системе MS-DOSобеспечивает вход во
внешний мир. Основной задачейпоследовательного порта является
направление иполучение данных по шине в виде потока битов. (В
противоположностьпараллельному порту, в которомвнутренний байт
передаетсяцеликом). Вы можете использовать последовательный порт
для подключения к системе «мыши», направления данных на принтер
или дляустановления автоматической телефонной связи с использо-
ванием модема.Хотя системы MS-DOS не нуждаются для работы в пос-
ледовательномпорте, эти порты стали стандартнойпериферией сис-
темы.
Последовательный порт в системах MS-DOSспособен поддерживать
стандартасинхронной передача данных RS-232C. Хотя даже посредс-
твом ROM-BIOS,стандартной части всех систем MS-DOS, MS -DOS сама
по себе включает некоторую поддержку программирования портов
RS-232C(например, прерывание номер 14h), этаподдержка не отве-
чает требованиямвысокоскоростной связи. Если Вы хотитевключить
в свою прикладнуюпрограмму эффективные возможности последова-
тельнойсвязи, Вы должны осуществлять доступ кпоследовательному
порту нааппаратном уровне. В этой главепоказано, как это дела-
ется.
Основы асинхронной последовательнойсвязи
Говоря о передаче данных, мы интересуемся передачей байтов
данных от одногоустройства к другому, например, от персонального
компьютера кмодему или к последовательному принтеру. Если мы
имеем восемь линий между двумя устройствами, то мы можем назна-
чить каждой линиибит и послать сразу один байт данных. Это будет
параллельная передача. Таким образом работает параллельный порт
персональногокомпьютера, кроме того, в дополнение к восьми лини-
ям данных имеются другие сигнальные линии, оказывающие помощь в
передаче данных.
С другой стороны, если мы имеем одну линию для передачи сиг-
налов, тонеобходимо посылать каждый байт данных последовательно,
по одномубиту. Более того, мы может посылать данные синхронно,
такимобразом, что каждый байт посылаетсяв ранее определенное
время (скажем,один байт каждые х секунд), или асинхронно со ско-
ростью, которуюпредварительно определять необязательно.
Последовательная связь дешевле, чем параллельная, так как
требует меньшелиний передачи данных — минимум две для двусторон-
ней связи. Крометого режим асинхронной передачи оказывает значи-
тельно меньшеевоздействие на аппаратуру ввиду того, что не тре-
буется дополнительное специальное оборудование для поддержки
синхронизациимежду передатчиком и приемником.
Таким образом, асинхронная последовательная связь является
предпочтительнымрешением ввиду низкой стоимости и простоты ис-
пользуемых аппаратныхсредств. Конечно, в этом режиме передачи мы
должныпреобразовывать каждый байт данных в серию битов и указы-
вать приемникуначало и конец каждого байта. На рисунке8-1 про-
иллюстрированаконцепция асинхронной последовательной связи.
Предположим, что мы умеем преобразовыватькаждый байт в поток
единиц инулей, то есть биты, которые могут быть переданы через
среду связи(например, телефонную линию). В самом деле, универ-
сальныйасинхронный приемопередатчик (UART), как мы увидим в сле-
дующемразделе, выполняет точно такую жефункцию. Обычно, в то
время как линиянаходится в режиме ожидания, для демонстрации то-
го, что линия впорядке, по ней передается единица, обозначая не-
занятость линии.С другой стороны, когда линия находится в состо-
┌ ─ ─ ─ ── ─ ─ ─ ─ ─ ─ ─ ─ ── ─ ─ ─ ─ ─ ─ ─ ─ ── ─ ─ ─ ┐
Восстанавливается один байт
│ └ 7 6 5 4 3 2 2 1┘└──┐
┌───Принимается одинсимвол────┐└─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘┌─┐|
│ |A||B||7||6||5||4||3||1||0||C| ^ ^ ^ ^ ^ ^ ^ ^ ||
-->└─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘┌─────┬─────────┬─────┐ |─┘└┐
┌──────────────────────────────────| D | | | | |
|│ от модема └─────┴─────────┴─────┘ |───|
| UART на приемном конце скорость в бодах | |
|└ ── ─ ─ ─ ─ ─ ─ ─ ─ ── ─ ─ ─ ─ ─ ─ ─ ─ ── ─ ─ ─ ─ ─ ─ ─| |
| |───|
| ┌───────┐ | |
└──| |──┐ |───|
└───────┘ │ Принимающий
│ Телефонная линия компьютер
┌┼┐___________________________┌─┐
└─┘
│
│
│
│ ┌───────┐
└───────| модем|───|
┌────────┐ └───────┘ |
│ │ |
│ PC │ |
┌──┴────────┴──┐ |
│ │ |
└┐┌────────────┘ v
|| ┌ ─ ─ ─ ─ ─ ─ ─ ── ─ ─ ─ ─ ─ ─ ─ ─ ── ─ ─ ─ ─ ─ ─ ───┐
|| │ ┌────────Байт───────────┐
|| 7 6 5 4 3 2 2 1 |
|└──┘ └─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘┌───Посылаемый один символ──┐
└───┐ |A||B||7||6||5||4||3||1||0||C|
┌─────┬─────────┬─────┐└─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘
| | | | D |──────────────────────────────┘
└─────┴─────────┴─────┘ к модему --> |
| скорость в бодах UART впоследовательном адаптере PC
└ ─ ─ ─ ── ─ ─ ─ ─── ─ ─ ── ─ ─ ─ ─ ─ ─ ─ ─ ── ─ ─ ─ ┘
A-стоп; B-четность; C-начало;D-сдвиговый регистр
янии логического нуля, говорится, что она стоит в режиме
выдерживанияинтервалов. Таким образом, логические единица и ноль
рассматриваются,соответственно, как MARK и SPACE.
Рис.8-1. Асинхронная последовательнаясвязь.
В асинхронной связи изменение условия состояния линии сMARK
на SPACE означаетначало символа (смотри рисунок 8-2). Этоназы-
вается стартовымбитом. За стартовым битом следует комбинация би-
тов, представляющая символ, и затем бит контролячетности. Нако-
нец, линия переходит в состояние ожидания MARK, которая
представляетсобой стоповый бит и означает конец текущего симво-
ла. Число битов, используемых для представлениясимвола, называ-
ется длиной словаи обычно бывает равно семи или восьми. Конт-
рольный бит используется для выполнения элементарнойпроверки на
наличие ошибки.
Линия Линиявозвращается в
свободна свободноесостояние
A
B────┐ ┌ ─ ┬ ─ ┬ ─ ┬ ─ ┬─ ┬ ─ ┬ ─ ┬ ─ ┬ ─┬───┬───────┐ ┌ ─ ─
│ │ 0 1 2 3 4 5 6 7 │ │
C ─ ─└──┘ ─ ┴ ─ ┴ ─ ┴─ ┴ ─ ┴ ─ ┴ ─ ┴ ─ ┴─ ┴ ─ ┴ ─ ─ ─ └──┘─ ─
^└──────── 7 или 8 битданных ───┘ ^ ^ ^
Стартовый бит четности│ Начало другого
бит │ символа
битстоповый
Время ----->
A-длительность 1 бита; B-MARK или 1;C-SPACE или 0
Рис.8-2. Представление васинхронной последовательной
связи формата одиночногосимвола
Как передатчик (или приемник) узнают о длительности каждого
бита? Действительно, и передатчик, и приемник должны знать его
длительность илидетектирование битов будет невозможно. Длитель-
ность каждогобита определяется генераторами тактовых импульсов
приемника ипередатчика. Отметим, однако, что генераторы в прием-
нике ипередатчике должны иметь одну и ту же частоту, но не тре-
буется, чтобы онибыли синхронизированы. Выбор частоты генератора
зависит отскорости передачи в бодах, котораяозначает число из-
менений состояниялинии каждую секунду. Номинально тактовая час-
тота«16-кратная скорость передачи в бодах» означает, что линия
проверяется достаточно часто для надежного распознаваниястарто-
вого бита.
Существует одно обычное состояние линии, которое иногда ис-
пользуется дляпривлечения внимания приемника. Нормальным состоя-
нием линии является MARK (или 1) и началосимвола определяется
переходом SPACE(0). Если линия находится в состоянии SPACE в те-
чение периодавремени большем, чем время, которое она затратила
бы на получениевсех битов символа, тогда мы говорим,что насту-
пило состояние BREAK. В кодах ASCII отсутствует представление
BREAK — этоозначает, что линия «умерла» на непродолжительный
промежутоквремени, который составляет BREAK.
Контроль по четности и обнаружениеошибок
Ранее мы упоминали, что бит контроля четностиполезен для об-
наружения ошибок. Например, если выбрана проверкана четность,
этот битустанавливается таким образом, что общеечисло единиц в
текущем слове является четным (такая же логика используется для
проверки нанечетность). В приемнике четностьвычисляется заново
и сравнивается сбитом контроля четности. Если они неравны, то
приемниксообщает, что имеет место ошибкачетности. Главный не-
достатокобнаружения ошибки посредством проверки на четность зак-
лючается втом, что можно только обнаружить ошибки,которые вли-
яют на одинединственный бит. Например, битовая комбинация 0100
0001 0 (ASCIIA), переданная восемью битами спроверкой на чет-
ность, можетизмениться (скажем, из-за шума в линии) на 0100 01110
(ASCII G), однакоприемник не обнаружит ошибку, так как провер-
ка на четностьвыполняется.
Связь с использованием стандартаRS-232C.
Ранее мы упоминали о передаче по телефонной линии единиц и
нулей. Несмотря на то, что в персональном компьютере мы пред-
ставляем единицыи нули посредством уровней напряжения, сигналы,
передаваемые потелефонной линии обычно являются тонами различной
частоты. Устройство, которое находится между аппаратурой персо-
нальногокомпьютера и передающей линией и делает возможной пере-
дачу данных, называется модемом(модулятор/демодулятор). Модем
можетпреобразовывать информацию в представление «напряжение/нет
напряжения"цифровых схем и обратно, а так жеаналоговые сигналы
(например, тоны), предназначенные для передачи потелефонной ли-
нии. Стандарты, такие как RS-232C (выдвинутыйАссоциацией элект-
роннойпромышленности, EIA), описывают метод обмена информацией
между модемом (или, в соответствии с терминологией ассоциации
EIA, «аппаратура передачи данных, DCE») и связной аппаратурой
персонального компьютера (или «оконечная аппаратура обработки
данных, DTE"). Модем может работать в двухрежимах: полудуплекс-
ном и дуплексном. В полудуплексномрежиме модем может осущест-
влять передачутолько в одном направлении в один промежуток вре-
мени, в то время как при работе в дуплексном режиме
осуществляетсянезависимая двухсторонняя связь. Стандарт RS-232C
обеспечиваетуправление такими сигналами, как «запрос-на-передачу
(RTS)" и«открыт-для -передачи (CTS)», которые могут быть исполь-
зованы для координации процесса передачи и приемаданных. Термин
«квитированиеустановления связи» используется для описания коор-
динации приема ипередачи сигналов. Как показано нарисунке 8-3,
стандарт RS-232Cсоответствует кабелю и соединителям, используе-
мым для связиперсонального компьютера и модема.
Несмотря на то, что мы использовали модем в качестве примера
аппаратурыпередачи данных (DCE), другиеустройства, такие как
«мышь»или принтер с соответствующей схемой, также могут обмени-
ваться данными сперсональным компьютером черезпоследовательный
порт. Таким образом, в этой главе все упоминания омодеме прием-
лемы в равнойстепени как к последовательному принтеру так и к
последовательной«мыши».
┌ ─ ─ ── ─ ─ ─ ─ ─ ─ ─ ─ ── ─ ─ ─ ── ─ ─ ┐
ОАОД ┌───── Номер контакта──────┐ DCE
| ┌─────┐ ┌─────┐ |
| 2|─────────────ПД───────────|2 |
| | 3|──────────────П───────────|3 | |
| 4|─────────────ЗП───────────|4 |
| | 5|────────────ОДП───────────|5 | |
| 6|────────────ГПД───────────|6 | к
| |┌──7|───────────Общий──────────|7──┐| телефонной
| 8|───────────ДСПЛ───────────|8 | линии
| | 20|────────────ТДГ───────────|20 | | ^
| 22|─────────────RI───────────|22 | |
| | .| | . | |────┐ |
| .| | . | | |
┌─| | .| |. | | | |
RS ---> | └─────┘ └─────┘ | |
| └ ─ ─ ── ─ ─ ─ ─ ─ ─ ─ ─ ── ─ ─ ─ ── ─ ─ ┘ | |
┌───┴────┐ | |
│ │ |--| |
│ │ | ---|
┌──┴────────┴──┐ ┌─┴───┴─┐
│ │ | |
└──────────────┘ └───────┘
PC или ОАОД Модемил
ОАОД-оконечная аппаратура обработкиданных;RS-кабельRS-232C;
ПД — передача данных; П-прием данных; ЗП-запрос на передачу;
ОДП — открыт для передачи; ГПД — готов кпередаче данных;
ДСПЛ — детектор сигнала приемной линии;ТДГ -терминал данных
готов; АПД — или аппаратура передачи данных
Рис.8-3. СвязьRS-232C.
Управление потоком с помощьюXON/XOFF
В дополнение к квитированию установления связи посредством
аппаратныхсигналов RTS/CTS, для достиженияуправления потоком с
использованиемпрограммного обеспечения применяются специальные
управляющие символы ASCII (Control-Q/Control-S илиXON/ XOFF).
Управлять потокомнеобходимо ввиду того, что иногда либо передат-
чик либо приемник не могут поддерживать скорость передачи и они
должны иметьвозможность информировать другую сторону о необходи-
мости остановки на время, требуемое длятого, чтобы отставшая
сторона смогладогнать другую.
Предположим, что приемник имеет буфер дляхранения поступаю-
щих символов. Кактолько буфер после заполнения закрывается, при-
емник можетпослать символ XOFF передатчику, сигнализируя, что
передача должнабыть приостановлена. Конечно, приемник должен по-
нять значениеXOFF и прекратить передачу символов. Затем, когда
приемникобработает символы (скажем, запишет их вфайл на диске)
и буферосвободится, тогда посылается символXON, показывающий,
что передачаможет быть продолжена. Эта схемауправления потоком
широкоприменяется ввиду ее простоты. Большинство связных прог-
раммпредоставляют возможность дуплексной связи с управлением по-
током, основанномна применении символов XON/XOFF.
Последовательный порт с точки зрения программиста
Аппаратура последовательного порта всистемах MS-DOS известна
какпоследовательный адаптер или асинхронный связной адаптер (да-
лее мы будем называть его последовательным адаптером). Адаптер
основан на Intel8259 UART (универсальный асинхронный приемопере-
датчик), имеетпорт RS-232C для подключения к модему и, как адап-
тер дисплея, программируется посредством наборарегистров. Мик-
ропроцессор имеет доступ к регистрам через ранее определенные
адреса портаввода/вывода.
Универсальный асинхронный приемопередатчик Intel 8250 управ-
ляетсяпосредством записи в набор восьмибитовых регистров и чте-
ния из них. Эти регистры доступны программисту черезадреса пор-
та. Адреса портов задаются последовательно, поэтому достаточно
знать адрес первого порта. Он также известенкак базовый адрес
последовательногоадаптера. В персональном компьютере IBM PC двум
последовательнымпортам COM1 и COM2 присвоены базовые адреса пор-
та 3F8h и 2F8hсоответственно. Так, для последовательного адапте-
ра COM1 первыйрегистр имеет адрес 3F8h, следующий 3F9h и так да-
лее.
В 8250 имеется семь физических регистров и они описываются в
порядкевозрастания начального номера, начиная с базового адреса.
Как показанона рисунке 8-4, базовый адрес порта имеет один ре-
гистр, который делится на два, как приемный буферный регистр и
регистр храненияпередачи (THR), который используется дляхране-
ния одногопередаваемого или принимаемого символа. Затем следует
регистрразрешения прерываний, которыйиспользуется для разреше-
ния илиблокировки генерации прерываний последовательным адапте-
ром. Третий регистр, называемый регистромидентификации прерыва-
ний, содержит сообщение универсального асинхронного
приемопередатчика об идентичности прерывания. Затем следует ре-
гистр управлениялинией, используемый для установленияразличных
связных параметров, таких как длина слова, количествостоповых
битов, четность и скорость передачи в бодах. Пятыйрегистр — это
региструправления модемом, который используется для передачи мо-
демусигналов, таких как DTR (терминал готов)и RTS (запрос на
передачу).Наконец, два последних регистра, регистр состояния ли-
нии и регистрсостояния модема, показывают соответственно состоя-
ние линии имодема.
Первые два регистра применяются также дляустановки скорости
передачи в бодах. Скорость передачи в бодах определяется как
16-битовыйделитель тактовой частоты, используемой для последова-
тельного адаптера(1.8432 МГц в большинстве систем MS -DOS). Зна-
чение делителявычисляется по формуле
1,843,200
делитель= ------------------------------
16 Х скорость передачи в бодах
Чтобы установить скорость передачи вбодах, Вы должны проде-
лать следующее:
1. Установить в 1 наиболее значимыйбит регистра управления
линией (он называется битом защелкидоступа делителя или
DLAB).
2.Загрузить младший и старший байтыделителя соответственно в
приемный буфер и регистр разрешенияпрерываний.
3. Установить DLAB в 0 для обеспечениянормальной работы уни-
версального асинхронногоприемопередатчика.
A Приемный буфер/регистр хранения передачи
B ┌───┬───┬───┬───┬───┬───┬───┬───┐
(COM1-3F8|1.| | | | | | | 2.|
COM2-2F8)└───┴───┴───┴───┴───┴───┴───┴───┘
Регистр разрешения прерывания
B+1 ┌───┬───┬───┬───┬───┬───┬───┬───┐
| 0 | 0 | 0 | 0 | 3.| 4.| 5.| 6.|
└───┴───┴───┴───┴───┴───┴───┴───┘
Установить бит в 1 для разрешения
Регистр идентификации прерывания
B+2 ┌───┬───┬───┬───┬───┬───┬───┬───┐
| 0 | 0 | 0 | 0 | 0 | | |7.|
└───┴───┴───┴───┴───┴───┴───┴───┘
└─3-битовый идентификатор прерывания
110 = состояниелинии
100 = приемныеданные
010 = буферпередачи свободен
000 = состояниемодема
Регистр управления линией
B+3 ┌───┬───┬───┬───┬───┬───┬───┬───┐
| 8.| | 9. |10.| 11. |
└───┴───┴───┴───┴───┴───┴───┴───┘
└─BREAK: 1 устанавливаетлинию в SPACE
Регистр управления модемом
B+4 ┌───┬───┬───┬───┬───┬───┬───┬───┐ a. — OUT2
| 0 | 0 | 0 |12.| a.| b.| c.| d.| b. — OUT1
└───┴───┴───┴───┴───┴───┴───┴───┘ c. — RTS
└──13. d. — DTR
Регистр состояния линии
B+5 ┌───┬───┬───┬───┬───┬───┬───┬───┐
| 0 |14.|15.|16.|17.|18.|19.|20.|
└───┴───┴───┴───┴───┴───┴───┴───┘
Регистр состояния модема a. — RLSD