PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Serielle Schnittstelle ansteuern



Barthimaeus
04.11.2007, 18:24
Ich lese immer wieder, dass Leute ihre Roboter mit ihren PC's Daten über die Serielle Schnittstelle austauschen lassen. Nur konnte ich bisher nirgenwo eine Anleitung finden, wie ich mit C oder lieber C++ die Serielle Schnittstelle meines WindowsXP Computers ansteuern kann. Kann mir da jemand auf die Sprünge helfen?

SIGINT
04.11.2007, 19:40
Win32API --- sollte unter WinXP noch funktionieren

Barthimaeus
04.11.2007, 22:29
schade, das machts um eniges komplizierter als ich gehofft hatte.
trotzdem vielen dank

robocat
04.11.2007, 22:40
vielleicht hilft das?


//--------------------------------------------------------------------------
// daten vom psion 3c über rs232 empfangen
// katze am freitag den 13.7.7
//--------------------------------------------------------------------------
#include <stdio.h>
#include <windows.h>
#include <conio.h> // nur für getch. kein ansi-standard
#include "signal.h"

void sigfunc(int sig)
{
if(sig == SIGINT)
{
printf("Got Ctrl-c.\n");
// hier muesste noch ein CloseHandle(port) rein
getch();
exit(1);
}
return;
}

int main(void)
{
HANDLE port;
DCB dcb;
unsigned char c;
unsigned long dwNum;

signal(SIGINT,sigfunc);

port=CreateFile("COM1",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL); // serielle Schnittstelle oeffnen

if(!port){printf("failed to open port!\n");getch();exit(1);}

if(!GetCommState(port, &dcb)){CloseHandle(port);printf("failed to get port!\n");getch();exit(1);}

dcb.DCBlength=sizeof(dcb);
dcb.BaudRate = CBR_38400; // Datenrate
dcb.ByteSize = 8; // Datenbits
dcb.Parity = 0; // kein Paritätsbit
dcb.StopBits = ONESTOPBIT; // 1 Stoppbit
dcb.fBinary = TRUE;
dcb.fParity = FALSE;
dcb.fNull=TRUE; //FALSE;
dcb.fDtrControl=0;
dcb.fDsrSensitivity=FALSE;
dcb.fRtsControl=0;

//dcb.fRtsControl = 0; // RTS auf -12 Volt
//dcb.fDtrControl = 1; // DTR auf +12 Volt

if(!SetCommState(port, &dcb)){CloseHandle(port);printf("failed to set port!\n");getch();exit(1);}

printf("listening..\n");

while(1) // hier fuehrt nur ctrl+c wieder raus
{
if(ReadFile(port,&c,1,&dwNum,NULL));
{
printf("%c",c);
}
}

CloseHandle(port); // serielle Schnittstelle schliessen
return(0);
}

gruesse von der katz