Mam taki kod programu, który obsługuje port LPT (ustawiania na zmiane stan wysoki i niski na linii D0-D7). Obsługa portu LPT odbywa sie poprzez komponent NpsPort. Zrobiłem to na wątku, zeby działało niezaleznie. Dodatkowo dla celów orientacyjnych zrobilem licznik (j=j+1). I tutaj zaczyna sie problem. Komponent NpsPort wymaga w pierwszej kolejności przypisania adresu portu LPT. Jezeli zrobie to w procedurze TTest.Execute; (Port2.Address:=$378;) to wczesniejszy licznik mi nie działa. Bez tej komendy licznik działa.
Wiec gdzie musze wykonać polecenie Port2.Address:=$378;) aby ten licznik zadziałał?????
Zdrówka
unit MainFrm;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, NpsPort;
type
TMainForm = class(TForm)
btnStart: TButton;
btnStop: TButton;
Port1: TNpsPortB;
procedure btnStartClick(Sender: TObject);
procedure btnStopClick(Sender: TObject);
private
{ Private declarations }
public
ar:longint;
{ Public declarations }
end;
(* WATEK *)
TTest = class(TThread)
private
ak:real;
Port2:TNpsPortB;
protected
procedure Execute; override;
public
end;
var
MainForm: TMainForm;
Test : TTest;
implementation
{$R *.DFM}
procedure TTest.Execute;
var
j:longint;
begin
FreeOnTerminate := True;
j:=0;
Port2.Address:=$378; ///problem
while not (Application.Terminated) or (Terminated) do
begin
j:=j+1;
MainForm.ar:=j;
MainForm.Canvas.TextOut(100,100,IntTostr(j));
Port2.Value:=255;
Port2.Value:=0;
end;
end;
procedure TMainForm.btnStartClick(Sender: TObject);
begin
Test.Resume;
end;
procedure TMainForm.btnStopClick(Sender: TObject);
begin
Test.Suspend;
btnStart.Caption := 'Wznów';
Canvas.TextOut(200,100,IntTostr(ar));
end;
initialization
Test:=TTest.Create(True);
end.