Читайте данную работу прямо на сайте или скачайте

Скачайте в формате документа WORD


Программирование - интерфейс RS-232

внешний

направление и получение данных по шине в видеа

противоположность параллельному порту,

передается целиком). Вы можете использовать последовательный порт

для

или для установления автоматической телефонной связи c

ванием модема. Хотя системы MS-DOS не нуждаются для работы в пос-

ледовательном порте,

темы.

стандарт асинхронной передача данных RS-232C.

твом ROM-BIOS, стандартной части всех систем MS-DOS, MS -DOS сама

по

RS-232C (например,

чает требованиям высокоскоростной связи.

в свою прикладную программуа

тельной связи,

порту на аппаратном ровне.

ется.

данных от одного устройства к другому, например, от персонального

компьютера к модему или к

имеема

чить каждой линии бит и послать сразу один байт данных. Это будет

параллельная

персонального компьютера, кроме того, в дополнение к восьми лини-

яма

передаче данных.

налов, то необходимо посылать каждый байт данных последовательно,

по одному биту.

таким образом,

время (скажем, один байт каждые х секунд), или асинхронно со ско-

ростью, которую предварительно определять необязательно.

требует меньше линий передачи данных - минимум две для двусторон-

ней связи. Кроме того режим асинхронной передачи оказывает значи-

тельно меньшее воздействие на аппаратуру ввиду того,

буется

синхронизации между передатчиком и приемником.

предпочтительным решением ввиду низкой стоимости иа

пользуемых аппаратных средств. Конечно, в этом режиме передачи мы

должны преобразовывать каждый байт данных в серию битов и

вать приемнику начало и конец каждого байта.

иллюстрирована концепция асинхронной последовательной связи.

единиц и нулей,

среду связи (например,

сальный асинхронный приемопередатчик (UART), как мы видим в сле-

дующем разделе,

время как линия находится в режиме ожидания, для демонстрации то-

го, что линия в порядке, по ней передается единица, обозначая не-

занятость линии. С другой стороны, когда линия находится в состо-

--> └─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘└─┘ ┌─────┬─────────┬─────┐а

┌──────────────────────────────────|а

|│

|└ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─|

|

└──|

янии

выдерживания интервалов. Таким образом, логические единица и ноль

рассматриваются, соответственно, как MARK и SPACE.

на SPACE означает начало символа (смотри рисунок 8-2).

вается стартовым битом. За стартовым битом следует комбинация би-

тов,

нец,

представляет собой стоповый бит и означает конец текущего

ла.

ется длиной слова и обычно бывает равно семи

рольный

наличие ошибки.

Линия

свободн

B ────┐а

C ─ ─ └──┘ ─ ┴ ─ ┴ ─ ┴ ─ ┴ ─ ┴ ─ ┴ ─ ┴ ─ ┴ ─ ┴ ─ ┴ ─ ─ ─ └──┘ ─ ─

бита?а

длительность или детектирование битов будет невозможно.

ность каждого бита определяется генераторамиа

приемника и передатчика. Отметим, однако, что генераторы в прием-

нике и передатчике должны иметь одну и ту же частоту,

буется, чтобы они были синхронизированы. Выбор частоты генератора

зависит от скорости передачи в бодах,

менений состояния линии каждую секунду. Номинально

тота "16-кратная скорость передачи в бодах" означает,

проверяется

вого бита.

пользуется для привлечения внимания приемника. Нормальным состоя-

ниема

переходом SPACE (0). Если линия находится в состоянии SPACE в те-

чение периода времени большем,

бы на получение всех битов символа,

пило

BREAK - это означает,

промежуток времени, который составляет BREAK.

наружения

этот бит устанавливается таким образом,

текущема

проверки на нечетность).

и сравнивается с битом контроля четности.

приемник сообщает,

достаток обнаружения ошибки посредством проверки на четность зак-

лючается в том,

яют на один единственный бит.

1 0 (ASCII A),

ность, может измениться (скажем,из-за шума в линии) на 0100 00

(ASCII G), однако приемника

ка на четность выполняется.

нулей.

ставляем единицы и нули посредством ровней напряжения,

передаваемые по телефонной линии обычно являются тонами различной

частоты.

нального компьютера и передающей линией и делает возможной

дачу данных,

может преобразовывать информацию ва

напряжения" цифровых схем и обратно,

(например,

нии.

ронной промышленности,

междуа

EIA,

персонального

данных,

нома

влять передачу только в одном направлении в один промежутока

мени,

осуществляется независимая двухсторонняя связь.

обеспечивает управление такими сигналами, как "запрос-на-передачу

(RTS)" и "открыт-для -передачи (CTS)", которые могут быть исполь-

зованы

"квитирование установления связи" используется для описания коор-

динации приема и передачи сигналов.

стандарт RS-232C соответствует кабелю и соединителям,

мым для связи персонального компьютера и модема.

ппаратуры передачи данных (DCE),

"мышь" или принтер с соответствующей схемой,

ваться данными с персональным компьютерома

порт.

лемы в равной степени как к последовательному принтеруа

последовательной "мыши".

RS ---> |

ппаратных сигналов RTS/CTS,

использованием программного обеспечения

управляющие

Управлять потоком необходимо ввиду того, что иногда либо передат-

чика

должны иметь возможность информировать другую сторону о необходи-

мости

сторона смогла догнать другую.

щих символов. Как только буфер после заполнения закрывается, при-

емник может послать символ XOFFа

передача должна быть приостановлена. Конечно, приемник должен по-

нять значение XOFF и прекратить передачу символов.

приемник обработает символы (скажем,

и буфер освободится,

что передача может быть продолжена.

широко применяется ввиду ее простоты.

рамм предоставляют возможность дуплексной связи с правлением по-

током, основанном на применении символов XON/XOFF.

как последовательный адаптер или асинхронный связной адаптер (да-

лее

основан на Intel 8259 UART (универсальный асинхронный приемопере-

датчик), имеет порт RS-232C для подключения к модему и, как адап-

тер дисплея,

ропроцессора

дреса порта ввода/вывода.

ляется посредством записи в набор восьмибитовых регистров и

ния из них.

та.

знать

последовательного адаптера. В персональном компьютере IBM PC двум

последовательным портам COM1 и COM2 присвоены базовые адреса пор-

та 3F8h и 2F8h соответственно. Так, для последовательного адапте-

ра COM1 первый регистр имеет адрес 3F8h, следующий 3F9h и так да-

лее.

порядке возрастания начального номера, начиная с базового адреса.

Как показано н

гистр,

регистр хранения передачи (THR),

ния одного передаваемого или принимаемого символа.

регистр разрешения прерываний,

ния или блокировки генерации прерываний последовательныма

ром.

ний,

приемопередатчик

гистр правления линией,

связныха

битов,

регистр управления модемом, который используется для передачи мо-

дему сигналов,

передачу). Наконец, два последних регистра, регистр состояния ли-

нии и регистр состояния модема, показывают соответственно состоя-

ние линии и модема.

передачи

16-битовый делитель тактовой частоты, используемой для последова-

тельного адаптера (1.8432 Гц в большинстве систем MS -DOS). Зна-

чение делителя вычисляется по формуле

лать следующее:


(COM1-3F8| 1.|

COM2-2F8)└───┴───┴───┴───┴───┴───┴───┴───┘

A - адрес порта или регистр

B - базовый адрес; 1. - бит 7 данных;а

3. - состояние модема; 4. - состояние линии приема;

5. - регистр хранения передачи свободен; 6. - прием данных

разрешен; 7. - 0 означает, что прерывание ждет;

8. - бит доступа к защелке; 9. - четность:а

001=нечетность, 011=четность; 10. - число стоповых битов;

11. - длина слова: 10-7, 11-8; 12. - проверка обратного цикла;

13. - должен быть 1 для

компьютера; 14. - передача свободна; 15. - регистр хранения пере-

дачи свободен; 16. - обнаружен BREAK; 17. - ошибка кадровой

синхронизации; 18. - ошибка четности;а

границы; 20. - данные для приема готовы;

рости передачи в бодах.

можной скоростью передачи является

115,200а

предел вытекает из того, что делитель не может быть меньше едини-

цы.

пользовать прерывание BIOS 14h. Мы рассмотрим применение BIOS да-

лее в этой главе.

ной системе:а

ченность относится к повторяющейся

устройства ввода/вывода для инициализации требуемой транзакции. В

упорядоченном вводе/выводе программа, запрашивающая символ ввода,

многократно считывает состояние регистра в стройстве ввода/выво-

да до тех пор, пока оно не покажет, что символ доступен для ввода

(или

лось"). Когда состояние казывает, что имеется готовый для работы

символ, программа считывает его из соответствующего регистра ст-

ройства ввода/вывода.

пор пока не готов,

волов на устройство ввода/ вывода.

полнение

операции ввода/вывода.

муникационный порт является то,

300а

кроме как отображать его на экране.

Предположим,

следующие связные параметры:а

ность и один стоповый бит, который вместе со стартовым битом, до-

бавляет до 10 бит на символ. Вы ожидаете получать около 30 симво-

лова

1/30 секунды для выполнения других операций. Если

потерять какие-либо символы,то в это время Вы должны снова начать

упорядочение порта.

9600 бод?а

ведения символа на экран дисплея,

специальные символы и эмулировать терминал.

предоставляета

поступать непосредственно на центральный процессор,

должает выполнять свою работу, не связываясь с стройством. Когда

устройство готово к вводу/выводу, оно сигнализирует об этом цент-

ральному процессору посредством аппаратуры.

центральный процессор сохраняет свое текущее состояние и вызывает

подпрограммуа

таблице векторов прерываний.

ввода/вывода,

ется в прерванную программу.

пающих в коммуникационный порт персонального компьютера.

зовав где-нибудь

использовать

быстро считывает символ из коммуникационного

его в следующей доступной ячейке памяти в буфере.

дут теряны в процессе считывания и сохранения

прерываний

задача достаточно проста для выполнения в короткие временныеа

тервалы

9600 бод.

работки главной программой символов, хранящихся в буфере, не име-

ет значения. Конечно, существует риск переполнения буфера, но эта

проблем

этот способ не очень хорош,

можно использовать правление потоком с помощью XON/XOFF.

прерываниями буферная связь с использованием правления потоком с

помощью XON/XOFF, предпочтительнее порядоченной связи.

запрограммирован для прерывания

всякий

рисунок 8-5). Универсальный асинхронный приемопередатчик присваи-

вает приоритет каждому из четырех событий. В таблице 8-1 перечис-

лены четыре прерывания.

───────────────┬────────────────────────────────────────────────

───────────────|────────────────────────────────────────────────

───────────────|────────────────────────────────────────────────

приемной

состояния линии. Прерывание RLS имеет место, когда происходит од-

но из следующих событий:

(RDA),

приемного буферного регистра.

тывания символа из регистра.

дачи свободен" (THRE). Как следует из имени прерывания, оно имеет

место,

дачи (имеет тот же адрес порта,

свободен.

чтением из регистра идентификации

метод сброса этого прерывания, так как иногда даже через прерыва-

ния универсального асинхронного приемопередатчика сообщается, что

буфер передачи пуст и, возможно, отсутствует информация для пере-

дачи.

(MS). Оно имеет место, когда модем:

Прерывание состояния

состояния модема.

установкой соответствующих битов в регистреа

ний. В последовательно-параллельном адаптере фирмы IBM (также как

и в асинхронном адаптере фирмы IBM) бит с именем OUT2а

управления модемом должен быть становлен в 1 до того, как преры-

вания универсального асинхронного приемопередатчика могут достичь

центральный процессор.

тельный адаптер собирает их согласно приоритету и направляет пре-

рывание

даптер прекращает отвечать на последующие прерывания равного или

меньшего приоритета до тех пор, пока не определит, что текущее не

обслужено подпрограммой обслуживания

контроллер прерываний 8259A.

80х86) непосредственно не принимаета

ппаратных средств,

ния аппаратуры сначала обслуживаются чипом программируемого конт-

роллер

центрального процессора.

устройство, принимает до восьми различных прерываний и может мас-

кировать (игнорировать) прерывания индивидуально.

н

ляет его центральному процессору при словии,

прерывание высшего приоритета не обслуживается в настоящее время.

сальный асинхронный приемопередатчик имеет свой метод определения

приоритетов прерываний последовательного адаптера, 8259A обладает

своей схемой присваивания приоритетов прерываниям. Последователь-

ный адаптер является только одним из аппаратныха

могут направлять прерывания контроллеру 8259A.

жестко смонтировано или соединено проводниками с различными вход-

ными устройствами, известными как входные стройства запроса пре-

рываний (IRQ) контроллера 8259A.

присвоенном аппаратному прерыванию.

занной с IRQ прерывания,

для обращения к отдельному прерыванию.

IBM PC этот номер равен восьми плюс IRQ. Когда имеет место преры-

вание,

декса в таблице,

положен

обработки данного прерывания.

высшие приоритеты с низкими IRQ, аппаратные стройства, требующие

максимального внимания,

ный таймер имеет IRQ0, клавиатура имеет IRQ1 и так далее.

кационных порта, с COM1 по COM4, эта поддержка не означает ничего

кроме обладания четырьмя драйверами с этимиа

которыха

дом/выводом.

последовательным вводом/выводом, детали поддержки системой MS-DOS

коммуникационных портов не относятся к данному вопросу.

COM1 и COM2,

Другие

использованы для управляемого прерываниями ввода/вывода после с-

тановки

ветствующей установки перемычек. Как только станет известен номер

IRQ, программирование портов COM3 и COM4 выполняется таким же об-

разом,

мы будем рассматривать только порты COM1 и COM2.

твенно IRQ4а

ные).

кака

ния 21h) с функциональными номерами 35h и 25h могут быть

зованы соответственно для получения и становки векторов прерыва-

ний.

перед началом разговора о программировании последовательныха

това

80х86 автоматически делает невозможными все прерывания в то время

когд

прерывания.

живания прерывания задерживает последующие прерывания того же или

меньшего приоритета, прерывания старшего приоритета все еще полу-

чают подтверждение о приеме, если становлен флаг прерывания. Ес-

ли мы вновь немедленно не разрешим прерывание до начал

вания

важные системные функции,

системный таймер,

не будут.

прерывания)а

программа примет на себя правление. Это предоставита

таймеру,

обслуживания последовательного

другим устройствам.

последовательного прерывания завершена?а

рамма должна направить 8259A команду "конец прерывания" (EIO) пе-

ред возвращением управления центральному процессору.

то,

схемы приоритета,

точно направить контроллеру 8259A то,

фический" EOI (код 20h).

того,

лось. Она просто говорит контроллеру, что обслуживание прерывания

высшего приоритета завершено. Это разрешает обслуживание прерыва-

ний того же или высшего IRQ.

новки контроллера 8259A.

руемые последовательным адаптером,

ропроцессорома

как мы можем программировать 8259A.

8259A программируется посредством двух имена

Они

твенно (рисунок 8-6). Регистр с адресом 21h используется исключи-

тельно для маскирования прерываний.

не принимается) в том случае,

IRQа

значение IRQ0),

20hа

8259A.

писью 20h в этот порт.

┌ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─┴─ ─ ─ ─ ─ ─ ┐

└ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ | ─ | ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┘

a. - замаскировать прерывание; b. - разрешить прерывание;

присвоен номер IRQ4 (прерывание номер 12),

(COM2) имеет IRQ3 (прерывание 11).

COM3 и COM4 могут обрабатываться таким же

что

новки (только порты COM1 и COM2 имеют заранееа

IRQ).

получения прерываний от порта COM1 чтением с порта 21h и обратной

записью содержания, логически множенного на EFh. Прерывания пор-

та COM1 могут быть замаскированы не только повторением предыдущих

действий, но логическим сложением с 10h, вместо логического мно-

жения.

вана

фрагмента программы

IN

AND

OUT

быть запрограммирован следующим образом

IN

OR

OUT

содержание регистра с последующей записью его обратно с соотвест-

вующе измененным битом, рекомендуется ввиду того, что мы не нару-

шаем предварительной становки битов.

8259A должен быть проинформирован о завершении обработки обычного

прерывания.

20h в адрес 20h порта ввода/вывода следующим образом:

MOV

OUT

даптера, программирование последовательного порта включает в се-

бя правильную установку регистров,

новку программы обработки прерываний.

кака

рассмотрению остальных деталей программирования последовательного

даптера.

тельному адаптеру в системе MS-DOS.

вательным портом через станавливаемый драйвер стройства, выпол-

няющий

драйверы устройств"

драйвера.

связанные с доступом к драйверу через DOS, достоинством то, что

любая

пользовать.

драйвере возможности IOCTL таким образом,

такие как скорость передачи в бодах и длина слова, могут быть с-

тановлены вызовами DOS IOCTL (номер функции DOS 44h).

и оставленная резидентно),

вания BIOS RS-232C (14h) и расширяет свою функциональность

печением управляемого прерываниями ввода/вывода. Этот метод также

дает любой программе доступ к последовательному порту посредством

Вашего

установки регистра при использовании новых коммуникационных функ-

ций TSR.

RS-232C, который мы вскоре опишем.

которая включает в себя служебную подпрограмму обработки прерыва-

ний

прикладной программы,

последовательного

программы. Этот способ создает возможности организации высокоско-

ростного (9600 бод) последовательного ввода/вывода ввиду наличия

в нем меньшего количества недостатков по сравнению с двумя други-

ми методами.

последовательным портом останется таким же.

бое внимание деталям.

/вывод через BIOS. К сожалению, нет. BIOS не предоставляет эффек-

тивной возможности

программирования

RS-232C, доступную через прерывание 14h. К сожаления, эта функция

поддерживаета

эффективен ввиду недостатков, изложенных ранее. Тем не менее, эта

функция идеальна для становки таких параметров коммуникационного

порта, как скорость передачи в бодах, длина слова и стоповый бит,

использующий прерывание 14h BIOS.

не

посмотреть,

бодах, длина слова, четность и стоповые биты) могут быть станов-

лены с использованием функций BIOS RS-232C, доступных по прерыва-

нию 14h.

вательного порта.

указывает на порт COM1,

COM2. Выбранные коммуникационные параметры направляются в регистр

AL в пакованном формате, показанном на рисунке 8-7. Скорость пе-

редачи

значением,

2-битовым значением. В таблице 8-2 показаны кодированные значения

каждого коммуникационного параметра. чтите, что скорость переда-

чи

19200 бод,

Для достижения скорости передачи,

можете использовать возможность программирования скорости переда-

чи

ранее.


──────────────┬──────────────────────┬─────────────────────────

Имя параметра | Фактическое значение | Кодированноеа

──────────────|──────────────────────|─────────────────────────

Скорость пе-а

редачи в бодах|

Четность

Стоповые биты |

Длина слов

──────────────┴──────────────────────┴─────────────────────────

если Вы используете язык высокого ровня,

достичь результата следующим образом:

pckd_commparams = (baudrate << 5) | (parity <<3) |

Мы использовали

сложения

wordlengthа

параметров из последней колонки таблицы 8-2. Как только параметры

примут такой формат, Вы можете вызывать BIOS прерыванием 14h. Ис-

пользование функции int86 компилятора Microsoftа

следующим фрагментом программы:

#include <dos.h>

#defineа

static union REGS xr, yr;

xr.h.ah = 0;

xr.h.al = pckd_commparams;

xr.x.dx = port_number;а

int86(BIOS_RS232, &xr, &yr);

BIOS: функция _bios_serialcomm служит интерфейсом между Вашейа

программой и прерыванием BIOS 14h.

8-битовую

четность и скорость передачи 300 бод, то достаточно вызвать

_bios_serialcom(_COM_INIT, COM1, (_COM_CHR8 | _COM_STOP1 |

Вызов функции _bios_serialcom

status = _bios_serialcomm(service_code, port_number, data);

принимает три параметра,

кода

требуемой операции.

деления

(COM1) или 1 (COM2).

Подробности использования этой функции изложены в Microsoft C 5.0

Run-time Library Reference.

этапе самотестирования при включении (POST) она проверяет наличие

последовательных адаптеров COM1/COM2 (хотя MS-DOS 3.3 поддержива-

ет порты COM3 и COM4, BIOS распознает только COM1 и COM2) и, если

находит тот или другой,

заносится

14h.

рес равен 10h * 16-битовый сегмент + 16-битовое смещение,

Ваша система MS-DOS имеет один последовательный порт, назначенный

как COM1, то тогда слово в физической ячейке 400h будет содержать

3F8h (если так же присутствует COM2, следующее слово в ячейке 402

h будет содержать 2F8h).

последовательного адаптера из этой области данных BIOS н

нии 0 и сегменте 40h.

вить базовый адрес порта следующим образом:

#define BIOS_DATA ((short far *)(0x4L))

static short comport,

comport = *(BIOS_DATA + port_number);

if(comport == 0) /* последовательный адаптер не становлен */

{

}

гистры последовательного адаптера могут быть доступны прибавлени-

ем соответствующих смещений к базовому адресу.

жете

дресов этих регистров.

Вы

порта по их именам, определив их следующим образом:

#define IER (comport + 1) /* регистр разрешения прерывания */

#define IIR (comport + 2) /* определение прерывания */

#define LCR (comport + 3) /* регистр правления линией */

#define MCR (comport + 4) /* регистр правления модемом */

#define LSR (comport + 5) /* регистр состояния линии */

#define MSR (comport + 6) /* регистр состояния модема */

Вы должны настроить последовательный порт и становить обработчик

прерываний перед началом правляемого прерываниями последователь-

ного ввода/вывода.

тельного порта зависит от того, какой порт используется, COM1 или

COM2. Как только Вы получили номер прерывания, Вы должны получить

дрес текущего обработчика и сохранить его.

выхода из программы Вы можете восстановить первоначальноеа

ние вектора прерываний. Функции MS-DOS 35h и 25h, соответственно,

получают и устанавливают обработчики для заданных номерова

ваний.

_dos_getvect и _dos_setvect.Используя язык Си Вы можете проделать

это следующим образом:

short int_number;

void interrupt far s_inthndlr(void);

static voidа

/* получить вектор прежнего прерывания и сохранить его */

/* становить новый обработчик с именем s_inthndlr

типа interrupt,

щимся в Microsoft C 5.0.

какима

прерываний непосредственно в Microsoft C 5.0 (Turbo Cа

такую же возможность).

_enable.

и CLI.

ота

другой стороны,

может привести к тому, что может произойти сбой центрального про-

цессора, так как вектор прерывания не являлся адресом какого-либо

действующего обработчика.

можете становить коммуникационные параметры и разрешить последо-

вательному порту генерировать прерывания.

шить распознавание этих прерываний контроллером 8259A. Еще раз Вы

должны запретить прерывания до тех пор,

дута

Microsoft C 5.0.

/* разрешает маску, зависящую от порта */

short intmask,

/* включает прерывания коммуникационного порта.

/* станавливает регистр правления модемом (порт =а

/* разрешает все прерывания последовательной платы

/* считывает регистр маски прерывания 8259A и записывает его

управляемом прерываниями режиме.

обработчика прерываний, который мы сейчас рассмотрим.

довательным портом прерывания.

прием системой последующих прерываний таким образом, чтобы другие

приоритетные задачи (такие как таймер) могли обрабатываться

ропроцессором.

рацию прерывания последовательного порта.

ции Вы должны считать содержание регистра идентификацииа

ния

выполнять его обработку,

универсальному асинхронному приемопередатчику.

ние в то время,

рять бит 0 (последний значащий бит) IIR на это словие. Если этот

бит равен нулю,

ботать.

редные прерывания отсутствуют.

контроллеру 8259A сигнал "конец прерывания" и выйти из обработчи-

ка.

цикл, который продолжает обрабатывать последовательные прерывания

до тех пор, пока не прекратится их поступление. В Microsoft C 5.0

обработчик может быть реализован как

void interrupt far s_inthndlr(void)

{

/* прерывания разрешаются немедленно */

/* чтение регистра идентификации прерываний, IRR */

/* если бит 0 равен 1, тогда прерывания не поступают. послать

/* если есть прерывание получения данных, разрешить прерывания

/* обработать прерывание в соответствии с идентификатором.

/* пропустить, если идентификатор не является одним из

}

interrupt,имеющемся

ботчик на языке Си.

катор функции,

чика прерываний определенного номера прерывания.

функции

воначального помещения в стек регистров AX,

SP,

ссылки на сегмент данных казанной функции.

последовательности

использует команду IRET вместо обычной команды RET для

функции.

бута interrupt.

слово, но помещение регистров в стек происходит в другом порядке.

димо соблюдать такие же предосторожности, как и при написании об-

работчиков на языке ассемблера.

вать какую-либо библиотечную подпрограмму, вызывающую функцию DOS

(доступ к ним осуществляется посредством команды прерывания 21h).

Такими

файлов.

подпрограмм

interrupt.

скорейшее сохранение поступающих символов.

достигается

восстанавливать из этого буфера символы со

беспокоясь о потере какого-либо символа,

недостаточно быстро.

обработчику прерываний через другой буфер.

регистра.

считывающая символы,

затем принимает следующий и так далее. Буфер такого типа известен

как "первый пришел - первый вышел" (FIFO) буфер.

вается очередью.

Очередь, естественно, имеет начало и конец. В реальной реализации

размер очереди,

может содержать,

занные с очередью,

ячейку,

зование ограниченного пространства, доступного для очереди. Такая

реализация очереди называется циклической.

в дальнейшем последовательном вводе/выводе,

вить порт в его обычное состояние. Восстановление включает в себя

установкуа

и выключение всех сигналов правления модемом.

8259Aа

ваний последовательного порта.

тельного прерывания необходимо сбросить в начальное значение, ко-

торое было сохранено при инициализации ввода/вывода.

реализуется в Microsoft C 5.0:

/* Запретить прерывания на время очистки */

/* Сначала сбросить регистр разрешения прерываний порта */

/* Выключить все биты регистра правления модемом */

/* Затем запретить распознавание контроллером 8259A прерываний

/* Восстановить первоначальный вектор прерываний */

/* Снова разрешить прерывания */

ли, какие действия необходимо выполнить дляпрограммирования порта

в целях организации эффективного

да/вывода.

чтобы показать, каким образом создается завершенная коммуникацион

ная

основную коммуникационную программу,

версии 5.0.

последовательного порта в системах MS-DOS иа

его программирования. Также содержится небольшая коммуникационная

программа,

зации этих методов на практике. Программирование последовательно-

го порта для

следующим образом:

прервать сеанс работы,

ки". Очистка выполняется следующим образом: