Re: Zabawa portem drukarki

Autor: Eloy (eloy_at_kki.net.pl)
Data: Mon 31 Jan 2000 - 18:14:42 MET


>Czy ktoś z szanownych grupowiczów próbował pobrać dane przez port drukarki.

A próbował, próbował :-)

>Chodzi o podanie napiecia na piny 2 do 9 (piny danych) i odczyt ich do
>póżniejszego użycia.

Tu jest błąd. Piny 2-9 służą do komunikacji z drukarką, a konkretniej do ich
wysyłania do drukarki. Podpinanie napięcia na piny wyjściowe może się
conajwyżej skończyć spaleniem portu.
Co innego podłączać coś gdy mamy port dwukierunkowy i wpiszemy odpowiednio
jedynki które wprowadzą
piny 2-9 w stan wysokiej impedancji.

>Wiem że jest na to procedura w assemblerze ale brak mi pomysłu na jej
>napisanie.

Język akurat nie ma tu nic do gadania. To zależy w czym piszesz. Po prostu
trzeba do odpowiednich portów zapisać (opcjonalnie) i odczytać odpowiednie
dane.
w asemblerze to jest : MOV DX, port IN AL, DX lub OUT DX, AL
w c masz funkcje inp i outp lub w module DOS.h jest inportb i outportb
w pascalu jest tablica zwana port, odwołujesz się przez index np. a =
port[$278]; lub port[$278]:=a;

Teraz głębsze wyjaśnienie:
standardowo, gdy port jest jednokierunkowy mamy do czynienia z sytuacją:
12 wyjść [ 8 linii danych D0..D7 (2..9), wyjścia: Strobe (1), AutoLineFeed
(14), Initialization (16), DeviceSelect (17) ] oraz 5 wejść : [ Acknowledge
(10), Busy (11), PaperOut (12), OnOff (13), Error (15) ]
dodatkowo niektóre piny są zanegowane względem stanu odpowiedniego bitu w
porcie.

Jeśli chcesz więc odczytać dane "standardowo" przez port jednokierunkowy to
podepnij się pod te 5 wejść.
Dostęp do nich masz pod portem [adres bazowy + 1], bity w kolejności:
~BUSY, ACK, PAP, ONOFF, ERR, x,x,x -> x - nieistotne

Dodatkowo opadające zbocze sygnału ACK przy włączonym bicie IRQEnable wywoła
przerwanie IRQ, podpięcie się pod nie to trochę trudniejsza brocha.
Przerwanie IRQ można włączyć przez ustawienie bitu 4 w porcie [adres bazowy
+ 2]

A co z portem dwukierunkowym?
Niestety nie mam w tej chwili pod łąpką nic pomocnego. Prawie na pewno
trzeba ustawić w porcie bazowym same jedynki, ale nie wiem, czy to
wystarcza, czy trzeba sobie pomóc jakimś dodatkowym bitem...

Co jeszcze? Port równoległy pracuje na stanach TTL, co znaczy
0 logiczne - 0..1,4 V
1 logiczne - ~2.2V - 5V

a adresy portów LPT można odczytać z tablicy BIOSa:
LPT1: word 40:08, LPT2: word 40:0A, LPT3: word 40:0C i LPT4: word 40:0E

Mam nadzieję, że pomogłem ( i zakończyłem sprzeczkę )

    eloy_at_kki.net.pl



To archiwum zostało wygenerowane przez hypermail 2.1.7 : Tue 18 May 2004 - 19:38:34 MET DST