UPOTREBA BIBLIOTEKE IO.DLL U DELPHI-U
Biblioteku VBIO.DLL moguće je koristiti
samo na Windows98 i WindowsMe platforma, dok biblioteka IO.DLL može da se koristi na svim Windows operativnim sistemima.
Kao primer upotrebe ove biblioteke daćemo primer programa elektronskog semafora
koji koristi ovu biblioteku.Biblioteka IO.DLL
sadrži sledeće funkcije i procedure:
procedure
PortOut(Port : Word; Data : Byte); stdcall; external 'io.dll';
procedure
PortWordOut(Port : Word; Data : Word); stdcall; external 'io.dll';
procedure
PortDWordOut(Port : Word; Data : DWord); stdcall; external 'io.dll';
function
PortIn(Port : Word) : Byte; stdcall; external 'io.dll';
function
PortWordIn(Port : Word) : Word; stdcall; external 'io.dll';
function
PortDWordIn(Port : Word) : DWord; stdcall; external 'io.dll';
procedure
SetPortBit(Port : Word; Bit : Byte); stdcall; external 'io.dll';
procedure
ClrPortBit(Port : Word; Bit : Byte); stdcall; external 'io.dll';
procedure
NotPortBit(Port : Word; Bit : Byte); stdcall; external 'io.dll';
function
GetPortBit(Port : Word; Bit : Byte) : WordBool; stdcall; external 'io.dll';
function
RightPortShift(Port : Word; Val : WordBool) : WordBool; stdcall; external
'io.dll';
function
LeftPortShift(Port : Word; Val : WordBool) : WordBool; stdcall; external
'io.dll';
function
IsDriverInstalled : Boolean; stdcall; external 'io.dll';
Objasnićemo ukratko njihove značenje:
PortOut:
Šalje na specifirani port dati bajt. Npr. komandom PortOut(&378, 15) biće poslat broj 15 na Data port.
PortWordOut:
Šalje na specifirani port datu reč(16 bita).
PortDWordOut:
Šalje na specifirani port datu dvostruku reč(32 bita).
PortIn:
Čita sa navedene adrese 1 bajt.
PortWordIn:
Čita sa navedene adrese 1 reč(16 bita).
PortDWordIn:
Čita sa navedene adrese dvostruku reč(32 bita).
GetPortBit:
Ova funkcija ispituje status zadatog bita unutar bajta. Ako je postavljen
na 1 vraća vrednost True inače vraća
vrednost False.
SetPortBit:
Postavlja na datoj adresi, navedeni broj bita na 1. Npr. komandom SetPortBit(&378, 4) biće postavljen
četvrti bit Data porta na 1.
ClrPortBit:
Postavlja na datoj adresi, navedeni broj bita na 0. Npr. komandom ClrPortBit(&378, 3) biće postavljen
treći bit Data porta na 0.
NotPortBit:
Invertuje zadati bit na datoj adresi. Npr. komandom NotPortBit(&378, 4) biće promenjeno stanje četvrtog bita Data porta.
RightPortShift:
Vrši pomeranje u desno sadržaja na datoj adresi. Ako je u funkciji drugi
parametar postavljen na True na
najvećoj poziciji biće postavljeno 1 inače ako je
False neće biće postavljeno 0.
LeftPortShift:
Vrši pomeranje u levo sadržaja na datoj adresi. Ako je u funkciji drugi
parametar postavljen na True na
najnižoj poziciji biće postavljeno 1 inače ako je
False neće biće postavljeno 0.
IsDriverInstalled:
Ova funkcija vraća vrednost True
ako IO.DLL postoji inače vraća False.
PROGRAM ELEKTRONSKOG SEMAFORA
Izgled ekrana ovog programa prikazan je na slici 1 (SEMAFORD).
Slika 1
Klikom mišom na taster Ukljuci pocece sekvenca semafora u
trajanju od 10 ciklusa tj. crvena, crveno-žuta, zelena, žuta, crvena itd.. Na
našem trokanalnom interfejsu stanje releja biće upravo prema ovoj sekvenci.
Sam program u Delphiu je:
unit
semafor1; interface uses Windows, Messages, SysUtils, Variants,
Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons; type TForm1 = class(TForm) Shape1: TShape; Shape2: TShape; Shape3: TShape; StaticText1: TStaticText; BitBtn1: TBitBtn; Label1: TLabel; GroupBox1: TGroupBox; RadioButton1: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; procedure BitBtn1Click(Sender: TObject); procedure RadioButton1Click(Sender:
TObject); procedure RadioButton2Click(Sender:
TObject); procedure RadioButton3Click(Sender:
TObject); procedure Adresa(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; LPTAdresa : Integer; implementation {$R
*.dfm} procedure
PortOut(Port: Word; Data: Byte); stdcall; external 'io.dll'; function
PortIn(Port: Word): Byte; stdcall; external 'io.dll'; procedure
Sleep(MilliSecondsToWait: LongInt); var StartTime: LongInt; begin StartTime := GetTickCount; while (GetTickCount >= StartTime)
and (GetTickCount < (StartTime +
MilliSecondsToWait)) do Application.ProcessMessages end {Sleep}; procedure
TForm1.BitBtn1Click(Sender: TObject); Var i :
byte; begin For i := 1 to 10 do Begin Shape1.Brush.Color := clRed; Shape2.Brush.Color := clWhite; Shape3.Brush.Color := clWhite; PortOut(LPTAdresa, 1); Sleep(2000); Shape2.Brush.Color := clYellow; PortOut(LPTAdresa, 3); Sleep(500); Shape1.Brush.Color := clWhite; Shape2.Brush.Color := clWhite; Shape3.Brush.Color := clLime; PortOut(LPTAdresa, 4); Sleep(2000); Shape3.Brush.Color := clWhite; Shape2.Brush.Color := clYellow; PortOut(LPTAdresa, 2); Sleep(500); End; PortOut(LPTAdresa, 0); Shape1.Brush.Color := clWhite; Shape2.Brush.Color := clWhite; Shape3.Brush.Color := clWhite; end; procedure
TForm1.RadioButton1Click(Sender: TObject); begin LPTAdresa :=$378; end; procedure
TForm1.RadioButton2Click(Sender: TObject); begin LPTAdresa :=$278; end; procedure
TForm1.RadioButton3Click(Sender: TObject); begin LPTAdresa :=$3BC; end; procedure
TForm1.Adresa(Sender: TObject); begin LPTAdresa :=$378; end; end. |
Iz program se vidi da koristimo samo
dve procedure Portout i funkciju Portin. Budući da delphi nema Sleep funkciju to je u program dodata
najčešće upotrebljavana Sleep procedura
koja zadržava program u milisekundama. Takođe je moguće promeniti i adresu
paralelnog porta.
http://vojo.milanovic.org
© Copyright, 2004 Milanović Vojo
All Rights
Reserved.