АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Програмний доступ до портів у Windows NT/2000/XP з використанням бібліотеки IO.DLL

Читайте также:
  1. MCU Poker Charts доступен всем
  2. Windows 7
  3. Адресное пространство процесса в Windows 95/98
  4. Бібліотеки і бібліотечна наука у XVIII ст.
  5. Визначення рівня доступу до баз даних Lotus Notes.
  6. Дефрагментация Windows 7
  7. Доступ к внешней памяти
  8. Доступ к карте
  9. Доступ к объекту через указатель
  10. Доступность, функциональность и надежность как показатели уровня сервиса в логистических дистрибутивных каналах.
  11. Етапи ДНК-діагностики з використанням полімеразної ланцюгової реакції (ПЛР)
  12. Закон Кыргызской Республики «О гарантиях и свободе доступа к информации»

При використанні 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).

 


1 | 2 | 3 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.)