ГОСУДАРСТВЕННЫЙ КОМИТЕТ РОССИЙСКОЙ ФЕДЕРАЦИИ
ПО ВЫСШЕМУ ОБРАЗОВАНИЮ

ДОНСКОЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Кафедра "Автоматизация производственных процессов"
Методические указания к лабораторной работе №5
"Организация передачи данных с использованием стандарта RS-232"
по курсу
"Передача данных в информационно управляющих системах"
для студентов специальности 2101
Ростов-на-Дону
1999
Составители: к.т.н. Кочетов А.Н., к.т.н. Назаренко Д.В.

Передача данных с использованием последовательного
коммуникационного порта RS-232

Введение. Данная работа предлагается в рамках программы второй части курса "Передача данных в информационно-управляющих системах". Выполнение данной работы подразумевает создание программных средств для передачи данных и интерфейса с пользователем. В последующих работах полученное программное обеспечение будут модифицироваться, поэтому для удобного подключения процедур и внесения изменений при выполнении последующих лабораторных работ рекомендуется модульное оформление текстов программ.

Цель работы: Создание ПО для передачи данных с использованием последовательного порта RS-232. ПО должно обеспечивать передачу массива данных. Предполагается создание двух программ – программа передачи данных и программа приема данных.

Оборудование: Два компьютера типа IBM PC AT соединенных нуль-модемным кабелем, схема которого приводится на рис. 1.

Нуль-модемный кабель

Рис.1. Нуль-модемный кабель.

Из за большого разнообразия типов кабелей, в данной работе рекомендуется использовать только две линии, соединяющие сигналы TxD и RxD, так как они присутствуют во всех типах кабелей. Остальные сигналы обычно используются для управления модемом и служат для обеспечения совместимости, поэтому необходимость использования их в данной работе не возникает.

Ограничения: Программные средства должны быть ориентированы на использование в среде DOS на компьютерах с микропроцессором i80286 (не выше) и соответственно использовать стандартные аппаратные средства последовательного интерфейса (микросхема UART 8250). Использование сигналов интерфейса RTS - CTS, DTR - DSR, DCD и RI не рекомендуется для обеспечения совместимости с разными типами нуль-модемного кабеля. Программные средства должны иметь интерфейс, использующий текстовый режим видеомонитора (допускается интерфейс типа "командная строка"). Использование готовых процедур и библиотек, предназначенных для работы с последовательным портом, для выполнения данного задания не допускается.

Краткая теория: Для использования соответствующего порта связи необходимо выполнить его инициализацию и написать процедуру обмена данными и портом. Ниже приводится краткая информация, необходимая для выполнения задания. Более полное описание портов приводится в литературе [1,2], примеры использования портов для связи можно найти в [3,4].

Последовательный порт (микросхема UART8250).

Порт последовательного обмена занимает в адресном пространстве ПЭВМ семь физических адресов, которые позволяют адресовать десять однобайтовых регистров. Базовый адрес последовательного порта COM1 - 3F8h, COM2 - 2F8h. Далее используется следующее обозначение: B - базовый адрес (для COM1 он равен 3F8h) для остальных адресов данной микросхемы последовательного порта введены обозначения B+1 (3F9h), B+2 (3FAh) … B+6 (3FEh). Базовый адрес рекомендуется хранить в отдельной ячейке, а реальные адреса регистров микросхемы вычислять в процессе выполнения программы. Такой подход позволит легко изменить базовый адрес при изменении конфигурации ПЭВМ.

Примечание. При использовании COM порта следует следить, чтобы другие устройства не использовали его, например MOUSE, так как загруженный в память ЭВМ драйвер устройства может привести к некорректной работе программы.

На рис. 2 изображена осциллограмма сигнала на выходе порта RS232.

Осциллограмма сигнала на выходе порта RS232

Рис. 2. Осциллограмма сигнала на выходе порта RS232.

Таблица 1.

Адрес

Название

Бит

IN

OUT

Сигнал (Вывод)

DLAB=0

DLAB=1

DLAB=0

DLAB=1

B+0

Данные/Делитель

D0-7

DATA_IN

Х

DATA_OUT

Делитель МЛ

 

B+1

Маска прерываний/
делитель

D0

Х

ПР1

Делитель СТ

 

D1

Х

ПР2

D2

Х

ПР3

D3

Х

ПР4

D4-7

Х

X

B+2

Регистр идентификации прерывания

D0

0 (1-прерывание было)

X

 

D1

Идентификация прерывания

D2

D3-7

X

B+3

Регистр управления (контроля) линии

D0

Длина передаваемого слова
(00-5, 01-6, 10-7, 11-8)

 

D1

D2

Стоповые: 0-1бит 1-2бита (1,5бита)

D3

Четность:
Х0-нет, 01-нечетн, 11-четн

D4

D5

Установить=0 (используются для отладки оборудования)

D6

D7

DLAB

B+4

Регистр управления модемом

D0

Х

DTR

DTR (4)

D1

Х

RTS

RTS (7)

D2

Х

0 (1-самотестирование)

 

D3

Х

0 (1-при использовании прерываний)

D4

Х

0

D5-7

Х

0 (не исп.)

B+5

Регистр статуса линии

D0

1/0-байт данных получен/нет

X

 

D1

1-байт данных перезаписан (потеря данных)

D2

1-ошибка четности

D3

1-ошибка окружен.

D4

1-обнаружен перерыв

D5

1/0-передатчик пуст/занят

D6

1-рег.сдвига пуст

D7

1-тайм-аут

B+6

Регистр статуса модема

D0

Изм. CTS

X

 

D1

Изм. DSR

X

D2

Изм. RI

X

D3

Изм. DCD

X

D4

CTS

X

CTS (8)

D5

DSR

X

DSR (6)

D6

RI

X

RI (9)

D7

DCD

X

DCD (1)

Перед использованием микросхемы 8250 необходимо заполнить ее регистры (инициализация порта). Порядок заполнения регистров в ряде случаев может быть произвольным или неполным, однако рекомендуется придерживаться следующей схеме:

1. Установка скорости обмена. Для определения скорости обмена величина делителя тактовой частоты (два байта) заносится в два однобайтных регистра (B и B+1 при DLAB=1), соответствующей старшей и младшей части коэффициента деления (таблица 2).

Таблица 2.

Скорость обмена

Делитель

Значение

Старшая часть

Младшая часть

110

1040 (410h)

4

16 (10h)

150

768 (300h)

3

0

300

384 (80h)

1

128 (80h)

600

192 (C0h)

0

192 (C0h)

1200

96 (60h)

0

96 (60h)

2400

48 (30h)

0

48 (30h)

4800

24 (18h)

0

24 (18h)

9600

12 (0Ch)

0

12 (0Ch)

19200

6

0

6

38400

3

0

3

115200

1

0

1

Для того, чтобы иметь доступ к регистрам делителя тактовой частоты необходимо установить бит DLAB (D7, B+3), для чего необходимо вывести в порт B+3 число 80h. Далее, в порт по адресам B и B+1 передают соответственно младшую и старшую часть коэффициента деления (таблица 2). На языке Паскаль программирование скорости обмена (115200 бод) выполняется следующей последовательностью команд:

PORT[B+3]:=$80; {установка бита DLAB}

PORT[B]:=ХХ; {Запись младшей части коэффициента деления}

PORT[B+1]:=ХХ; {Запись старшей части коэффициента деления}

2. Инициализация регистра контроля линии (B+3). Биты этого регистра имею следующие функции:

Таблица 3.

Бит

Описание

0-1

Длина символа. 00-5бит, 01-6бит, 10-7бит, 11-8бит.

2

Число стоп-битов. 0-1бит, 1-2бита (1-1,5бита если длина 5 бит)

3-4

Четность. X0-нет, 10-нечетность, 11-четность

5

Установить равным 0

6

Установить равным 0

7

Бит DLAB

Так, например, если необходимо передавать/принимать данные со следующими параметрами: длина символа 8 бит; число стоповых 1; четность "четная", то значение регистра контроля линии имеет следующее значение: 00011011B. Одновременно, при этом выполняется сброс бита DLAB.

3. Регистр разрешения прерываний (B+1 при DLAB=0). Этот регистр необходимо инициализировать независимо от того, будет ли использовано прерывание или нет. Если прерывания не используются, то в порт по адресу B+1 необходимо записать 0 (при DLAB=0!!!; именно поэтому его удобно заполнять после инициализации регистра контроля линии). Биты этого регистра имеют следующие функции:

Таблица 4.

Бит

Описание

0

=1 – прерывание при получении данных

1

=1 – прерывание, когда буфер передатчика пуст

2

=1 – прерывание при ошибке приема данных

3

=1 – прерывание при изменении статуса модема (изменение состояния входных линий CTS, DSR, DCD или RI)

4-7

Не используются.

Инициализация остальных регистров необходима при управлении модемом, поэтому в данной работе не рассматривается.

Таким образом, заполнение указанных регистров является необходимым (в данной работе и достаточным) условием для установления связи.

Определение статуса коммуникационного порта (регистр В+5). При обеспечении связи необходимо не только передавать (получать) данные, но и отслеживать текущее состояние порта (готовность к передаче/приему данных, установить ошибку и ее природу). Чтение байта по адресу B+5 возвращает значение регистра статуса коммуникационного порта. Значение битов регистра статуса порта RS232 приведены в таблице:

Таблица 5.

Бит

Описание

0

=1 – байт данных получен

1

=1 – полученные данные были перезаписаны (предыдущий символ не был вовремя считан)

2

=1 – ошибка четности (вероятно из-за помех в канале связи)

3

=1 – ошибка окружения (передача не синхронизирована)

4

=1 – обнаружен перерыв (получена длинная строка единиц, индицирующая, что другая станция запрашивает конец передачи)

5

=1 – регистр передатчика пуст (необходимо разместить передаваемые данные)

6

=1 – регистр сдвига передатчика пуст (этот регистр получает данные из регистра передатчика и преобразует их в последовательный вид)

7

=1 – тайм-аут (устройство не связано с машиной)

Данный регистр активно используется в процессе передачи и приема информации.

Передача/прием данных (регистр В+0). Для обеспечения передачи информации через порт необходимо расположить данные в регистре по адресу B+0, данные передаются при этом в линию связи в момент завершения операции записи данных в порт. Важно отметить, что запись в порт может осуществляться лишь в том случае, если бит 5 регистра B+5 равен единице.

Прием данных из порта осуществляется также из регистра B+0. Установка бита 0 порта B+5 информирует коммуникационную программу о получении байта данных, при этом необходимо немедленно выполнить чтение данных. При несвоевременном чтении данных вновь поступающие данные перезапишут предыдущие и возникнет ошибка (установится бит 1 регистра B+5).

В процессе связи могут возникать и иные ошибки, которые должны быть обработаны коммуникационной программой. Некоторые ошибки анализируются самой микросхемой UART8250 и доступны через регистр B+5 биты 1, 2, 3, 4 и 7. Если в процессе работы программы выявляется установленным хотя бы один бит из указанных, необходимо перейти к процедуре обработки ошибки и корректно ее обработать (или хотя бы идентифицировать). Алгоритмы обработки ошибок зависят от конкретных условий обеспечения связи и могут быть достаточно сложными.

Пример. При наличие помех в линии данные могут быть переданы с искажениями. Если используется проверка на четность (нечетность) и при передаче информации возникла ошибка в результате помех в линии, установится бит 2 регистра B+5. При этом, для сохранения целостности информации необходимо запросить снова передать данный байт банных. Важно отметить, что на аппаратном уровне возможно определение не всех возможных ошибок, поэтому для повышения надежности при передаче информации необходимо использовать дополнительные средства защиты.

Для приема и передачи данных возможно использование алгоритмов опроса соответствующих битов регистра статуса линии, однако наиболее эффективным (и вместе с тем более сложным) способом использование коммуникационного порта является использование прерываний. При использовании прерываний коммуникационного пота необходимо установить соответствующие биты регистра разрешения прерывания (порт B+1) и заполнить соответствующие регистры контроллера прерываний ПЭВМ. Использование прерываний в данной работе не рассматривается.

Выполнения работы: Для выполнении работы необходимо написать две программы, одна реализует алгоритм передачи, другая алгоритм приема данных. При выполнении данной работы возникает ряд задач, решение которых должно быть найдено и реализовано на каком-либо языке программирования (Pascal, C++, Assembler … ). При выполнении задания могут быть использованы общие алгоритмы, структурные схемы которых приведены на рисунках 3 и 4.

Блок схема алгоритма программы передачи данных

Блок схема алгоритма программы приема данных

Рис 3. Блок схема алгоритма программы передачи данных.

Рис 4. Блок схема алгоритма программы приема данных.

Программа передачи информации.

1. Определить базовый адрес коммуникационного порта (3F8h).

2. Выполнить инициализацию коммуникационного порта.

3. Подготовить массив данных для передачи.

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

Для передачи в порт необходимо организовать цикл. В данном цикле необходимо выводить данные в порт, предварительно ожидая (проверяя) готовность порта принять данные. Ожидание готовности реализуется путем организации цикла, выход из которого осуществляется при установке бита 5 регистра статуса. В цикле ожидания необходимо отслеживать появление ошибок.

5. Вывести сообщение об ошибках, возникших при передаче.

Программа приема информации.

1. Определить базовый адрес коммуникационного порта (3F8h).

2. Выполнить инициализацию коммуникационного порта.

3. Восстановить значения массива данных путем чтения из порта.

Для приема из порта необходимо организовать цикл. В данном цикле необходимо последовательно читать данные из порта и размещать их в массиве данных, предварительно ожидая (проверяя) наличие данных в регистре порта. Ожидание готовности реализуется путем организации цикла, выход из которого осуществляется при установке бита 1 регистра статуса. В цикле ожидания необходимо отслеживать появление ошибок.

4. Вывести полученный массив данных на экран.

5. Вывести сообщение об ошибках, возникших при приеме.

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

Литература и электронные пособия

1. Р. Джордейн. Справочник программиста персональных компьютеров типа IBM PC, XT и AT. Москва. "Финансы и статистика" 1992.

2. "Tech Help".

3. Л. Скэлон. Персональные ЭВМ IBM PC и XT. Программирование на языке ассемблера. Москва. "Радио и связь" 1989.

4. Питер Абель. Программирование на языке ассемблера.



На главную Яндекс.Метрика
Hosted by uCoz