Ik heb een seriële poort RS-232-verbinding gemaakt in C++ met behulp van een 16-bits compiler (ik gebruikte Turbo C++ IDE). Het bevatte header-bestand bios.h
dat alle vereiste functies bevat voor het lezen van waarden van de poort. Nu wil ik de waarde van de seriële poort lezen met behulp van C++ 32-bit Mingw-compiler. Ik gebruik Dev CPP als mijn IDE. Hier kon ik bios.h
niet vinden. Zijn er speciale header-bestanden beschikbaar voor dit doel in Mingw? Ik gebruik nu een 32-bits compiler omdat ik in mijn universiteitsproject Exception handling moet gebruiken waarvan ik vermoed dat het niet wordt ondersteund in Turbo C. Help me alsjeblieft.
Antwoord 1, autoriteit 100%
Kijk hier eens:
- RS-232 voor Linux en Windows1)
- Windows seriële poortprogrammering2)
- De seriële poorten gebruiken in Visual C++3)
- Seriële communicatie in Windows
1)Je kunt dit zowel met Windows (incl. MinGW) als Linux gebruiken. Alternatief, je kunt de code alleen als voorbeeld gebruiken.
2)Stap-voor-stap handleiding voor het gebruik van seriële poorten op Windows
3)Je kunt dit letterlijk gebruiken op MinGW
Hier is een zeer, zeer eenvoudige code (zonder enige foutafhandeling of instellingen):
#include <windows.h>
/* ... */
// Open serial port
HANDLE serialHandle;
serialHandle = CreateFile("\\\\.\\COM1", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
// Do some basic settings
DCB serialParams = { 0 };
serialParams.DCBlength = sizeof(serialParams);
GetCommState(serialHandle, &serialParams);
serialParams.BaudRate = baudrate;
serialParams.ByteSize = byteSize;
serialParams.StopBits = stopBits;
serialParams.Parity = parity;
SetCommState(serialHandle, &serialParams);
// Set timeouts
COMMTIMEOUTS timeout = { 0 };
timeout.ReadIntervalTimeout = 50;
timeout.ReadTotalTimeoutConstant = 50;
timeout.ReadTotalTimeoutMultiplier = 50;
timeout.WriteTotalTimeoutConstant = 50;
timeout.WriteTotalTimeoutMultiplier = 10;
SetCommTimeouts(serialHandle, &timeout);
Nu kunt u WriteFile()
/ ReadFile()
gebruiken om bytes te schrijven/lezen.
Vergeet niet je verbinding te sluiten:
CloseHandle(serialHandle);
Antwoord 2, autoriteit 3%
Voor het bovenstaande antwoord is de standaard seriële poort
serialParams.BaudRate = 9600;
serialParams.ByteSize = 8;
serialParams.StopBits = TWOSTOPBITS;
serialParams.Parity = NOPARITY;