Odczyt D0...D7 z LPT

Jun 18, 2004 9 Replies

Witam,



Mam urzadzenie podlaczone do bitow D0...D7 portu LPT (8 kolejnych pinow portu, poczawszy od drugiego).



Mam program: #include <stdio.h>



#include <dos.h>



outportb(0x37A, 0x20); while (1) printf("%d %d\n", inportb(0x378), inportb(0x379));



Program uruchamiam pod DOSem uruchamiajac komputer z dyskietki systemowej Win98.



W BIOSie mojego komputera moge ustawic EPP, ECP, EPP+ECP. Moja plyta glowna to Asus P2BF.


Urzadzenie podaje rozne sygnaly, a ja na ekranie nie widze zmian.



Jak sprawic, aby mozna bylo odczytac dane z bitow danych portu LPT ?



Pavel.



Z tego co mi wiadomo, to w jednym z trybów (EPP lub ECP) nic nie daje zmiana kierunku pracy portu (outportb(0x37A, 0x20). Najpierw trzeba ustawiæ w BIOS-ie odpowiedni tryb (niestety, nie pamiêtam który, ale chyba ECP) i powinno byæ OK. W jednej z gazet by³ opis jak zrobiæ to w programie bez konieczno¶ci zmiany ustawieñ w BIOS-ie.

Użytkownik Pavel napisał:

Najpierw na 0x378 trzeba wysłać ff albo 00, ale raczej to pierwsze (dokładnie nie pamiętam), później sprawdzaj kolejne możliwe tryby w biosie, przy którymś powinno zatrybić.

Zrobilem testy: EPP, wyslanie 0xff na 0x378, wyslanie 0x20 na 0x37A EPP, wyslanie 00 na 0x378, wyslanie 0x20 na 0x37A EPP, wyslanie 0x20 na 0x37A, wyslanie 0xff na 0x378 EPP, wyslanie 0x20 na 0x37A, wyslanie 00 na 0x378 ECP, wyslanie 0xff na 0x378, wyslanie 0x20 na 0x37A ECP, wyslanie 00 na 0x378, wyslanie 0x20 na 0x37A ECP, wyslanie 0x20 na 0x37A, wyslanie 0xff na 0x378 ECP, wyslanie 0x20 na 0x37A, wyslanie 00 na 0x378

Niestety, nic nie pomoglo.

Z portu 0x378 odczytuje wartosc ostatnio wpisana (00 albo 0xff). Z portu 0x379 odczytuje bodajze 126 (albo 162).

Pavel.

Gdzies znalazlem test na to czy port jest bi.

Nalezy wyslac bajt (ale nie 255) na 0x378, wyslac 0x20 na 0x37A i odczytac bajt. Jesli odczytany bajt == wyslany bajt, to nie mamy portu bi. Jesli odczytany bajt == 255, mamy port bi.

Zrobilem taki test dla roznych ustawien mojego BIOSU (Normal, EPP, ECP, EPP+ECP) i wszystkie testy wyszly, ze NIE mam portu bi. A to dziwne, gdyz moja plyta jest pod Celerona, a juz chyba duzo wczesniej byly porty Bi.

Co tu robic ?

Pavel.

To bez sensu, o ile pamiêtam bit kierunku jest w porcie odpowiedzialnym za stan wyj¶ciowych sygna³ów steruj±cych i skoro zapiszesz tam 0x20, to powiniene¶ odczytaæ warto¶æ inn± ni¿ 255 (chyba, ¿e to inny port).

W jednym z trybów (nie pamiêtam, czy to ECP, czy EPP) port na pewno jest dwukierunkowy. Jako wej¶cie pracuje po ustawieniu odpowiedniego bitu (nie mam pod rêk± ksi±¿ki, ani programu testuj±cego, wiêc nie powiem Ci, który to).

Nic nie trzeba najpierw wysy³aæ, bo ustawienie bitu kierunku w stan 1, powoduje przej¶cie buforów wyj¶ciowych w 3-ci stan. Zatem niezale¿nie od warto¶ci zapisanej do bufora, stan wyj¶æ (wej¶æ) bêdzie zale¿ny od sygna³ów podanych z zewn±trz. Ewentualnie takie wyj¶cia mog± byæ podci±gniête do +5V.

Chodzi o odczyt z 0x378, a nie 0x37A.

Pavel.

Tak w ogole to wycztalem ze ustawianie 5. bitu na 0x37A nie jest standardem i moze nie dzialac... ktos, w ktoryms watku na usenecie napisal, ze mial do czynienia z roznymi portami rownoleglymi i ustawienie 5. bitu na 0x37A dzialalo na mniejszosci.

Najlepiej gdybym mial jakis pewny programik i mogl przetestowac.

Pavel.

W wiadomosci:cav103$5tp$ snipped-for-privacy@nemesis.news.tpi.pl, Pavel snipped-for-privacy@polbox.com nabazgral:

Moze sproboj najpierw pod "oknami" sciagnij DLPortIO z DrvierLinxa, sproboj oprogramowac, zreszta poszukaj programiku portmon, ktorym mozesz odczytywac/zapisywac dowolne bity LPT.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required