Einzelnen Beitrag anzeigen

Benutzerbild von ich2
ich2

Registriert seit: 7. Dez 2005
Ort: Würzburg
54 Beiträge
 
#5

Re: Parallelport unter XP ansteuern

  Alt 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
  Mit Zitat antworten Zitat