?
Hi;
Ich bin gerad dabei einen Microcontroller via RS-232 vom PC aus zu steuern. Das senden von Daten vom PC zum myC funktioniert aber wenn ich Daten vom myC zum PC schicke, empfängt der PC sie mit 1-2 Sekunden Verspätung.
Ich bin der Meinung, dass das Problem beim PC liegt und zwar bei der UART(Rs232) -Routine.
Fertige RS232 Tools funktionieren, sie erhalten die Daten ohne Verzögerung.
Kann mir jemand bei diesem Problem weiterhelfen? wäre sehr dankbar
Code muss nur RXD und TXD unterstützen also kein CTR oder Sonstiges.
Mein aktueller C-Code:
**********************************************************************
//class Serial
BOOL Serial::OpenCOM()
{
//Filehandle
fh=CreateFile(com,GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,0);
if(fh==INVALID_HANDLE_VALUE)
return 1;
//Parameter
CString Param;
Param.Format("%s:9600,n,8,1",com);
DCB dcb;
memset(&dcb,0,sizeof(DCB));
dcb.DCBlength=sizeof(DCB);
BuildCommDCB(Param,&dcb);
SetCommState(fh,&dcb);
//TIMEOUTS
COMMTIMEOUTS cto;
memset(&cto,0,sizeof(cto));
GetCommTimeouts(fh,&cto);
cto.ReadIntervalTimeout=0;
cto.ReadTotalTimeoutMultiplier=0;
cto.ReadTotalTimeoutConstant=8000;
SetCommTimeouts(fh,&cto);
return TRUE;
}
BOOL Serial::WriteCOM(CString text)
{
DWORD BytesWritten=0;
int erg=WriteFile(fh,text,text.GetLength(),&BytesWritten,NULL);
if((!erg||BytesWritten)!=text.GetLength())
return FALSE;
else
return TRUE;
}
CString Serial::ReadCOM(int len)
{
DWORD bytesToRead = len,
bytesRead = 0;
char readBuf[32768];
int erg = ReadFile(fh,readBuf,bytesToRead,&bytesRead,NULL);
if (!erg/||bytesToRead!=bytesRead/) return "";
readBuf[bytesRead] = 0;
CString cs = readBuf;
return cs;
}
BOOL Serial::CloseCOM()
{
if(fh!=INVALID_HANDLE_VALUE)
{
CloseHandle(fh);
return TRUE;
}
else
return FALSE;
}
void Serial::SetCOM(CString schnittstelle)
{
com=schnittstelle;
}