- •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 порта пк.
- •Функція
- •Механізм передачі даних
1.1.3. Програмне управління Отримання базової адреси паралельного порту
Наступна процедура на мові Тр6 визначає кількість встановлених паралельних портів і присвоює набутео значення змінній Number_of_LPT. Тоді вона зчитує їх базові адреси з елементів пам'яті, де зберігаються адреси портів LPT1…LPT4. Далі програма пропонує вказати LPT-порт, до якого буде приєднано зовнішній пристрій. І нарешті, вона присвоює вибрану базову адресу змінній Centronic_address. У Turbo Pascal для зчитування вмісту елементів пам'яті використовуються функції mem (підстава: зсув) і глеш (підстава: зсув). Функція mem(...) зчитує байт з елементу пам'яті, а memw(...) - двобайтове слово з вказаного елементу пам'яті та однієї комірки вище.
(*-Бібліотека ресурсів № А1 (визначення базових адрес LPT-портів) -. *)
Procedure Centronic, Address
(* $000:$0408 містить базову адресу для LPT1
$000:$040А містить базову адресу для LPT2
$000:$040С містить базову адресу для LPT3
$000:$040е містить базову адресу для LPT4
$000:$0411 містить кількість паралельних портів.*)
var
lpt:array[i..4] of integer;
number_of_lpt, LPT_number, code:integer;
kbchar.char;
begin
clrscr;
LPT_number:=1; (*Для установки принтера за замовчуванням.*)
number_of_lpt:=mem($0000:$0411); (*Зчитує кількість встановлених
паралельних портів.*)
number_of_lpt:=(number_of_lpt and (128+64)) shr 6; (Маніпуляції з бітами.*)
lpt[1]:=memw($0000:$0408); (Процедура зчитування з пам'яті.*)
lpt[2]:=memw( $0000:$040А);
lpt[3]:=memw($0000:$040C);
lpt[4]:=memw($0000:$040e);
textbackground(blue);
clrscr;
textcolor(yellow);
textbackground(red);
window(10,22,70,24);
clrscr;
writeln('Number of LPT installed:',number_of_lpt:2);
writeln('Addresses for LPT1 to LPT4: ', lpt[1]:3,' ',lpt[2]:3,’ ’,lpt[3]:3,’ ',lpt[4]:3); write('Select LPT to be used(1,2,3,4): ');
delay(1000);
if number_of_lpt>1 then { Вибір порту, якщо встановлено декілька портів.}
begin
repeat
kbchar:=readkey; (*Зчитування значення натиснутої клавіші.*)
val(kbchar,LPT_number,code); (*Перетворення символа в число.*)
until (LPT_number>=1) and (LPT_number<=4) and (lpt[LPT_number]<>0);
end;
clrscr;
P_address: =lpt [ LPT_Number]:
writeln('Your selected printer interface: LPT', LPT_number:1);
write('LPT address: ',P_address:3);
delay(1000);
textbackground(black);
window(1,1,80,25);
clrscr;
end;
Функція centronic(x) написана на мові Turbo Pascal для Windows. Вона може бути викликана програмою, написаною на іншій мові програмування для Windows, наприклад Visual Basic або Visual 3, якщо її оформити у вигляді бібліотеки динамічної компоновки DLL. Centronic(0) повертає кількість встановлених LPT-портів, Centronic(1) - базова адреса LPT1, Centronic(2) -базова адреса LPT2 і так далі.
Function Centronic(x:integer):integer;
export;
(* $000:$0408 містить базову адресу для LPT1
$000:$040А містить базову адресу для LPT2
$000:$040С містить базову адресу для LPT3
$000:$040е містить базову адресу для LPT4
$000:$0411 містить кількість паралельних портів.
var
number_of_LPT, LPT1, LPT2, LPT3, LPT4:integer;
Ipti, lpt2, lpt3, lpt4: integer;
begin
number_of_LPT:=mem($40:$11): ("Зчитує кількість LPT-портів.*)
number_of_LPT:=(number_of_LPT and (128+64)) shr 6;
lpt1:=0;
lpt2:=0;
lpt3:=0;
lpt4:=0;
lpt1:=memw($40:$08); (*Процедура зчитування з пам'яті.*)
lpt2:=memw($40:$0A);
lpt3:=memw($40:$0C);
lpt4:=memw($40:$0e);
case x of
0: centronic:=Number_of_LPT;
1: Centronic:=lpt1;
2: Centronic:=lpt2;
3: Centronic:=lpt3;
4: Centronic:=lpt4;
end;
end;