lpt w delphi

0

Cześc wam .
Staram sie napisac prosty programik ale idzie mi to jak pies z jezem.
Czy mogły ktos zajrzec na kod i napisac co zle robie.
Nie moge sprawdzic czy port czyta wejscia. w procedurze Timer1.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
nit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Label1: TLabel;
Timer1: TTimer;

procedure Timer1Timer(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button2Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
portadr:word;
bajt,dane:byte;

implementation

{$R *.dfm}

function czytajlpt(portaddr:word):byte;
var dane:byte;
begin
portadr:=$379;
asm
push dx
mov DX,portadr
in AL,DX
mov dane,AL
pop dx
end;
czytajlpt:=dane;
end;
procedure zapiszlpt;assembler;
asm
mov dx,0378h
mov al,bajt
out dx,al
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
czytajlpt(portadr);
if (portadr and 32)= 32 then // tu cos zle sprawdzam warunek ?!
begin
label1.Caption:='tak';
end
else
label1.Caption:='nie';
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
timer1.Enabled:=false;
label1.Caption:='zatrzymany';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
timer1.Enabled:=true;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
bajt:=0;
zapiszlpt;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
bajt:=8;
zapiszlpt;
end;

end.

########################################

Za pomoc dziekuję

0

z poziomu asma pod winda dostepu do urzadzen w ten sposob nie uzyskasz musisz sie komunikowac za posrednictwem sterownika patrz winapi -> CreateFile jak uzyskac dostep do portow I/O chociaz to zalezy jeszcze pod jaka winda to robisz

0

Wiem ze dostane sie na port bo robilem to kilka lat temu.
Tylko ni pamietam jak sprawdza sie wejscia.
Za podpowiedz dziekuje

0

Co i gdzie w porcie: http://www.lvr.com/parport.htm
A na jakim systemie to robisz? Bo jak NT/2000/Xp to asmem nie pójdzie. Zobacz to: http://www.logix4u.net/inpout32.htm Najprostsza i wypróbowana metoda dostania się do portu.

0

Robie to pod WIN98

0

Chodzi mi o to czy w tej procedurze poprawnie sprawdzam czy jest na pinie 12 inf. tj.ten pin zwieram z masą pinem 18

procedure TForm1.Timer1Timer(Sender: TObject);
begin
czytajlpt(portadr);
if (portadr and 32)= 32 then // tu cos zle sprawdzam warunek .zwieram pin12 z pinem 18 i sprawdzam?!
begin
label1.Caption:='tak';
end
else
label1.Caption:='nie';
end;

0

wiesz nie wnikalem w ten kod asma co tam zapodales ale tutaj nie trzeba byc geniuszem zeby stwierdzic ze ten kod nie ma sensu:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
czytajlpt(portadr);
 if  (portadr and 32)= 32 then // tu cos zle sprawdzam warunek  .zwieram pin12 z pinem 18 i sprawdzam?!
begin
label1.Caption:='tak';
end
else
label1.Caption:='nie';
end;

z tego co widze cos Ci sie pochrzanilo bo w koncu Ty masz sprawdzac ten bajt jaki Twoja funkcja czytajlpt zwraca a nie adres portu jaki jej przekazujesz... oczywiscie ten adres co przekazujesz tez w sumie bezsensownie bo wewnatrz funkcji masz juz z gory ustalony czyli ten parametr i tak jest bezsensownie tam wrzucony ;)
to powinno wygladac tak:

procedure TForm1.Timer1Timer(Sender: TObject);
begin

if  (czytajlpt(portadr) and 32)= 32 then // tu cos zle sprawdzam warunek  .zwieram pin12 z pinem 18 i sprawdzam?!
begin
label1.Caption:='tak';
end
else
label1.Caption:='nie';
end;
0

Dziekuje Tobie bardzo za podpowiedz.Ale Ty rowniez masz blad.
W mysl twojej aplikacja pracuje prawidlowo i wyglada tak:

procedure TForm1.Timer1Timer(Sender: TObject);
begin

if (czytajlpt(portadr) and 32)= 0 then // tu cos zle sprawdzam warunek .zwieram pin12 z pinem 18 i sprawdzam?!
begin
label1.Caption:='tak';
end
else
label1.Caption:='nie';
end;

Jeszcze raz dziekuje za pomoc.

0

ja nie bralem pod uwage warunek jaki podales tylko skladnie kodu ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1