Консалтинговая компания Консалтер.Ру
Главная Новости Библиотека Исследования Законодательство Консалтинг Бизнес-форумы Контакты

Реклама

Рекомендуем



Консалтер.Ру > Библиотека > Информационные технологии

В.А. Авдеев, В.Ф. Гузик
Компьютеры: шины, контроллеры, периферийные устройства

Учебное пособие. Таганрог: ТРТУ, 2001. - 536 с.

Предыдущая

Приложение В. Проверочные задания, основные сведения и примеры программ

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

3.1. Формулировка задания

Исследовать режим тестирования последовательного порта (СОМ). Необходимо написать программу на ассемблере, выполняющую инициализацию универсального асинхронного приемопередатчика (УАПП), на базе которого реализуется последовательный порт с интерфейсом RS-232, передачу данных в УАПП и прием этих же данных из УАПП.

Режим тестирования задается замыканием выхода передатчика УАПП на вход его приемника путем установки бита D4 регистра управления модемом, имеющего адрес 3FCh. Инициализация УАПП заключается в программировании скорости передачи данных и протокола обмена. Выполнив ввод содержимого порта 3FBh (регистра управления линией), программа может получить текущий режим УАПП. Для установки нового режима (числа бит данных, количества стоповых бит, типа принтера) необходимо изменить нужные поля и записать новый байт режима в порт 3FBh.

Если надо задавать новое значение скорости обмена данными, то перед записью байта режима следует установить его бит D7 в единичное состояние. Затем двумя последовательными командами вывода выполняется загрузка делителя частоты тактового генератора. При этом младший байт делителя скорости записывается в порт 3F8h, а старший байт - в порт 3F9h. Перед началом работы необходимо в регистр управления прерываниями (порт 3F9h) записать нули, если программа не использует прерывания. Перед выводом данных в регистр передатчика необходимо убедиться, что этот регистр пуст, т.е. передача предыдущих данных завершена. Признаком пустоты регистра передатчика является установленный бит 5 (TxRDY=1) регистра состояния линии (порт 3FDh). Данные из регистра передатчика автоматически в стартстопном формате поступают в регистр приемника и бит 0 (RxRDY) порта 3FDh устанавливается в единичное состояние, с помощью которого программа определяет, что регистр приемника полон.

Исходные данные, передаваемые через последовательный порт, могут быть введены с клавиатуры с помощью программных прерываний DOS или BIOS, заданы в программе или хранятся в виде текстового файла на диске. Вывод данных на экран из регистра приемника осуществляется путем использования программных прерываний.

3.2. Основные сведения

Асинхронная последовательная передача состоит в том, что допускаются любые промежутки времени между передаваемыми символами и используется специальный формат представления каждого символа кодовой посылки.

Этот формат содержит: стартовый бит, необходимый для самосинхронизации в приемнике последовательной кодовой посылки; 5 - 8 информационных битов; необязательный бит паритета (чет или нечет) и 1, 1.5, 2 стоповых бита, служащих для разделения кодовых посылок друг от друга.

Асинхронная передача допускает некоторую рассинхронизацию (рассогласование) частот передатчика и приемника в пределах длительности бита, что является крайне не допустимым при синхронной передаче. Последовательная кодовая посылка по линии интерфейса RS-232 передается биполярными сигналами. Логическая единица представляется сигналами низкого уровня (-3...-12В), а логический ноль - сигналом высокого уровня (+3...+12 В).         

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

При инициализации (открытии) порта коммуникации устанавливаются все его параметры. Эти параметры включают в себя длину слова, число стоп-битов, установку четности и скорости обмена. Длина слова - это число битов, которое образует основную единицу данных. Хотя привычно работать с порциями по 8 битов, но для стандартных файлов ASCII (в которых все символы имеют коды, не превышающие ASCII 128) достаточно 7 битов, а для передачи численных данных - всего 4 бита.         

В соств ПК могут входить до четырех последовательных портов COM1-COM4, имеющих интерфейс RS-232.        

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

COM1: 3F8h-3FFh                           COM3: 338h-33Fh

COM2: 2F8h-2FFh                           COM4: 238h-23Fh

COM1 вызывает прерывание IRQ4 (Int 0Ch), а COM2 - прерывание IRQ3 (Int 0Bh). COM3 и COM4 не имеют стандартных векторов прерываний.

Каждый последовательный порт содержит УАПП (Универсальный асинхронный приемопередатчик), используемый в ПК (модеме) для передачи и приема последовательных кодовых посылок стартстопового формата. В ПК применяются в качестве УАПП различные микросхемы, например 8250, NS16450. Для приема данных, поступающих со скоростью 38400 бит/с, в ПК устанавливают УАПП с буфером данных, например, NS16550А. Последовательный порт, реализуемый на базе УАПП, содержит 25- или 9-штырьковый разъем на задней стенке корпуса ПК. Этот разъем может использоваться для подключения мыши, графопостроителя или организации связи между ПК. Контакты RS-232 имеют следующие наименования,  приведенные в табл.1.

Таблица 1

Название сигнала

Номер

цепи

Номер

контакта

Назначение

Направление

 

CCITT

9-шт

25-шт

 

 

DCD

109

1

8

Связь модемов установлена

в ПК

RxD

104

2

3

Принимаемые данные

в ПК

TxD

103

3

2

Передаваемые данные

из ПК

DTR

108

4

20

Готовность ПК к работе

из ПК

SG

102

5

7

Сигнальная земля

-

DSR

107

6

6

Готовность модема к работе

в ПК

RTS

105

7

4

Запрос на передачу

из ПК

CTS

106

8

5

Готовность модема к передаче

в ПК

RI

125

9

22

Индикатор вызова

в ПК

FG

101

-

1

Защитная земля

-

В УАПП можно задать следующие параметры обмена: количество битов данных и стоп-битов, вид четности и скорость обмена в бодах (бит/с).              

Ниже описаны порты ввода-вывода для СОМ1 (табл. 2), имеющего базовый адрес 3F8h. Порты 3F8h и ЗF9h имеют разное назначение в зависимости от бита 7 порта ЗF8h (бита DLAB - Divisor Latch Access Bit).

Таблица 2

Порт

Операция

Назначение порта

3F8h

Запись

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

 

Чтение

Регистр приемника (хранит вводимый байт данных)

 

Запись

Если DLAB=1, то сюда засылается младший байт скорости обмена (см. порт 3F8h)

3F9h

Запись

Если DLAB=1, то сюда засылается старший байт скорости обмена (см. порт 3F8h). Скорость задается значением делителя, равным 115200/V, где V- скорость в бодах. Например, для скорости 9600 бод делитель равен 115200/9600 = 12 = 0Ch, поэтому нужно вывести 0Ch в порт 3F8h и 0 в порт 3F9h.

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

Таблица 3

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

Порт 3F9h

Порт 3F8h

110

04h

17h

300

01h

80h

600

00h

С0h

1200

00h

60h

1800

00h

40h

2400

00h

30h

3600

00h

20h

4800

00h

18h

9600

00h

0Ch

Регистр управления прерываниями (порт 3F9h) доступен по записи и имеет следующий формат:

Регистр идентификации прерывания (порт 3FAh) доступен по чтению и имеет следующий формат:

Регистр состояния модема (порт 3FEh) доступен по чтению, (биты 0-3) содержат следующий формат:

Регистр управления линией (порт 3FBh) доступен по записи, значения битов которого могут быть следующие:

Регистр управления модемом (порт 3FCh) работает в режиме записи, распределение битов которого следующее:

Регистр состояния линии (порт 3FDh) доступен по чтению и имеет следующий формат:

Для подготовки УАПП к работе необходимо выполнить следующие действия:

- установить бит DLAB порта 3F8h и загрузить делитель, задающий скорость обмена, в порты 3F8h и 3F9h;

- инициализировать регистр управления линией (порт 3FBh), при этом сбросить бит DLAB;

- инициализировать регистр управления модемом (порт 3FCh);

- инициализировать регистр управления прерываниями (порт 3F9h).

В рассматриваемом контрольном задании вначале программа должна осуществить инициализацию (настройку) УАПП в соответствии с вариантом задания. Для реализации этой цели в регистре управления линией (3FBh) задается длина данных (5-8), число стоповых бит (1; 1.5;2), тип паритета (чет или нечет) и доступ к другим регистрам (бит D7-DLAB). В регистре управления модемом (3FCh) устанавливается бит D4 в единичное состояние, что позволяет в УАПП замкнуть выход передатчика (TxD) на вход его приемника (RxD). Скорость передачи данных программируется путем занесения младшего байта и старшего байта делителя в следующие порты: ЗF8h (DLAB=1) и ЗF9h (DLAB=1). Кроме того, запрещается прерывание по приему и передаче символа, т. е. выполняется сброс регистра управления прерываниями (3F9h, DLAB = 0).

После этого программа реализует передачу данных, вводимых, например, с помощью клавиатуры путем использования соответствующего программного прерывания DOS или BIOS. Введенный символ загружается в регистр передатчика УАПП (порт 3F8h), если бит D5 (готовность передатчика) регистра состояния линии (3FDh) равен 1, т. е. регистр передатчика пуст. Затем автоматически выполняется передача последовательной кодовой посылки с выхода передатчика УАПП на вход его приемника. Программа в цикле опрашивает бит D0 (готовности приемника) регистра состояния линии (3FDh). Если этот бит D0 равен 1, то это указывает на то, что регистр приемника полон и можно выводить символ на экран дисплея, используя соответствующее программное прерывание DOS или BIOS.

Более сложный вариант контрольного задания должен учитывать создание интерфейса пользователя: выбор скорости передачи данных из заданного набора, длину данных, число стоповых битов и т. д.

3.3. Пример выполнения варианта задания

Скорость передачи данных – 600 бит/с.

Число битов данных – 8.

Бит паритета отсутствует.

Количество стоповых бит – 1.

Данные вводятся с помощью клавиатуры путем использования программного прерывания int16h и выводятся на экран с помощью программного прерывания int10h. Выход из программы по ESC.

Code  Segment

assume cs:code,ds:code

org 100h

Start:      call cirscr

lea dx, greet

            call print

call initcom1

            call initrg

call work

            jmp exit

;-------------------- Инициализация COM1 -----------------------

Initcom1 Proc

mov ax, 40h       ;ES указывает на область данных BIOS

mov es, ax

      mov dx, es:[0]          ;получаем базовый адрес СОМ 1

add dx, 3               ;регистр контроля линии

mov al, 10000000b ;устанавливаем бит 7

            out dx, al

dec dx                  ;старший байт делителя

dec dx                  ;скорости обмена

mov al, 0               ;старший байт для 600 бод

out dx, al

dec dx

mov al, 0C0h            ;младший байт для 600 бод

out dx, al

ret

Initcom1 Endp

;------------ Инициализация регистра контроля линии ------------

Initrg      Proc

add dx, 3               ;указываем на регистр контроля линии

mov al, 00000000b ;чистим al

or al, 00000011b  ;длина символа - 8 бит

or al, 00000000b ;1 стоп-бит

or al, 00000000b        ;не генерировать бит четности

      out dx, al

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

      mov al, 10h         ;замыкание выхода на вход

out dx, al

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

      mov al, 0               ;прерывания запрещены

out dx, al

ret

Initrg      Endp

;---------------- Проверка готовности СОМ1 ---------------------

Check       Proc

Try:  mov dx, es:[0]

add dx, 5

in al, dx

test al, 1Eh

jz m0

lea dx, error

call print

jmp exit

m0:   test al, 01h

jnz m4

test al, 20h

jz try

ret

Check Endp

;---------------------- Работа с портом-------------------------

Work  Proc

m4:   mov ah, 0               ;ввод символа

int 16h

push ax

push ax

mov dx, es:[0]          ;извлечение адреса СОМ1

add dx, 5               ;регистр статуса линии

mov cx, 10

m1:   in al, dx

test al, 20h            ;готов к приему данных?

jz m2

loop m1

m2:  sub dx, 5                ;регистр хранения данных

pop ax                  ;занести передаваемый байт

out dx, al

add dx, 5               ;регистр статуса линии

m3:   in al, dx               ;данные приняты ?

test al,1

jz m3

sub dx, 5               ;регистр хранения данных

in al, dx               ;прочитать принятые данные

mov ah, 0Eh       ;вывести символ на экран

int 10h

pop ax

cmp al, 1Bh       ;проверить на нажатие ESC

jne m4

ret

Work  Endp

Print Proc

mov ah, 9

int 21h

ret

Print       Endp

;---------------------- Очистка экрана -------------------------

Cirscr      Proc

mov ax, 619h

mov bh, 07

mov cx, 0

mov dx, 184fh

int 10h

ret

Cirscr      Endp

;--------------------------- Выход -----------------------------

Exit: lea dx, finish

call print

mov ax, 4c00h

int 21h

;-------------------------- Данные -----------------------------

Greet db '       Практическое задание           ', 0Dh, 0Ah

db '"Тестирование последовательного порта"', 0Dh, 0Ah

db '                                       ', 0Dh, 0Ah

db ' работу выполнили:                     ', 0Dh, 0Ah

db '                                       ', 0Dh, 0Ah

db '                                       ', 0Dh, 0Ah

db '                                       ', 0Dh, 0Ah

db '                                       ', 0Dh, 0Ah

db '                                       ', 0Dh, 0Ah

db '       Для выхода нажмите ESC     ', 0Dh, 0Ah, '$'

Error db '       Ошибка порта СОМ 1       ',7, 0Dh, 0Ah, '$'

Finish      db 0Dh, 0Ah, 7,’$’

Code  Ends

End   Start

3.4. Требования к оформлению задания

Отчет по контрольному заданию должен содержать:

-  вариант задания;

-  блок-схему программы;

-  программу на ассемблере с комментариями;

-  дискету с программой для демонстрации ее работы.

 

3.5. Варианты задания

На рис. 1 показан морфологический граф, определяющий варианты заданий.

Рис. 1. Морфологический граф вариантов заданий

Первый уровень (уровень скорости обмена 9600-110 бит/с) определяет скорость обмена (байты делителя скорости), а второй уровень - число битов данных в последовательной кодовой посылке (5-8).

Третий уровень соответствует типу контроля, применяемого в УАПП. Вершина 31 определяет контроль четности, вершина 32 - нечетности и вершина 33 - отсутствие бита паритета. Четвертый уровень задает число стоповых битов (1, 1.5, 2). Пятый уровень указывает на источник данных, которые могут быть введены с клавиатуры, храниться на диске или представлены в программе. Каждый вариант задания определяется маршрутом морфологического графа, проходящим через вершину каждого уровня. Например, 11, 24, 31, 43, 51. В общем случае морфологический граф содержит 972 варианта заданий.

Предыдущая

Похожие материалы:
Тесемщик
Террористический акт - ст.205 УК РФ
Территория и акватория порта
Тестовод
Тесчик спецсортиментов (Часть №2 выпуска №37 ЕТКС)
Техник



О сайте   Авторам   Реклама и услуги   Контакты
Copyright © 2007-2021, Консалтер.Ру