Jest to dość krótkie FAQ zawierające podstawowe informacje dotyczące obsługi portu LPT
Architektura LPT:
Port ten posiada 25 pinów, nas przede wszystkim interesują od 2, do 9, są odpowiedzialne za wysyłanie danych, ale także za odbieranie, o ile port jest dwukierunkowy. W nowszych komputerach nie spotyka się jednokierunkowych, na których można było tylko wysyłać.
Jest to widok z przodu portu LPT, tak jak patrzymy na niego patrząc na komputer. Piny, o których wcześniej mówiłem są oznaczone D0-D7, od Data – dane. Na każdym może być jednocześnie jeden stan logiczny – bit 0, lub 1, a ponieważ jest ich 8, port ten nazywamy 8 bitowym.
Ale to nie wszystkie ważne dla nas piny, kolejne to te oznaczone kolorem zielonym 18-25, jest to masa. Do większości projektów tylko tych pinów będziesz używał więc w reszte się nie będziemy zagłębiać. Chcesz wiedzieć więcej, to sprawdź bibliografię na końcu.
Biblioteki:
Aby programować na początek musimy posiadać jakieś biblioteki, które wykonają potrafią ów port obsługiwać.
Biblioteki do najbardziej popularnych systemów operacyjnych.
a) MS DOS
- C/C++ - DM&P Serial Port DOS Library http://www.dmp.com.tw/tech/dmp-lib/serport/
b)Windows 95/98/NT/2K/XP
- C / C++/ Pascal / Basic/ Java / C#- NTPort- http://www.zealsoftstudio.com/ntport/
- C / C++ - WinIO - http://www.internals.com/
b) Linux
- C – Perapin- http://parapin.sourceforge.net/
Przyznam się, że programuję pod Windows 2K, za pomocą C++ używam, NTPort i wszystko ładnie działa. Nie miałem możliwości sprawdzić pozostałych bibliotek a informacje o językach, w których działają brałem ze stron producentów.
Prosty program:
Przed rozpoczęciem programowania należy znać jeszcze adres LPT, czyli ‘378h’
I tutaj kilka przykładów:
Windows/NTPort/C++
Windows/WinIO/C++
Linux/C++
Dos/Pascal
A co zamiast 0x01?
Jak już wspomniałem port LPT jest 8-bitowy, stan tych bitów możemy łatwo wyrazić jedną liczbą w systemie binarnym(tzw. zerojedynkowym) np., jeśli chcemy na D0 wysłać bit 1, a na pozostałych 0, tak jak to robiliśmy w przykładach, to liczba, jaką wysyłamy wygląda tak: 00000001, a jeśli, na co drugim ma być 1, a reszta 0, to wygląda to tak: 10101010, ale co z tego? Właśnie to, że kiedy zamienimy tą(00000001) liczbę na system szesnastkowy to powstanie nam 01, czyli dokładnie to, co podawaliśmy do tej pory! A teraz druga liczba:
10101010 po zamianie na 16-stkowy równa się ‘AA’(dla niewtajemniczonych: ponieważ znamy tylko 10 cyfr, a w systemie 16-stkowym jest ich 16, cyfry powyżej dziewięciu zastąpiono kolejnymi literami alfabetu czyli: 10=>A, 11=>B ... 15=>F) Myślę że teraz jest wszystko jasne i jeśli chcemy na przykład ustawić taką wartość pinów D0-D7: 10101010, to do kodu w miejsce 0x01 wstawiamy 0xAA. Należy pamiętać, że ostatnia cyfra(w tym wypadku 0) odpowiada wartości pniu D0, a nie D7!
Przykładowe projekty
http://www.funducode.com/freec/Hardware/new_hi_c03/Article03.htm
http://www.eres.alpha.pl/index.php?text=182
http://www.epanorama.net/circuits/parallel_output.html
http://www.edn.com/archives/1997/102397/22di_05.htm
http://www.epanorama.net/circuits/lptpower.html
Motor.gif na dole strony(kod który zamieściłem w pascalu jest właśnie do niego)
Bibliografia:
http://www.epanorama.net/links/project_pc.html#pc_parallel
ftp://ftp.armory.com:/pub/user/rstevew/LPT/zha96lpt.faq
http://www.doc.ic.ac.uk/~ih/doc/par/
RS232 Praktyczne programowanie
The Hardware Book
The Complete Computer Hardware Electronics Reference
Bajtek

Architektura LPT:
Port ten posiada 25 pinów, nas przede wszystkim interesują od 2, do 9, są odpowiedzialne za wysyłanie danych, ale także za odbieranie, o ile port jest dwukierunkowy. W nowszych komputerach nie spotyka się jednokierunkowych, na których można było tylko wysyłać.
Jest to widok z przodu portu LPT, tak jak patrzymy na niego patrząc na komputer. Piny, o których wcześniej mówiłem są oznaczone D0-D7, od Data – dane. Na każdym może być jednocześnie jeden stan logiczny – bit 0, lub 1, a ponieważ jest ich 8, port ten nazywamy 8 bitowym.
Ale to nie wszystkie ważne dla nas piny, kolejne to te oznaczone kolorem zielonym 18-25, jest to masa. Do większości projektów tylko tych pinów będziesz używał więc w reszte się nie będziemy zagłębiać. Chcesz wiedzieć więcej, to sprawdź bibliografię na końcu.
Biblioteki:
Aby programować na początek musimy posiadać jakieś biblioteki, które wykonają potrafią ów port obsługiwać.
Biblioteki do najbardziej popularnych systemów operacyjnych.
a) MS DOS
- C/C++ - DM&P Serial Port DOS Library http://www.dmp.com.tw/tech/dmp-lib/serport/
b)Windows 95/98/NT/2K/XP
- C / C++/ Pascal / Basic/ Java / C#- NTPort- http://www.zealsoftstudio.com/ntport/
- C / C++ - WinIO - http://www.internals.com/
b) Linux
- C – Perapin- http://parapin.sourceforge.net/
Przyznam się, że programuję pod Windows 2K, za pomocą C++ używam, NTPort i wszystko ładnie działa. Nie miałem możliwości sprawdzić pozostałych bibliotek a informacje o językach, w których działają brałem ze stron producentów.
Prosty program:
Przed rozpoczęciem programowania należy znać jeszcze adres LPT, czyli ‘378h’
I tutaj kilka przykładów:
Windows/NTPort/C++
nAddress = GetLPTPortAddress(1);//Biblioteka ta pozwala nam znaleźć adres portu LPT, ale możemy też go wpisać ręcznie…
<br/>Outport(nAdress, 0x01);//zapisuje na porcie LPT1 na D0 bit 1
<br/>Windows/WinIO/C++
InitializeWinIo();//ta biblioteka wymaga włączenia
<br/>SetPortVal(0x378, 0x01, 1) ;// zapisujemy na porcie LPT1 na D0 bit 1
<br/>ShutdownWinIo();// i zamykamy bibliotekę
<br/>Linux/C++
#include <fcntl.h>
<br/>#include <unistd.h>
<br/>const int CTL_PORT=0x378+2;
<br/>const int ON=0x01;
<br/>int main()
<br/>{
<br/>int fd;
<br/>unsigned char command=ON;
<br/>fd=open("dev/port", O_WRONLY, 0);
<br/>lseek(fd, CTL_PORT, SEEK_SET);
<br/>write(fd, &command, 1);// zapisujemy na porcie LPT1 na D0 bit 1
<br/> }
<br/>Dos/Pascal
program silniki;
<br/>uses crt,dos;
<br/>const adres=$378;{dla LPT1 i $278 dla LPT2}
<br/>procedure silnik(numer:byte;komenda:char);
<br/>var d,a,b:byte;
<br/>begin
<br/>d:=port[adres];
<br/>case numer of
<br/>1:a:=$fc;
<br/>2:a:=$f3;
<br/>3:a:=$cf;
<br/>4:a:=$3f;
<br/>end;
<br/>case komenda of
<br/>'p':begin {prawo}
<br/>b:=1 shl ((numer-1)*2);
<br/>port[adres]:=(d and a)+b;
<br/>end;
<br/>'l':begin {lewo}
<br/>b:=2 shl ((numer-1)*2);
<br/>port[adres]:=(d and a)+b;
<br/>end;
<br/>'s':port[adres]:=(d and a)+b; {stop}
<br/>end;
<br/>end;
<br/>begin
<br/>clrscr;
<br/>writeln('Silniki.');
<br/>silnik(1,'p');
<br/>end.
<br/>A co zamiast 0x01?
Jak już wspomniałem port LPT jest 8-bitowy, stan tych bitów możemy łatwo wyrazić jedną liczbą w systemie binarnym(tzw. zerojedynkowym) np., jeśli chcemy na D0 wysłać bit 1, a na pozostałych 0, tak jak to robiliśmy w przykładach, to liczba, jaką wysyłamy wygląda tak: 00000001, a jeśli, na co drugim ma być 1, a reszta 0, to wygląda to tak: 10101010, ale co z tego? Właśnie to, że kiedy zamienimy tą(00000001) liczbę na system szesnastkowy to powstanie nam 01, czyli dokładnie to, co podawaliśmy do tej pory! A teraz druga liczba:
10101010 po zamianie na 16-stkowy równa się ‘AA’(dla niewtajemniczonych: ponieważ znamy tylko 10 cyfr, a w systemie 16-stkowym jest ich 16, cyfry powyżej dziewięciu zastąpiono kolejnymi literami alfabetu czyli: 10=>A, 11=>B ... 15=>F) Myślę że teraz jest wszystko jasne i jeśli chcemy na przykład ustawić taką wartość pinów D0-D7: 10101010, to do kodu w miejsce 0x01 wstawiamy 0xAA. Należy pamiętać, że ostatnia cyfra(w tym wypadku 0) odpowiada wartości pniu D0, a nie D7!
Przykładowe projekty
http://www.funducode.com/freec/Hardware/new_hi_c03/Article03.htm
http://www.eres.alpha.pl/index.php?text=182
http://www.epanorama.net/circuits/parallel_output.html
http://www.edn.com/archives/1997/102397/22di_05.htm
http://www.epanorama.net/circuits/lptpower.html
Motor.gif na dole strony(kod który zamieściłem w pascalu jest właśnie do niego)
Bibliografia:
http://www.epanorama.net/links/project_pc.html#pc_parallel
ftp://ftp.armory.com:/pub/user/rstevew/LPT/zha96lpt.faq
http://www.doc.ic.ac.uk/~ih/doc/par/
RS232 Praktyczne programowanie
The Hardware Book
The Complete Computer Hardware Electronics Reference
Bajtek

Fajne? Ranking DIY