-         
+ Antworten
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: Parallel oder Serielle Schnittstelle einzelnen Pin auslesen.

  1. #1
    Ron
    Gast

    Parallel oder Serielle Schnittstelle einzelnen Pin auslesen.

    Hi, ich muss nur einen Pin der LPT-Schnittstelle abfragen, ob dieser Low oder High ist. Ich nutze den Borland C++ Builder und Windows 2k. Wie komme ich da nun ran? Vielleicht ginge auch die Serielle Schnittstelle, eigentlich egal.

    Ron

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    23.11.2004
    Alter
    38
    Beiträge
    9
    Ich hier noch einmal. Ich weiss nicht, ob es eindeutig ist, mit dem Borland C++ Builder. Es ist so ziemlich das gleiche wie MS Visual C++.. Hoffe, jemand kann mir helfen. =(

    Ron

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.07.2004
    Ort
    Regensburg
    Alter
    32
    Beiträge
    366
    Bin mir nicht ganz sicher aber ich glaub das geht so

    unsigned char inportb (unsigned int portadr)
    {
    unsigned char value;
    _asm move edx,portadr
    _asm in al,dx
    _asm move value,al
    return (value);
    }

    gruß
    xeus

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.07.2004
    Ort
    Regensburg
    Alter
    32
    Beiträge
    366
    Oder
    x = _inp(0x379)

    dazu must du aber den header conio.h laden

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.10.2004
    Ort
    ferd. Waldmüllerg. 7/2
    Alter
    31
    Beiträge
    456
    OK, jetzt ich!

    Also, die codeschnipsel laufen afu dos - win98/winME, aber leider nicht auf Windows 2K/NT/XP, weil dieser keinen direkten zugriff auf das LPT-Port erlaubt.

    Die Funktionen, die du verwenden könnest lauten:
    CreateFile()
    WriteFile()
    SetCommState()
    GetCommState()
    ...

    also schaut der Beispiel ca. so aus:
    Code:
    void Create_LPT()
    {
        HANDLE hCom=CreateFile("LPT1",GENERIC_READ | GENERIC_WRITE,0,NULL,OPEN_EXISTING, OPEN_EXISTING,0,NULL);
        if(hCom==INVALIDE_HANDLE)
                 // Da ist was schief gelaufen
    
        DCB dbc;
        if(!GetCommState(hCom,&dbc))
                // Da haben wir was versch....
        //Ab hier kannst du alles machen, was du möchtest (natürlich mit den Einschränkungen, die dir Windoof auferlegt ;) einfach MSDN durchlesen...
        dbc.
    }
    Naja, wie immer, "dieser Code wurde nicht durch einen Compiler gejagt und ich übernehme keine Haftung für etwaige Fehlfunktionen", d.h. wenn ein Fehler drinn ist, bin ich nicht schuld...
    MfG
    Mobius

    P.S.: gehörte eher unter PC- Notebook, aber wurscht hat ja auch was mit elektronik zu tun

  6. #6
    Gast
    erst mal danke für das alles! =) Nun geht es los. Wenn ich jetzt das Signal auf PIN2 des LPT-Ports auslesen möchte, welcher auch als Data0 bezeichnet wurde in meinem Schaltbild muss was für ein Code eingefügt werden? Der erste Teil dient dazu, die Schnittstelle bereit zu stellen, oder? Und dann kommt DCB...... Wie ist diese Zeile zu verstehen und wie muss sie aussehen, wenn sie auslesen soll für D0 (Pin2)?

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    08.10.2004
    Ort
    ferd. Waldmüllerg. 7/2
    Alter
    31
    Beiträge
    456
    Nö, also die struktur DBC dient dazu, die Optionen des Ports zu erhalten und zu interpretieren. Wenn es nichts anderes ist, als den Buffer zu lesen, dann kannst du einfach den Befehl

    Code:
    ReadFile(HANDLE,BUFFER,BUFFER_LENGHT,BYTES_READ,OVERLAPPED);
    benutzten. Danach musst du vielleicht noch ein Mask auf deinen Buffer legen (welche nur 1 char, also 8 bits, lang ist) legen.

    Code:
    char buffer[1];
    buffer=3;    //0b.0000.0011
    buffer=buffer & 0b.0000.0001;  //buffer = 1
    Naja,ich hoff das hilft weiter
    Mobius

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    23.11.2004
    Alter
    38
    Beiträge
    9
    Ich habe mal mich versucht, was aber ja noch nicht klappt:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {

    int i=0;

    HANDLE hCom=CreateFile("LPT1",GENERIC_READ | GENERIC_WRITE,0,NULL, OPEN_EXISTING,0,NULL);

    ReadFile(hCom,i,1,0,0); //lese lpt1

    Form1->Edit1->Text=i();

    }

    ich wollte also in i das Ergebniss schieben, was an LPT anliegt. Dann soll er einfach das Ergebnis im Editfenster anzeigen. Aber ich mache da etwas falsch.

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    23.11.2004
    Alter
    38
    Beiträge
    9
    Sehe gerade, hattest hier schon etwas geschrieben. Die Readfilezeile macht mir zu schaffen. Wie muss man die Zeilen verstehen und was muss dafür eingesetzt werden?

  10. #10
    Neuer Benutzer Öfters hier
    Registriert seit
    23.11.2004
    Alter
    38
    Beiträge
    9
    Also i darf schon mal kein int sein. Mist. Ok. Char setzen.

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {

    char buffer[1];

    HANDLE hCom=CreateFile("LPT1",GENERIC_READ | GENERIC_WRITE,0,NULL, OPEN_EXISTING,0,NULL);

    buffer = ReadFile(hCom,"LPT1",1,0,0); //lese lpt1

    Form1->Edit1->Text=buffer();

    }


    Habe da ein Problem mit der Interpretation von:

    ReadFile(

    HANDLE hFile, // handle of file to read
    LPVOID lpBuffer, // address of buffer that receives data
    DWORD nNumberOfBytesToRead, // number of bytes to read
    LPDWORD lpNumberOfBytesRead, // address of number of bytes read
    LPOVERLAPPED lpOverlapped // address of structure for data
    );

+ Antworten
Seite 1 von 2 12 LetzteLetzte

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •