11. april 2005 - 12:42
Der er
9 kommentarer og
1 løsning
Windows seriel programmering
Hej
Kan I give mig et simpelt eks. på hvordan jeg komunikerer med en serielport?
Jeg har kun brug for at læse.
Det skal virke i Windows 2000/XP.
Jeg bruger MS Visual Studio 2003.
11. april 2005 - 13:14
#1
Hej Tomas,
Her er et lille eksempel, håber du kan bruge det:
#include <stdio.h>
#include <windows.h>
void SetTimeOut(HANDLE Port, int sec)
{
COMMTIMEOUTS commtimeouts;
GetCommTimeouts(Port, &commtimeouts);
commtimeouts.ReadIntervalTimeout = 1000*sec;
commtimeouts.ReadTotalTimeoutMultiplier = 10;
commtimeouts.ReadTotalTimeoutConstant = 1000*sec;
SetCommTimeouts(Port, &commtimeouts);
}
void Tx(HANDLE Port, const char *data)
{
DWORD Dummy;
WriteFile(Port, data, strlen(data), &Dummy, 0);
WriteFile(Port, "\r\n", 2, &Dummy, 0);
}
void Rx(HANDLE Port)
{
char Buffer[128];
DWORD Length, i;
ReadFile(Port, Buffer, 128, &Length, 0);
for(i = 0; i < Length; i++)
if(Buffer[i] != '\r')
printf("%c", Buffer[i]);
}
int main(void)
{
DCB dcb;
HANDLE ComPort = CreateFile("COM2", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
GetCommState(ComPort, &dcb);
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
dcb.fOutxCtsFlow = 1;
SetCommState(ComPort, &dcb);
SetTimeOut(ComPort, 1);
Tx(ComPort, "AT");
Rx(ComPort);
Tx(ComPort, "ATZ");
Rx(ComPort);
CloseHandle(ComPort);
return 0;
}
//>Rune
11. april 2005 - 13:50
#3
Kanont mester :)
Jamen godt jeg kunne hjælpe ;o) - du kunne jo også bare ha' spurgt over MSN, så havde det også været gratis :oD
//>Rune
12. april 2005 - 09:22
#7
bertelbrander> ja, kan det ikke passe at det er fra din hjemmeside? - brugte det engang til at teste det med noget modemhalløj, men kunne ikke helt huske hvorfra det kom... beklager hvis du har noget imod jeg har brugt den?!
//>Rune
12. april 2005 - 19:34
#8
Rune, jeg har intet imod at du bruger og vidregiver "min" kode, det er sådan set meningen.
Jeg havde fortrukket en note om hvorfra koden kom.
13. april 2005 - 20:18
#9
Ahh okay, well sorry, men havde ikke det med i mit kodeeksempel jeg lavede dengang, da det blot var en test til et modem for at se om det virkede...
- ellers ville jeg selvf. ha' skrevet hvor koden kom fra.
//>Rune