Registriert seit: 7. Dez 2005
Ort: Würzburg
54 Beiträge
|
Re: Parallelport unter XP ansteuern
17. Feb 2008, 18:55
...vielleicht irgendwo ein schreibschutz drinnen?
aber die wichtigsten Dinge sind ja nachvollziehbar:
Delphi-Quellcode:
..
var
..
BasAdr: Integer = $378;
..
implementation
{$R *.dfm}
{Funktionen aus "inpout32.dll" laden:}
procedure Out32 ( Addresse: Integer; Wert: byte ); stdcall; export; external 'INPOUT32.DLL';
function Inp32 ( Addresse: Integer ): Byte; stdcall; export; external 'INPOUT32.DLL';
..
function Init_LPT_Port: Boolean;
begin
try
{Alle Bits im Daten-Register setzen:}
Out32 ( BasAdr, 255 ); {alle Datenausgänge high}
{Um die 4 Steuerausgänge zu setzen, müssen Bit0,
Bit1, Bit3 gelöscht und Bit2 gesetzt werden.
Außerdem wird Bit4 (Interrupt enable) gesetzt
und Bit5 (bidirektional) gelöscht. Bit6, Bit7
sind ohne Bedeutung:}
Out32 ( BasAdr+2, 20 ); {alle Steuerausgänge high}
{Registerinhalte einlesen und anzeigen:}
gelesen := Inp32(BasAdr);
Form1.ListBox1.Items.Add ( 'Parallelport-Daten-Register' );
Form1.ListBox1.Items.Add ( IntToStr ( gelesen ) );
gelesen := Inp32(BasAdr+2);
Form1.ListBox1.Items.Add ( 'Parallelport-Steuer-Register' );
Form1.ListBox1.Items.Add ( IntToStr ( gelesen ) );
result := true;
except
result := false;
end;
end; // <- Init_LPT_Port
function Destroy_LPT_Port: Boolean;
begin
try
{Alle Bits im Daten-Register löschen:}
Out32(BasAdr, 0); {alle Datenausgänge low}
{Um die 4 Steuerausgänge zu setzen, müssen Bit0,
Bit1, Bit3 gelöscht und Bit2 gesetzt werden.
Außerdem wird Bit4 (Interrupt enable) gesetzt
und Bit5 (bidirektional) gelöscht. Bit6, Bit7
sind ohne Bedeutung:}
Out32(BasAdr+2, 27); {alle Steuerausgänge low}
{Registerinhalte einlesen und anzeigen:}
gelesen := Inp32(BasAdr);
Form1.ListBox1.Items.Add ( 'Parallelport-Daten-Register' );
Form1.ListBox1.Items.Add ( IntToStr(gelesen) );
gelesen := Inp32(BasAdr+2);
Form1.ListBox1.Items.Add ( 'Parallelport-Steuer-Register' );
Form1.ListBox1.Items.Add ( IntToStr(gelesen) );
result := true;
except
result := false;
end;
end; // <- Destroy_LPT_Port
..
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Out32 ( BasAdr, 255 ); {alle Datenausgänge high}
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
case blink of
0..130: begin
if blink mod 2 = 1 then
Out32 ( BasAdr, 255 )
else
Out32 ( BasAdr, 0 );
Inc ( Blink );
end;
131: begin
Out32 ( BasAdr, 255 );
Form1.Timer2.Enabled := false;
Form1.Timer1.Enabled := true;
end;
end;
end;
..
procedure TForm1.FormDestroy(Sender: TObject);
begin
Out32(BasAdr, 0); {alle Datenausgänge low}
Destroy_LPT_Port;
end;
mfg
|
|
Zitat
|