Ansteuern der RS232 in C
Geizhals » Forum » Programmierung » Ansteuern der RS232 in C (5 Beiträge, 46 Mal gelesen) Top-100 | Fresh-100
Du bist nicht angemeldet. [ Login/Registrieren ]
..
Re(2): Ansteuern der RS232 in C
02.04.2002, 11:04:11
Also hier der versprochene Quellcode. (MS VC 6.0 )

#include windows.h>
#include stdio.h>
#include conio.h>
#include string.h>

extern HANDLE hCom;
extern OVERLAPPED o;


BOOL ReadSerial ( char *Buffer, unsigned long timeout)
{
unsigned long dwEvents;
DWORD dwBytesWritten;

Sleep(timeout);

WaitCommEvent(hCom, &dwEvents, &o);

if (dwEvents & EV_RXCHAR)
{
// To do.
ReadFile (hCom, Buffer, BUFFER_SIZE, &dwBytesWritten, &o);
dwEvents ^= EV_RXCHAR;
return true;
}
return false;
}

void WriteSerial (char *Output)
{
DWORD dwBytesWritten;

printf("\n%s", Output);
WriteFile (hCom, Output, strlen(Output), &dwBytesWritten, &o);
}

BOOL InitSerial (char *CommPort)
{
DCB dcb;
BOOL fSuccess;

hCom = CreateFile( CommPort,
                     GENERIC_READ | GENERIC_WRITE,
                     0,    // comm devices must be opened w/exclusive-access
                     NULL, // no security attributes
                     OPEN_EXISTING, // comm devices must use OPEN_EXISTING
                     FILE_FLAG_OVERLAPPED,    // overlapped I/O
                     NULL  // hTemplate must be NULL for comm devices
                     );

if (hCom == INVALID_HANDLE_VALUE) {
      // Handle the error.
      printf ("\nCreateFile failed with error %d.", GetLastError());
      return false;
    }

fSuccess = GetCommState(hCom, &dcb);

if (!fSuccess) {
      // Handle the error.
      printf ("\nGetCommState failed with error %d.", GetLastError());
      return false;
    }

BuildCommDCB("baud=9600 parity=N data=8 stop=1", &dcb);

fSuccess = SetCommState(hCom, &dcb);

if (!fSuccess) {
      // Handle the error.
      printf ("\nSetCommState failed with error %d.", GetLastError());
      return false;
    }

printf ("\nSerial port %s successfully initialized.\n", CommPort);

fSuccess = SetCommMask(hCom, EV_RXCHAR);

if (!fSuccess)
{
    // Handle the error.
      printf ("\nSetCommMask failed with error %d.", GetLastError());
      return false;
}

// Create an event object for use in WaitCommEvent.

o.hEvent = CreateEvent(
NULL,   // no security attributes
FALSE,  // auto reset event
FALSE,  // not signaled
NULL    // no name
);
o.Internal = NULL;
o.InternalHigh = NULL;
o.Offset = NULL;
o.OffsetHigh = NULL;

return true;
}

Alles hat einen Grund.


Ich kann ihn nur nicht bei Windows finden.


Antworten PM Übersicht Chronologisch Zum Vorgänger
 
Melden nicht möglich
 

Dieses Forum ist eine frei zugängliche Diskussionsplattform.
Der Betreiber übernimmt keine Verantwortung für den Inhalt der Beiträge und behält sich das Recht vor, Beiträge mit rechtswidrigem oder anstößigem Inhalt zu löschen.
Datenschutzerklärung