Skocz do zawartości

Problem z transmisja rs232


Nobody

Recommended Posts

Witam!
Mam Problem z transmisja szeregowa. Odbieram dane z mikrokontrolera. To co mikrokontroler wysyla to: 'X', liczba1, liczba2, liczba3, liczba4, 'E', 'X', liczba1, liczba2, liczba3, liczba4, 'E', 'X', liczba1, liczba2 ... itd itd. Przez 'X' oznaczylem poczatek bloku danych, przez 'E' koniec a liczba_n to zmienne. To malo wazne ale napisze ze to dane z akcelerometru. Na liczbach 1..4 na biezaco wykonywane sa obliczenia i np rysowany jest wykres. No i problem polega na tym ze czasem dobrze odczytuje liczby a czasem nie.

case WM_CREATE:

hComm = CreateFile( TEXT("COM1"),
GENERIC_READ | GENERIC_WRITE,
0,
0,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
0);

BuildCommDCB("9600,n,8,1", &dcb);
SetCommState(hComm, &dcb);

return 0;

lpBuf=&AndevX;
Continue=TRUE;
Begin=FALSE;
i=0;
TimeOut=0;
fWaitingOnRead = FALSE;

case WM_PAINT:

while(Continue)
{
if (!fWaitingOnRead)
{
if (!ReadFile(hComm, lpBuf, 1, &dwRead, &osReader))
{
if (GetLastError() != ERROR_IO_PENDING)
MessageBox(hwnd,TEXT("Error in communications"),TEXT("Blad"),MB_ICONERROR|MB_OK);
else
fWaitingOnRead = TRUE;
}
}

if (Begin)
{
aX[i++]=AndevX;
if (AndevX=='E')
Continue=FALSE;
}

if (AndevX=='X')
Begin=TRUE;

if (TimeOut>=0x00ff)
Continue=FALSE;

TimeOut++;
}

hdc=BeginPaint(hwnd,&ps);
EndPaint(hwnd,&ps);

return 0;

Wiem ze nie powinno to byc raczej w WM_PAINT i pozniej pewnie nie bedzie ale narazie chce tylko to uruchomic.

Z gory dziekuje za pomoc.

Link do komentarza
Udostępnij na innych stronach

  • 1 month later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...