
- •Лабораторна робота № 3 керування зовнішніми пристроями через lpt-порт
- •1. Теоретичні відомості
- •1.1. Будова і принцип роботи порта принтера
- •2. Адаптер „lpt_Motor_10h”
- •2.1. Схема електрична функціональна адаптера „lpt_Motor_10h”
- •2.2. Схема електрична принципова адаптера „lpt_Motor_10h”
- •На валах електродвигунів адаптера закріплено тримачі, на які можуть встановлюватися наступні диски (рис. 2.4).
- •3. Програма керування „lpt_motor_10s”
- •3.1. Програмний доступ до портів у Windows nt/2000/xp з використанням бібліотеки io.Dll
- •3.2. Опис програми керування „lpt_Motor_10s”
- •4. Порядок виконання лабораторної роботи Завдання для всіх варіантів V 1...V 99
- •Контрольні запитання
- •Список використаних джерел
На валах електродвигунів адаптера закріплено тримачі, на які можуть встановлюватися наступні диски (рис. 2.4).
а) б) в)
Рис. 2.4. Диски для електродвигунів:
а) диск №1 (2 прозорі і 2 непрозорі сектори);
б) диск №2 (кольори спектру); в) диск №3 (диск Бенхема)
3. Програма керування „lpt_motor_10s”
3.1. Програмний доступ до портів у Windows nt/2000/xp з використанням бібліотеки io.Dll
При використанні DOS і Windows 95/98 доступ до портів вводу/виводу (I/O ports) комп’ютера був відносно простим. Проте у Windows NT/2000/XP (захищена операційна система) доступ до портів вводу/виводу значно ускладнився за рахунок віртуалізації апаратного забезпечення (virtualize hardware). Віртуалізація означає, що програма вже не може звертатися безпосередньо до фізичного пристрою, а звертається тільки до драйвера, який емулює роботу фізичного пристрою (клавіатури, звукової карти чи принтера). Програмна емуляція фізичних пристроїв з одного боку підвищує надійність і захищеність роботи операційної системи (помилкові команди перехоплюються), а з іншого обмежує можливості керування нестандартними зовнішніми пристроями через порти вводу/виводу.
Один із способів доступу до портів в операційних системах Windows NT/2000/XP, який використовується у даній лабораторній роботі, полягає у використанні динамічно під’єднуваної бібліотеки io.dll. Дана бібліотека, зокрема, містить такі процедури і функції:
PortOut – процедура, яка виконує запис байта у порт.
PortIn – функція, яка зчитує значення байту з порту.
IsDriverInstalled – функція, яка повертає не 0, якщо io.dll інстальовано.
Розглянемо приклад цих процедур і функцій з програми, створеної в середовищі Delphi:
function IsDriverInstalled: Boolean; stdcall; external 'io.dll'; // прототип функції
procedure PortOut(Port : Word; Data : Byte);stdcall; external 'io.dll';
// прототип процедури
function PortIn(Port : Word) : Byte;stdcall; external 'io.dll';
procedure TForm1.FormCreate(Sender: TObject);
begin
if IsDriverInstalled then
begin
Label1.Caption:='Driver ready...'; // драйвер інстальовано
end;
end;
procedure TForm1.Button_Save_Click(Sender: TObject);
var i:byte;
begin
for i:=0 to 255 do
begin
PortOut($378,i); // запис у порт з адресою $378 байту і
Sleep(200); Application.ProcessMessages;
end;
end;
procedure TForm1.Button_Read_Click(Sender: TObject);
var b:byte;
begin
b:=PortIn($379); // зчитування байту b із порту з адресою $379
Edit1.Text:=IntToStr(b);
end;
Тобто за допомогою процедури PortOut (Port1, Data1) виконується запис в порт з адресою Port1 байту Data1, а функція PortIn (Port2) зчитує байт з порту за адресою Port2.
Для підтримки віртуального режиму виконання лабораторної роботи запис в порт потрібно виконувати процедурою PortOut_V (Port1, Data1) (яка викликає процедуру PortOut (Port1, Data1)), а зчитування з порту виконувати функцією PortIn_V(Port2) ( яка викликає функцію PortIn (Port2)).
3.2. Опис програми керування „lpt_Motor_10s”
Програма „LPT_Motor_10s” призначена для керування адаптером „LPT_Motor_10h”. Програма виконує запис у регістри даних DR і контролю CR порту принтера значень бітів, які встановлюються на формі програми, і зчитує біти регістру стану SR (рис. 3.1).
Рис. 3.1. Головна форма програми „LPT_Motor_10s”;
на діаграмі показано вихідний сигнал фоторезистора, що отримується при повороті диску №1 (рис. 2.4) між ввімкненим світлодіодом і фоторезистором
Якщо після першого запуску програми драйвер io.dll не встановлено, то потрібно закрити програму і повторно запустити її на виконання. Стан виконавчих пристроїв можна встановлювати за допомогою перемикачів „D0_Motor_1”, „D1_Motor_2” та ін., наприклад перемикач „D0_Motor_1” вмикає електричний двигун E1.
Набір компонентів „Діаграма” призначений для зчитування значень бітів регістру стану порта принтера SR6 або SR7. Біт SR6 залежить від стану фоторезистора R35 (1 – фоторезистор освітлений), біт SR7 залежить від стану перемикача S1 (1 – перемикач вимкнено). Кнопка „Старт” починає зчитування графіку сигналу з кількістю точок QI та часом дискретизації Time_Discret. Процес зчитування сигналу можна зупинити кнопкою „Стоп”, а кнопка „Зберегти” зберігає зчитані значення у файл. Якщо встановити перемикач „Осцилограф”, то процес зчитування сигналу буде відбуватися постійно (до натиснення кнопки „Стоп”), але на діаграмі відображаються тільки останні QI значень.
Процедура програми, що викликається кнопкою „Z1”, записує у регістр DR для парних бітів 1, а для непарних – 0 (біти записані у масиві mDR). Значення бітів відображаються на формі процедурою „p_Show_DR” і записуються в порт процедурою „p_Write_DR”. Після затримки в 2 с виконується інверсія бітів регістру DR і запис їх нових значень у порт.
Процедура, що викликається кнопкою „Z2”, записує у регістр DR значення байту bOut у циклі від 1 до 16, де на кожній ітерації значення bOut збільшується на 1 починаючи з 0.
Процедура, що відповідає кнопці „Z3”, керує виконавчими пристроями і виконує наступні дії:
Дозволяє запис у регістр команд DD1 пристрою (встановлюються біти CR0=0 і CR1=1); вказано значення бітів регістру контролю CR як прямих, оскільки їх інверсія відбувається перед записом у порт.
У циклі по змінній m три рази послідовно вмикає електродвигун Е1 (біт DR0=1), а після затримки в 3 с вимикає (DR0=0).
Забороняє запис у регістр команд пристрою (встановлюються значення бітів CR0=0 і CR1=0 регістру CR).
На формі „Опції” встановлюються наступні опції програми: вигляд і колір графіку сигналу, мова інтерфейсу.
Програма дозволяє працювати не тільки з реальним пристроєм „LPT_Motor_10h”, але й з його програмною моделлю при ввімкненому перемикачі „Моделювання”. При цьому кнопка „Диск_М” відкриває форму із зображенням всього пристрою (рис. 3.2), а кнопка „Плата_М” відкриває форму із зображенням плати пристрою (рис. 3.3).
Рис. 3.2. Форма „Диск_Моделювання” із зображенням пристрою „LPT_Motor_10h”
Рис. 3.3. Форма „Плата_Моделювання” із зображенням плати пристрою „LPT_Motor_10h”
На формах (рис. 3.2, рис. 3.3) в режимі моделювання показується поворот дисків, встановлених на валах електричних двигунів Е1 та Е2; значення бітів порта принтера та стани виконавчих пристрої візуалізуються за допомогою світлодіодів. Користувач може змінювати стан біту SR7 за допомогою перемикача S1 (рис. 3.2).