Problem mit S232 Schnittstelle



  • Ich habe ein Problem mit meinem Code. er soll 8 Bits an die serielle Schnittstelle senden. Aber er sendet sie nicht. Es kommt immer nur 1 an und zwar das achte. Da dieses aber auf 0 steht sollte es auf meiner Platine überhaupt nicht leuchten. Also kann mir jemand helfen und sagen welchen Fehler ich gemacht habe. Ausserdem übernimmt er meine Baudrate nicht.

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

    HANDLE hComm; // Handle für den Zugriff
    COMMTIMEOUTS timeouts_alt; // Um die alten Parameter zu merken
    DCB dcb;
    char buffer[4];
    unsigned long dwBytesWritten;
    unsigned long nBaud = 9600;

    int main()
    {
    hComm = CreateFile ("COM1",
    GENERIC_READ | GENERIC_WRITE,
    0,
    0,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    NULL);

    if (hComm == INVALID_HANDLE_VALUE) // hat es geklappt? Bei Fehler ist hier Schluss!
    {
    return (FALSE);
    }
    dcb.DCBlength = sizeof(DCB);
    dcb.fBinary = TRUE; // muss immer "TRUE" sein!
    dcb.fParity = FALSE;
    dcb.fOutxCtsFlow = FALSE;
    dcb.fOutxDsrFlow = FALSE;
    dcb.fDtrControl = DTR_CONTROL_ENABLE;
    dcb.fDsrSensitivity = FALSE;
    dcb.fTXContinueOnXoff = TRUE;
    dcb.fOutX = FALSE;
    dcb.fInX = FALSE;
    dcb.fErrorChar = FALSE;
    dcb.fNull = FALSE;
    dcb.fRtsControl = RTS_CONTROL_ENABLE;
    dcb.fAbortOnError = FALSE;
    dcb.wReserved = 0; // muss immer "0" sein!
    dcb.BaudRate = 9600;
    printf("Schnittstelle an");
    getchar();

    int buffer2 = 11001010;

    WriteFile(hComm, &buffer2, sizeof("buffer2"), &dwBytesWritten, NULL);

    printf("Bit erfolgreich gesendet");
    getchar();

    return 0;
    }



  • W4$TL schrieb:

    int buffer2 = 11001010;
    WriteFile(hComm, &buffer2, sizeof("buffer2"), &dwBytesWritten, NULL);

    das sieht irgendwie verkehrt aus.
    versuch mal sowas:

    char *buffer2 = "11001010";
    WriteFile (hComm, buffer2, strlen(buffer2), &dwBytesWritten, NULL);
    


  • Dieser Thread wurde von Moderator/in c.rackwitz aus dem Forum ANSI C in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ich kann´s immer nur wiederholen... Verwendet bitte eine fertige Klasse für die serielle Schnittstelle... spätestens wenns um das Empfangen von Daten geht wird es sonst kompliziert...
    http://www.codeproject.com/system/serial.asp



  • Ich kann´s immer nur wiederholen... Verwendet bitte eine fertige Klasse für die serielle Schnittstelle ...

    @Jochen Kalmbach,
    willst Du den Lehrer spielen?
    Ein Hinweis auf die Möglichkeit, eine (diese) fertige Klasse zu verwenden, reicht doch aus.

    Blackbird



  • Blackbird schrieb:

    willst Du den Lehrer spielen?

    naja, jochen meints ja nur gut.
    aber vielleicht kann der fragesteller mit klassen nix anfangen, weil er 'c', nicht 'c++' programmiert (könnte man meinen, weil er ursprünglich in's ansi-c forum gepostet hat).

    @jochen: pack den codeproject-link einschliesslich einer kleinen erklärung, warum man das rad nicht neu erfinden sollte, inne faq und dann postest du einfach einen link darauf (mit einem freundlichen hinweis und nicht so genervt wie sonst).



  • Das Problem ist doch das im ersten Versuch 4 bytes gesendet werden. Mit
    byte buffer2 = %11001010;
    sollte das klappen. (hoffe C kennt byte, sonst char. Ob % das richtige Zeichen für Binärdarstellung ist auch ohne Gewehr)

    OT: was ist am Empfang denn so schlimm, dass einige gleich 'ne eigene Klasse brauchen ?


Log in to reply