Odczyt portu równoległego z możliwością zapisu

Forum dotyczące ogólnie pojętego programowania - algorytmów, struktur danych, narzędzi programistycznych, itp - głównie w kontekście komputerów PC.
ODPOWIEDZ
dahra
-
Posty: 3
Rejestracja: 07 gru 2009, 10:58
Lokalizacja: Poznan

Odczyt portu równoległego z możliwością zapisu

Post autor: dahra » 07 gru 2009, 11:05

Witam
Chciałbym napisać program który odczytuje dane z portu równoległoego oraz następnie zapisuje te dane np. do pliku tekstowego. Jestem początkującym zapalniecem:) znam podstawy języka pascal oraz c++. Może ktoś mi pomóc?? Jak się za to zabrać, w jakim programie pisać?? lub napisać przykład??

Pozdrawiam dahra

Awatar użytkownika
c4r0
Moderator
Posty: 2150
Rejestracja: 13 kwie 2004, 19:56
Lokalizacja: z lasu
Kontakt:

Post autor: c4r0 » 07 gru 2009, 11:41

W systemie XP bezpośredni dostęp do portu jest utrudniony. Z pomocą przychodzą biblioteki jak np. DLportIO (ja tych używam). Są do ściągnięcia pod pierwszym wynikiem w google. Po zainstalowaniu są tam też przykłady użycia w basicu i w c. Nie wiem natomiast jak odczytywać dane z portu bo nigdy tego nie robiłem. Normalnie masz trzy adresy sprzętowe, jeden do zapisu 8 bitów danych na port, drugi do pisania na liniach sterujących i trzeci do odczytu linii kontrolnych. To działa bez problemu. Jeśli chcesz używać linii danych jako wejścia to musisz korzystać z jakiegoś innego trybu LPT, nie wiem jak bo nie robiłem tego.

Awatar użytkownika
przemotronik
Użytkownik
Posty: 252
Rejestracja: 18 paź 2006, 19:30
Lokalizacja: Wrocław

Post autor: przemotronik » 07 gru 2009, 21:37

Witam,
niedawno opisywałem w EdW kilka przykładów obsługi portu równoległego z poziomu DOSa (programy powstawały pod Windowsem 98). W artykule jest podany projekt prostej płytki testowej do obsługi LPT, a w materiałach na Elportalu znajduje się opis programów wraz z listingami i binarkami. Obsługa pod XP, jak już napisał Kol. c4r0, sprowadza się do użycia bibliotek. Dodam też jeszcze jedną nazwę bibliotek: giveio. Na Elportalu, w dziale nasze strony, jest artykuł Taszy, traktujący o "bojach" z obsługą tegoż portu pod XP-kiem. Polecam.

dahra
-
Posty: 3
Rejestracja: 07 gru 2009, 10:58
Lokalizacja: Poznan

Post autor: dahra » 15 gru 2009, 21:18

Dzięki za pomoc:)
Mam program napisany w dev c++ no i odczytuje mi wszystkie porty. Uruchamiam go przez wiersz poleceń. Podaje linka do zdjęcia z tym programem
http://img683.imageshack.us/img683/4063/lpt.png
Ale chciałbym wejść w dany port powiedzmy ten pierwszy <0378>= 00AA i odczytać z niego dane i zapisać je do pliku tekstowego. Czy coś takiego jest w ogóle możliwe??

Podaje jeszcze tekst źródłowy programu:

Kod: Zaznacz cały

#include <stdio.h>
#include <conio.h>
#include <windows.h>

     typedef short (_stdcall *inpfuncPtr)(short portaddr);
     typedef void (_stdcall *oupfuncPtr)(short portaddr, short datum);

int main(void)
{
     HINSTANCE hLib;
     inpfuncPtr inp32;
     oupfuncPtr oup32;
      short x;
     int i;
     hLib = LoadLibrary("inpout32.dll");
     if (hLib == NULL) {
          printf("Błąd przy wczytywaniu biblioteki.\n");
          return -1;
     }

     inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");

     if (inp32 == NULL) {
          printf("GetProcAddress dla Inp32 Failed.\n");
          return -1;
     }

     oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");

     if (oup32 == NULL) {
          printf("GetProcAddress dla Oup32 Failed.\n");
          return -1;
     }

     for (i=0x378; (i<0x380); i++) {

          x = (inp32)(i);

          printf("Odczyt portu (%04X)= %04X\n",i,x);
     }

     i=0x378;
     x=0x77;

     (oup32)(i,x);

     printf("Write port 0x%X, datum=0x%2X\n" ,i ,x);

     x = (inp32)(i);
     printf("Odczyt portu (%04X)= %04X\n",i,x);


     i=0x378;
     x=0xAA;

     (oup32)(i,x);

     printf("Write port 0x%X, datum=0x%2X\n" ,i ,x);

     x = (inp32)(i);
     printf("Odczyt portu (%04X)= %04X\n",i,x);

     FreeLibrary(hLib);
     return 0;
}

     i=0x378;
     x=0x77;

     (oup32)(i,x);

     printf("Write port 0x%X, datum=0x%2X\n" ,i ,x);

     x = (inp32)(i);
     printf("Odczyt portu (%04X)= %04X\n",i,x);


     i=0x378;
     x=0xAA;

     (oup32)(i,x);

     printf("Write port 0x%X, datum=0x%2X\n" ,i ,x);

     x = (inp32)(i);
     printf("Odczyt portu (%04X)= %04X\n",i,x);

     FreeLibrary(hLib);
     return 0;
}
Pozdrawiam dahra

EDIT: Proszę używać znacznika CODE. RcTomek
Ostatnio zmieniony 16 gru 2009, 0:26 przez dahra, łącznie zmieniany 1 raz.

ODPOWIEDZ