LPT POMOCY!!!!!!!!!!!!!!!!

0

Chcę w jakiś sposób odczytać dane z portu LPT - jak to zrobić??? Chodzi mi dokładnie o to, aby po podaniu napięcia (lub zwarcia do masy) końcówki portu wejściowego (379h) program coś robił, np, wyświetlał informację o zmianie stanu portu. Zapisywać dane do portu wyjściowego (378h) umiem, ale chodzi mi o komunikację dwustronną z i do komputera. Jak możecie pomóżcie - dość pilne!! Czekam pod mailem [email protected]. Dzięki z góry!!!

0

Zajrzyj tu
http://www.4programmers.net/forum/index.php?action=show&id=1771
a szczegolnie do linku podanego na koncu tego watku. jakby byly watpliwosci, to pisz.--Pawel

Delphi6

0

Użyj tej funkcji (testowana na porcie $379 - pin 15 Error w DB25)

function lpt_in(in_port: word): boolean;
var i: word;
begin
asm
mov dx,in_port
xor ax,ax
in ax,dx
mov i,ax
end;
if i = -13185 then lpt_in := True;
if i = -13193 then lpt_in := False;
end;

0

cepa napisał:
Użyj tej funkcji (testowana na porcie $379 - pin 15 Error w DB25)
&gt
&gtfunction lpt_in(in_port: word): boolean;
&gtvar i: word;
&gtbegin
&gt asm
&gt mov dx,in_port
&gt xor ax,ax
&gt in ax,dx
&gt mov i,ax
&gt end;
&gt if i = -13185 then lpt_in := True;
&gt if i = -13193 then lpt_in := False;
&gtend;
&gt

cepa, jestes pewien, ze to dziala? jak zmienna typu word ma miec wartosc ujemna??? Poza tym o ile pamietam, z portow odczytuje sie wartosci 8 a nie 16 bit, wiec in al, dx mov i, al a i powino byc byte. xor ax, ax zeruje ax - tez nie wiem po co...--Pawel

Delphi6

0

Szczerze powiedzawszy funkcję tą przepisywałem ze swojego porgramu w C++. :P
A co do wartości ujemnych to jak pisałem program odczytujący dane z $379 to się także zdziwiłem bo gdy zwarłeś końcówkę do masy program odczytywał -13193 , a gdy podłaczyłeś ją do + to odczytywał -13185. hmm...

int bit_na_porcie;
(...)
bit_na_porcie = portin(0x379);

U mnie to działa. Najlepiej jak sam poprubujesz napisać to w delphi. :-)

0

mi tez się coś nie podoba czemu Twoja funkcja zwraca wartość typu boolean, przecieŻ port jest 8 bitowy ??--POzdrOWieNIa
[Del 6 per] [Del 5 Ent] [TP]

0

Port jest żeczywiście 8bitowy ale pod adresem $379 (inne też) znajduje się jeden pin.
Tak więc aby pobrać wartośc BYTE musisz powtórzyć operacje odczytu 8 razy, a następnie z 8 bitów stworzy liczbę naturalną. Odczyt z portu LPT to nie to samo co zapis do niego. {hello}

0

Tak sie sklada, ze mam sporo doswiadczen w czytaniu/pisaniu LPT i na $379 jest 5 pinow - w bitach 3, 4, 5, 6 i 7 (niektore zanegowane). --Pawel

Delphi6

0

Tego nie wiedziałem. Myślałem że port $379 to tylko pin 15 na DB25 czyli pin ERROR (zawsze ten pin wykorzystywałem) {wstyd} Sorry

0

A czemu by nie skożystać z podstawowego wyjścia danych 378h ?? Tam jest 8 pinów, żaden nie jest zanegowny (piny od 2-9, oile mnie pamięć nie myli) --POzdrOWieNIa
[Del 6 per] [Del 5 Ent] [TP]

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