Передача сообщений через последовательный порт
Добавил: | DMT | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Дата создания: | 23 апреля 2008, 21:11 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Дата обновления: | 23 апреля 2008, 21:21 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Просмотров: | 12484 последний вчера, 19:53 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Комментариев: | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Передача сообщений через последовательный порт. Задание : Два компьютера соединены 0-модемным кабелем через последовательные порты. Написать программы приема и передачи сообщений через последовательный порт с параметрами связи по вариантам. Сообщение, при наборе с клавиатуры, хранится в буфере и отправляется по нажатию клавиши [ Enter ].
Описание настройки регистра управления линией: 0-1 бит – Длина передаваемого слова 2 бит - Стоповый бит 3-4 бит - Биты четности 5 бит - Бит фиксации четности 6 бит - Бит установки перерыва 7 бит - Бит DLAB
Для нашей программы было установлена последовательность битов: 00011011, т.е. Длина передаваемого слова 8 бит, Количество стоповых битов: 1, Контроль четности: По четности, Фиксация четности, если стоит четность, то фиксация 0. Бит установки перерыва и бит DLAB не рассматривались и установлены в 0 . Передающая программа:Принимающая программа:
Описание асинхронного последовательного порта и примеры программ для выполнения контрольных работ.Данные передаются через последовательный порт порциями ( кадрами ) побитно за единицу времени. В этом состоит отличие последовательного порта от параллельного, который осуществляет передачу данных порциями в один байт за единицу времени. Каждый кадр данных, передаваемых через последовательный порт, состоит из следующей последовательности сигнальных битов: 1. Один стартовый бит; 2. До 8 бит данных; 3. Необязательный бит четности; 4. Один, полтора или два стоповых бита. Стартовый бит передаваемой "порции" данных (имеет нулевое значение) сигнализирует о начале передачи нового байта, который передается в канал за один цикл, начиная с младшего бита. Вслед за битами данных передается необязательный бит четности. Бит четности, если он присутствует в передаваемом сообщении, используется для контроля корректности передачи и поиска ошибок. Контроль передачи может проводиться как на четность (контрольный разряд равен сумме по модулю 2 информационных разрядов и общее число единичных разрядов четно), так и на нечетность (контрольный разряд не равен сумме по модулю 2 информационных разрядов и общее число единичных разрядов нечетно). В конце пересылаются стоповые биты (имеют значение равное единице) сигнализирующие о конце очередной "порции" данных считанных за один цикл. Завершающие (конечные) биты определяют минимальное время между передачей двух кадров. Обычно число завершающих битов не имеет большого значения, поэтому можно использовать либо один, либо два завершающих бита в зависимости от того, какое их число используют передающий и принимающий порты. Между передачей каждого кадра может проходить некоторый промежуток времени. Время простоя канала передачи для этого режима довольно велико. Передатчик и приемник должны использовать один и тот же формат данных и соблюдать одинаковую скорость передачи данных (в бодах). Скорость передачи битов по каналу измеряется в бодах (бит в секунду). Наименьшей скоростью передачи информации считается 300 бод. Эта скорость передачи использовалась в старых модемах. Семейство компьютеров IBM PC поддерживает скорость передачи данных до частоты тактового генератора контроллера асинхронного порта, но эта скорость обратно пропорциональна надежности передачи и расстоянию между компьютерами, связанными по 0-модемному интерфейсу. Конфигурация большинства последовательных портов является стандартной, однако наиболее широкое распространение получила конфигурация, соответствующая стандарту RS-232. По этому стандарту разъем содержит 25 контактов. (В компьютере IBM PC AT используется 9-ти контактный разъем). Следует отметить, что довольно большое число последовательных портов не поддерживают весь набор сигналов, специфицированных в стандарте RS-232. Некоторые сигналы не поддерживаются в связи с тем, что они не предназначены для использования в таком приложении и служат для других целей; другие не поддерживаются по причине того, что они выпускались в то время, когда стандарт RS-232 еще не существовал вообще или же целью их создания не являлась полная поддержка стандарта RS-232 и они в этом случае включают лишь ограниченный набор сигналов RS-232 . Наиболее общими сигналами стандарта RS-232 являются:
На самом деле сигналов намного больше и это обусловлено тем, что последовательный порт первоначально разрабатывался как устройство поддержки модема. В связи с этим, если порт используется совместно с другими устройствами, то многие из его сигналов просто в этом случае не нужны. Эти сигналы используются для установления протокола аппаратного уровня между модемом и компьютером, если этот компьютер еще не передавал информацию, но уже готов к ее передаче или передача данных от модема к компьютеру еще не осуществлялась. Ошибка кадрирования (т.е. ошибка, возникающая при передаче порции данных, передаваемой канальным уровнем сетевого взаимодействия) фиксируется в случае, если частоты синхронизирующих импульсов двух портов значительно отличаются друг от друга. Как вы можете догадаться, последовательный порт после того, как он обнаружил стартовый бит, выделяет регистр ввода, который за каждый цикл считывает один бит. Длина этого цикла определяется скоростью передачи данных. Однако время нахождения бита в регистре определяется тактовой частотой системы. Если частота компьютера-приемника недостаточна для покрытия частоты компьютера-источника, то происходит потеря полученного бита (т.к.. регистр занят), в связи с чем и регистрируется ошибка кадрирования (framing error). Доступ к порту Последовательным портом компьютеров семейства IBM PC, а также совместимых с ними моделей можно управлять из DOS через BIOS или в обход DOS и BIOS, используя непосредственное управление аппаратными средствами. Доступ к последовательному порту через DOS не совсем корректен потому, что DOS не позволяет организовать обратной связи с последовательным портом для анализа его текущего состояния и организует лишь слепое чтение и запись данных в порт. К тому же нет возможности использовать систему прерываний DOS. Доступ и обработку последовательного порта поддерживают четыре специальные функции BIOS. Обработка последовательного порта осуществляется ими с помощью прерывания 14Н. Отметим, что к последовательному порту обычно подключается устройство типа "мышь". Также с ним может работать и принтер, который имеет последовательный интерфейс. К сожалению, работа через прерывание 14Н возможна только на относительно небольшой скорости передачи данных через последовательный порт (не более 2400 бод), поскольку BIOS реализует простые опросные алгоритмы работы с аппаратурой последовательного ввода/вывода. Поэтому при работе на больших скоростях с помощью BIOS "обеспечена" потеря данных. Для работы в более скоростном режиме необходима прямая работа с оборудованием. Далее следует описание адресов портов ввода/вывода, смысла и формата информации, используемой при работе с контроллером последовательного обмена UART 8251. BIOS инициализирует первые 2 или 4 асинхронных порта. Их базовые адреса располагаются в области данных BIOS, начинающейся с адреса 0000:0400h. Первый асинхронный порт COM1 имеет базовый адрес 3F8h и занимает диапазон адресов для 10 программируемых однобайтовых регистров от 3F8h до 3FFh.
СОМ1, использует IRQ4, обрабатываемое как программное прерывание ОСh. COM2, использует IRQ3 обрабатываемое как программное прерывание OBh. Регистры для COM1 и соответствующие им порты ввода/вывода: 3F8 (бит 7 (DLAB)=0 в 3FB) Запись: Регистр данных передатчика. 3F8 (DLAB =0) Чтение: Регистр данных приемника. 3F8 (DLAB =1) Запись: Младший делитель скорости обмена. 3F9 (DLAB =1) Запись: Старший делитель скорости обмена. 3F9 (DLAB =0) Регистр разрешения прерывания. 3FA Регистр идентификации прерывания. 3FB Регистр управления (контроля) линии. 3FC Регистр управления (контроля) модемом. 3FD Регистр статуса линии. 3FE Регистр статуса модема.
Для других асинхронных последовательных адаптеров COM Х регистры распределяются на диапазон адресов портов ввода/вывода аналогично, но по своему базовому адресу. 3F8H DLAB =0: Запись: до 8 бит данных для передачи. Чтение: до 8 бит принятых данных. DLAB =1: Запись: младший байт делителя частоты. После команды OUT 3FBH, 80Н этот регистр должен содержать младший байт делителя частоты, который вместе со старшим байтом (порт 3F9H) содержит 16-битовое число, устанавливающее делитель частоты тактового генератора, от которого в обратно пропорциональной зависимости находится скорость обмена (см. табл.). Делитель скорости обмена – число, на которое надо разделить частоту системных часов (1190.000 Гц) чтобы получить желаемую скорость обмена.
3F9H DLAB =1: Запись: старший байт делителя частоты. DLAB =0: Запись: Регистр управления (разрешения) прерывания
3FAH Чтение: регистр идентификации прерываний. Когда происходит прерывание в этом регистре, можно найти информацию, объясняющую, что же произошло:
3FBH Чтение/Запись: регистр управления линией
3FCH Запись: регистр управления модемом
3FDH Чтение: регистр состояния (статуса) линии
Примечание: любой из битов 1-4 вызывает прерывание, если оно разрешено (см. порт 3F9H) 3FEH Чтение: регистр состояния (статуса) модема
Примечание. Любой из битов 0-3 может вызывать прерывание, если оно разрешено (см. порт 3F9H) В заключение отметим, что при программировании аппаратуры последовательного порта необходимо помнить, что контроллеру прерываний необходимо сообщать о завершении обработки соответствующего прерывания, посылая в порт 20h универсальный сигнал о завершении обработки прерывания 20h. Пример 1 : два компьютера соединены 0-модемным кабелем через последовательные порты (COM1-->COM1). Необходимо реализовать передачу байтов между компьютерами по опросу готовности последовательного порта. При приеме символа, соответствующего клавише [Tab], приемник завершает работу. Передатчик завершает свою работу по нажатию клавиши [Esc]. Формат кадра: количество информационных бит = 8, количество стоповых бит = 2, контроль четности отсутствует.
|