Универсальный асинхронный приемопередатчик (UART) 8250, 16450, 16550 предназначен для асинхронного двунаправленного, последовательного обмена информацией.
Интерфейс RS232C:
І. Аппаратные средства:
- Адаптер (СОМ (comunication)- порт);
- Разьем DB9 (9-контактный);
- Сигналы СОМ-порта : -15В («1» или пауза), перепад из 1 в 0 (от -15В до +15В – сигнал «Старт»); +15В – «0»
ІІ. Дальше следуют:
- Передаваемый байт (код символа) начиная с младших разрядов к старшим.
- Битовый контроль по паритету ( четность, нечетность и без контроля).
- Один или два стоповых бита (для создания паузы между передачей).
DB9 имеет 9 контактов, из которых контакт 2 – передающий, контакт 3 – принимающий, контакт 5 – общий провод по питанию.
Возможности СОМ-порта
UART имеет 10 программируемых однобайтных регистров, которые задают:
1. скорость передачи (от 2-х до 115500 бод (бит/сек));
длину передаваемого слова (от 5-ти до 8-ми бит);
вид контроля по паритету (четность, нечетность, без контроля);
количество стоп-битов (1-2);
работа с прерываниями (включена/отключена);
режим для самотестирования (программа соединяет выход COM-порта со входом).
Возможность работы с модемом (выдача сигнала связи).
Базовый регистр-порт имеет системный адрес 03F8h (для адаптера СОМ1) и 02F8h (для адаптера СОМ2);
Алгоритм тестирования СОМ-порта
І. Определения наличия СОМ1 и СОМ2. Выбор рабочего адаптера.
II. Цикл по передаче-приему побайтно символов ASCII-кодов с посимвольным сравнением для режима «сам себе». Этот режим заставляет СОМ-порт выполнять передачу-прием собственных сигналов. Это выполняется физическим соединением контактов 2, 3 DB9 или программированием регистра модема адаптера на программное соединение выхода со входом.
Алгоритм:
- Установка скорости.
- Установка длины слова.
- Установка стоп-битов.
- Установка типа контроля.
- Установка прерываний (да-нет).
- Соединение выхода СОМ-порта со входом (аппаратно или программно).
- Выполнение пересылки заготовленной тестовой строки (тестового файла) с помощью адаптера самому себе;
- Выполнение сравнения. Вывод результатов (п.1 – п.5 и результат)
Проэктирование тестирующей программы
Рассмотрим отдельные действия алгоритма в виде подпрограмм.
- Подпрограмма определения наличия адаптера и выбора рабочего.
При включении ПК все системные ресурсы идентифицируются в системной области памяти. Для СОМ-портов это $40:$00 должна содержать слово (16-разрядов) 03F8h – наличие СОМ1; $40:$02 – слово 02F8h – наличие СОМ2.
Procedure COM1_2;
Begin
if (memw[$40:$00]=$03F8) then writeln(‘COM1 OK!’)
else writeln(‘COM1 ERROR!’);
if (memw[$40:$02]=$02F8) then writeln(‘COM2 OK!’)
else writeln(‘COM2 ERROR!’);
writeln(‘Выберите COM1 -> 1 или COM2 -> 2 ’);
readln(n1);
case:
1: Vd_m:=$03F8;
2: Vd_m:=$02F8;
end;
writeln(‘выбран СОМ-порт’, Vd_m);
End.
-
Подпрограмма установки скорости.
Алгоритм:
1. Открыть делитель скорости;
2. Установить коэффициент деления в делителе (16-розрядном);
3. Выполнить задержку минимум 1мсек;
4. Вывести контрольное сообщение о величине установленной скорости.
5. Закрыть делитель.
Procedure COM1_2;
Begin
port[Vd_m+3]:= port[Vd_m+3] or $80;
{$80=1000 0000h -> единица в старшем бите порта открывает делитель скорости}
portw[Vd_m]:=115200 div (значение скорости); {установка 16- разрядного делителя скорости}
delay(5); {задержка 5мсек}
writeln(‘выставили скорость=’, 115200 div portw[Vd_m]);
port[Vd_m+3]:= port[Vd_m+3] and $7F; {закрытиеделителя}
End.
-
Подпрограмма установки длины передаваемого слова
Длина слова:
5: port[Vd_m+3]:= port[Vd_m+3] and $FC; {FC->1111 1100}
6: port[Vd_m+3]:= (port[Vd_m+3] and $FC) or $01;
7: port[Vd_m+3]:= (port[Vd_m+3] and $FC) or $02;
8: port[Vd_m+3]:= port[Vd_m+3] or $03;
writeln(‘вывод портов’);
- Подпрограмма установки типа контроля.
- Для паритета четности установить единицы в 3-м и 4-м битах порта: Vd_m+3=11;
- Для паритета нечетности в 3-м и 4-м битах порта установить 01 соответственно;
- Для установки отсутствия контроля в 3-й и 4-й биты заносят нули;
Для проверки значения 3-го и 4-го битов выводят на экран.
-
Установка стоп-битов без аппаратных прерываний и с сигналами модема.
port[Vd_m+3] and $1C – предполагает установку стоп-битов.
port[Vd_m+4] :=$00 – запрет аппаратных прерываний.
port[Vd_m+1] :=$00 – адаптер не выдает аппаратных прерываний.
port[Vd_m+4] or $03 – RTS (сигнал модема), DTR=1.
Контрольные выводы.
-
Программное соединение выхода СОМ-порта со входом.
port[Vd_m+4] or $10 – необходимо установить в единицу 4-й бит регистра модема.
- Подпрограмма передачи байта.
Procedure Tr_bt;
var
t: Boolean;
begin
t:=false;
{признаком возможности передавать служит установка 5-го бита Vd_m в единицу}
repeat
if(port[Vd_m+5] and $20)<>0 then
begin
t:=true;
port[Vd_m]:=bt; { bt–передаваемый байт}
end;
until t
end
-
Подпрограмма приема байта.
Для приема информации 1-й бит порта устанавливается в единицу. Прием выполняет port[Vd_m+5].
Procedure rest_bt;
var
t: boolean;
begin
t:=false;
repeat
if (port[Vd_m+5] and $01)<>0 then
begin
t:=true;
bt:=port[Vd_m]; {приембайт}
end;
until t;
end.