void main(void) { DCB dcb; /* device control block */ HANDLE hCom; BOOL fSuccess; BOOL bLineEnd; char szLine[70]; char cKb; int i; DWORD BytesRead, BytesWrite; COMMTIMEOUTS timeouts; int portid; char *ComPort[] = {"COM1","COM2"}; printf("Port-Nummer [1..2]: "); scanf("%i", &portid); portid--; hCom = CreateFile(ComPort[portid], GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, /* no overlapped I/O */ NULL); /* muss NULL sein für comm devices */ PERR(hCom != INVALID_HANDLE_VALUE, "CreateFile"); fSuccess = GetCommState(hCom, &dcb); PERR(fSuccess, "GetCommState"); /* Schnittstelle konfigurieren */ dcb.BaudRate = 38400; dcb.ByteSize = 8; dcb.Parity = NOPARITY; dcb.StopBits = ONESTOPBIT; dcb.fDtrControl = DTR_CONTROL_DISABLE; dcb.fInX = FALSE; fSuccess = SetCommState(hCom, &dcb); PERR(fSuccess, "SetCommState"); fSuccess = GetCommTimeouts (hCom, &timeouts); PERR(fSuccess, "GetCommTimeouts"); printf("Timeout-values:\n" "ReadIntervalTimeout = %u\n" "ReadTotalTimeoutMultiplier = %u\n" "ReadTotalTimeoutConstant = %u\n" "WriteTotalTimeoutMultiplier = %u\n" "WriteTotalTimeoutConstant = %u\n", timeouts.ReadIntervalTimeout, timeouts.ReadTotalTimeoutMultiplier, timeouts.ReadTotalTimeoutConstant, timeouts.WriteTotalTimeoutMultiplier, timeouts.WriteTotalTimeoutConstant); timeouts.ReadIntervalTimeout = MAXDWORD; timeouts.ReadTotalTimeoutMultiplier = 0; timeouts.ReadTotalTimeoutConstant = 0; fSuccess = SetCommTimeouts (hCom, &timeouts); PERR(fSuccess, "SetCommTimeouts"); printf( "\n\n--------------------------------------------------------------------------\n" "Warte auf Zeichen von seriellem Port...\n" "Es werden maximal 70 Zeichen geschrieben bis ein EndOfLine-Zeichen (RETURN)\n" "erkannt wurde...\n\n"); i = 0; bLineEnd = FALSE; do { /* überprüft ob Zeichen im input buffer anliegt */ ReadFile ( hCom, &szLine[i], 1, &BytesRead, NULL); if (BytesRead > 0) { /* Zeichen liegt am Eingang, zeige das Zeichen und den ASCII-Code an */ printf("%c<%03u>", szLine[i], szLine[i]); if (szLine[i] == EOL) /* check end of line */ bLineEnd = TRUE; i++; } /* falls keine Daten am Port anliegen, kann das Programm mit ESC beendet werden */ if (kbhit()) cKb = getch(); } while (cKb != ESC); fSuccess = CloseHandle(hCom); PERR(fSuccess, "CloseHandle"); /* Schließen der seriellen Schnittstelle */ } /* end main */