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!!!
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
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;
cepa napisał:
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;
>
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
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. :-)
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]
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}
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
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
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]