|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Програмний доступ до портів у 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” вмикає електричний двигун E 1. Набір компонентів „ Діаграма ” призначений для зчитування значень бітів регістру стану порта принтера SR6 або SR7. Біт SR 6 залежить від стану фоторезистора R 35 (1 – фоторезистор освітлений), біт SR 7 залежить від стану перемикача S 1 (1 – перемикач вимкнено). Кнопка „ Старт ” починає зчитування графіку сигналу з кількістю точок QI та часом дискретизації Time_Discret. Процес зчитування сигналу можна зупинити кнопкою „ Стоп ”, а кнопка „ Зберегти ” зберігає зчитані значення у файл. Якщо встановити перемикач „ Осцилограф ”, то процес зчитування сигналу буде відбуватися постійно (до натиснення кнопки „ Стоп ”), але на діаграмі відображаються тільки останні QI значень. Процедура програми, що викликається кнопкою „ Z1 ”, записує у регістр DR для парних бітів 1, а для непарних – 0 (біти записані у масиві mDR). Значення бітів відображаються на формі процедурою „ p_Show_DR ” і записуються в порт процедурою „ p_Write_DR ”. Після затримки в 2 с виконується інверсія бітів регістру DR і запис їх нових значень у порт. Процедура, що викликається кнопкою „ Z 2”, записує у регістр DR значення байту bOut у циклі від 1 до 16, де на кожній ітерації значення bOut збільшується на 1 починаючи з 0. Процедура, що відповідає кнопці „ Z 3”, керує виконавчими пристроями і виконує наступні дії: 1. Дозволяє запис у регістр команд DD 1 пристрою (встановлюються біти CR0 =0 і CR1 =1); вказано значення бітів регістру контролю CR як прямих, оскільки їх інверсія відбувається перед записом у порт. 2. У циклі по змінній m три рази послідовно вмикає електродвигун Е 1 (біт DR0 =1), а після затримки в 3 с вимикає (DR0 =0). 3. Забороняє запис у регістр команд пристрою (встановлюються значення бітів 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; значення бітів порта принтера та стани виконавчих пристрої візуалізуються за допомогою світлодіодів. Користувач може змінювати стан біту SR 7 за допомогою перемикача S 1 (рис. 3.2).
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.007 сек.) |