Спочатку зупинимося на методиці виведення даних в паралельний порт. Висновок даних в паралельний порт можна використовувати для управління різними пристроями, для ге нераціі імпульсних послідовностей і т. д. Регістри паралельного порту працюють з рівнями TTL логіки, тому їх легко сполучати з цифровими мікросхемами.

Зазвичай для виведення використовується регістр даних порту з шістнадцятковим адресою

0x378 (стандартний) або 0x278 (зазвичай використовується для LPT2).

Розробимо нашу першу програму для роботи з паралельним портом, для чого запу стім середу Delphi 2007 (можна також працювати в одній з середовищ Delphi 7, Delphi 2005 або Turbo Delphi) і створимо графічне додаток, в якому при натисканні кнопки, розмі щенной на формі, вихідний код регістра 0x378 буде інвертувати свій вміст. Ось як виглядає поле конструктора додатки (рис. 3.2):

Рис. 3.5

Вікно працюючої програми

Для запуску цієї програми, як і в попередньому прикладі, нам знадобляться файли porttalk.sys, allowio.exe і start.bat, причому в командному файлі start.bat необхідно вказати ім’я програми.

Цей проект, трохи допрацювавши, можна перетворити на просту систему управління осве щеніем в приміщенні. Така система може працювати таким чином: при зниженні рівня освітленості (наприклад, з настанням сутінок) струм фотодатчика зменшувався б настільки, що вхід 6 регістра стану перемикався б у стан 0, а програма, обна ружів це, включала б освітлення. Включення електроосвітлення можна реалізувати через один з розрядів регістра даних, наприклад, нульовий.

Апаратну частина такої системи управління освітленням можна розробити на основі схеми з рис. 3.3 шляхом невеликий модернізації останньої. Ось як могла б виглядати система управління освітленням з керуванням від паралельного порту (рис. 3.6).

Схема працює в такий спосіб: при зменшенні струму через фотодіод VD1 з змен

ням освітленості падає напруга на виході операційного підсилювача DA1. Як

Рис. 3.6

Схема управління електроосвітленням

тільки це напруга стане менше напруги Uоп, компаратор переключається, і напря ються на його виході стає рівним лог.0. Програма, виявивши нульовий рівень в 6 м розряді регістру стану з адресою 0x379, встановлює високий рівень напру ження в 0 м розряді регістру даних з адресою 0x378. Ця напруга відкриває потужний польовий транзистор Q1, що викликає протікання струму через обмотку реле RL1. В результаті контакти реле замикають вторинну силову ланцюг з підключеними освітлювальними прилади рами L1. . LN. Назад, якщо освітленість збільшується, то зворотний струм через фотодіод VD1 зростає, що призводить до спрацьовування компаратора і переключенню його виходу в стан лог.1. Програма, прочитавши біт 6, відключає освітлення, встановивши рівень лог.0 в 0 м розряді регістру даних.

Тип реле і діода VD2 в цій схемі підбираються залежно від навантаження у вторинному ланцюзі і струму в обмотці, необхідного для спрацювання реле. На фотодіод не повинен попа дати світло від включеного освітлення, інакше програма буде безперервно перемикати цепь освітлювачів.

Оригінальний текст програми, що управляє освітленням, показаний далі:

unit Unit1;

interface uses

Windows, Messages,  SysUtils,  Variants,  Classes,  Graphics, Controls, Forms,

Dialogs, StdCtrls,  ExtCtrls;

type

TForm1  =  class(TForm) SystemON:  TButton; Timer1:  TTimer; SystemOFF: TButton;

procedure  SystemONClick(Sender:  TObject); procedure  SystemOFFClick(Sender:  TObject); procedure  Timer1Timer(Sender:   TObject);

private

{  Private declarations  }

public

{  Public declarations  }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure  TForm1.SystemONClick(Sender: TObject);

begin

timer1.Enabled:=  true;

end;

procedure  TForm1.SystemOFFClick(Sender:  TObject);

begin

timer1.Enabled:=  false;

end;

procedure  TForm1.Timer1Timer(Sender:  TObject);

begin asm

mov       DX, 379h

in        AL, DX

and     AL, 01000000b shr      AL, 6

dec      DX

cmp       AL, 0 sete   BL

mov       AL, BL out      DX, AL end;

end;

end.

Як і в програмі з попереднього прикладу, тут використовуються ті ж візуальні компонентами (дві кнопки і таймер), але вихідний текст істотно змінений. Ці зміни кіс нулісь програми обробника події таймера. Якщо при зчитуванні 6-го біта регістра

0x379 він встановлений в 0 (низький рівень освітленості в приміщенні), то біт 0 го регістру

0x378 встановлюється в лог.1, відкриваючи транзистор Q1, який включає ланцюг освітите

лей. Якщо значення 6-го біта одно лог.1 (хороша освітленість), то біт 0 го регістру

0x378 скидається в 0, вимикаючи ланцюг освітлення.

Джерело: Магда Ю. С. Комп’ютер в домашній лабораторії. – М.: ДМК Пресс, 2008. – 200 с.: Іл.