- •1. Паралельний і послідовний порти
- •Лабораторна робота №1 Тема: Управління об’ктами за допомогою lpt порта пк.
- •1.1. Паралельний порт
- •1.1.2. Внутрішній пристрій
- •Група даних
- •Група управління
- •Група стану
- •1.1.3. Програмне управління Отримання базової адреси паралельного порту
- •Ввід/вивід даних через паралельний порт
- •Команди принтера і процедури переривань bios
- •Безпосередній доступ до регістрів порту
- •Вага біта
- •Лабораторна робота №2 Тема: Управління об’ктами за допомогою сом порта пк.
- •1.2. Послідовний інтерфейс rs232
- •1.2.1. Послідовна передача даних
- •1.2.2. Роз'єм і кабель порту rs232
- •1.2.3. Внутрішня апаратна конструкція
- •Перетворювачі напруги
- •Базові адреси сом-портів
- •1.2.4. Програмне управління Отримання базової адреси послідовного порту
- •Ініціалізація сом-порта
- •Передача і приймання послідовних даних
- •Передача даних по лініях взаємодії
- •2.4. Експериментальні плати паралельного, послідовного та ігрового портів
- •2.4.1. Експериментальна плата паралельного порту
- •2.4.2. Експериментальна плата послідовного порту
- •3. Програми управління експериментальними платами
- •3.1. Програмне забезпечення для експериментальної плати паралельного порту
- •3.1.1. Опис програми centexp.Pas
- •Текст програми centexp.Pas
- •3.2. Програмне забезпечення для експериментальної плати послідовного порту
- •3.2.1. Опис програми rs232exp.Pas
- •Текст програми rs232exrpas
- •Лабораторна робота №3 Тема: Управління об’ктами за допомогою usb порта пк.
- •Функція
- •Механізм передачі даних
Перетворювачі напруги
Вихідні сигнали управління (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.