Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OKIU / методичка_ОКІУ.doc
Скачиваний:
22
Добавлен:
16.02.2016
Размер:
1.11 Mб
Скачать

Перетворювачі напруги

Вихідні сигнали управління (RTS і DTR) і вхідні сигнали стану (CTS, DSR, DCD) послідовного порту інвертовані. Послідовні сигнали даних SIN і SOUT не інвертовані. UART працює лише з рівнем напруги Ттл/кмоп. Перетворювачі напруги розташовані між UART і роз'ємом RS232. Перетворювачі передавачів конвертують рівень напруги ТТЛ в рівень RS232, а перетворювачі приймачів - навпаки. Логічна структура послідовного порту наведена на рис. 1.10.

Рис. 1.10. Логічна структура послідовного порту

Базові адреси сом-портів

Базові адреси СОМ-потрів виглядають так:

СОМ1: 3F8h

COM2: 2F8h

COM3: 3E8h

COM4: 2E8h

При ввімкненні або перезавантаженні комп'ютера BIOS перевіряє адреси всіх встановлених послідовних портів. Якщо вона знаходить такий порт, то заносить базову адресу (двобайтове слово) в певний елемент пам'яті. Для Сом1 це комірки 0000:0400h і 0000:0401h. Базову адресу можна отримати, прочитавши їх вміст. Елементи пам'яті, в яких міститься інформація про базові адреси встановлених послідовних портів, наведені нижче:

СОМ1: 0000:0400h - 0000:0401h

COM2: 0000:0402h - 0000:0403h

COM3: 0000:0404h - 0000:0405h

COM4: 0000:0406h - 0000:0407h

Однобайтовий елемент пам'яті 0000:0411h в першому, другому і третьому бітах містить загальну кількість встановлених СОМ-портів:

біт 3 - 0, біт 2 - 0, біт 1 - 0 СОМ-порти не встановлені

біт 3 - 0, біт 2 - 0, біт 1 - 1 встановлений один СОМ-порт

біт 3 - 0, біт 2 - 1,біт 1 - 0 встановлено два СОМ-порта

біт 3 - 0, біт 2 - 1, біт 1 - 1 встановлено три СОМ-порта

біт 3 - 1, біт 2 - 0, біт 1 – 0 встановлено чотири СОМ-порта

1.2.4. Програмне управління Отримання базової адреси послідовного порту

Наступна функція, написана на мові Тр6, зчитує інформацію про кількість встановлених портів і присвоює набуте значення змінної Number_of_COM. Потім вона зчитує базові адреси з елементів пам'яті, де вони зберігаються, і присвоює адресу вибраного порту змінній RS232_address.

(*-Бібліотека ресурсів № А6 (визначення базових адрес СОМ-портів).-*)

Procedure C0M_address;

(* $0000:$0400 містить базову адресу порту СОМ1

$0000:$0402 містить базову адресу порту COM2

$0000:$0404 містить базову адресу порту COM3

$0000:$0406 містить базову адресу порту COM4

$0000:$0411 містить кількість СОМ-портів в двійковому форматі.*)

var

СОМ:аггау[1,.4] of integer;

CОM_number, number_of_COM, code:integer;

Kbchar:char;

begin

clrscr;

СOM _number:=1; (*Установка порту за замовчуванням.*)

Number_of_C0M:=mem($0000:$0411); (Зчитування кількості СОМ-портів.*)

Number_of_COM:=(Number_of_COM and (8+4+2)) shr 1;

СOM [1]:=memw($0000:$0400); ('Процедура зчитування з памяті,*)

СOM [2]:=memw($0000:$0402);

СOM[3]:=memw{$0000:$0404);

СOM [4]:=memw{$0000:$0406);

Textbackground(blue);

clrscr;

Textcolor(yellow);

Textbackground(red);

window(10,22,70,24);

clrscr;

writeln('Number of COM installed:', Number_of_C0M:2);

writeln( 'Addresses for C0M1 to COM4:', C0M[1]:3, C0M[2]:3, COM[3]:3, C0M[4]:3);

write('Select COM to be used (1,2,3,4):');

delay(1000);

if number_of_СOM >1 then

begin

(*Вибір конкретного порту, якщо встановлено декілька портів.*)

repeat

kbchar:=readkey; («Зчитування значення з клавіші, що вводиться.*)

val(kbchar, СOM_number,code); ('Перетворення символу в число.*)

until (СOM_number>=1) and (СOM_number<=4) and (СOM[СOM_number]<>0);

end;

clrscr;

RS232_address:= СOM[СOM_number];

writeln('Your selected RS232 interface: COM', C0M_number:1);

write('RS232 address:", RS232_address:4);

delay(1000);

textbackground(black);

window(1,1,80,25);

clrscr;

end;

У наступному прикладі приведена функція RS232(X), написана на мові Turbo Pascal для Windows. RS232(0) повертає кількість встановлених СОМ-портів, RS232(1) - базова адреса Сом1, RS232(2) - базова адреса COM2 і так далі.

(*-Бібліотека ресурсів № А6 (визначення базових адрес СОМ-портів).-*)

(Universal auto detection of COM base address)

Function RS232(X:integer).integer; export;

( + $0000 $0400 містить базову адресу порту СОМ1

$0000:$0402 містить базову адресу порту COM2

$0000:$0404 містить базову адресу порту COM3

$0000'$0406 містить базову адресу порту COM4

$0000:$0411 містить кількість СОМ-портів в двійковому форматі.*)

var

number_of_CОM, СОМ1, COM2, COM3, COM4:integer;

begin

number_of_CОM:=mem($40.$11); («Зчитує кількість СОМ-портів *)

number_of_COM:=(number_of_COM and (8+4+2)) shr 1;

CОM1:=0;

CОM2:=0;

CОM3:=0;

CОM4:=0;

CОМ1:=memw($40:$00); (*«Процедура читання з пам'яті.*)

CОM2.=memw($40:$02);

COM3 :=memw( $40: $04),

CОM4:=memw($40:$06);

Case X of

0: RS232:=number_of_CОM;

1: RS232:=CОM1;

2: RS232:=CОM2;

3: RS232:=CОM3;

4: RS232:=CОM4;

end;

end.

Соседние файлы в папке OKIU