Avatar billede lubker Nybegynder
03. juli 2008 - 22:09 Der er 3 kommentarer og
1 løsning

RS232 seriel kommunikation

Hej.
Jeg sidder og rodder i lidt C++ (Borland Developer Studio 2006) og har brug for "lidt" hjælp til RS232 kommunikation med en microprocessor.

Jeg skal have lavet et program, der sender en række data afsted til microkontrolleren (8 bit ad gangen).

Da der skal sendes forholdsvis meget data har jeg opstillet dette i et array i Hex format.
int init[6] = {0xAA, 0x0D, 0x00, 0x00, 0x00, 0x00};

Til selve rs232 kommunikationen er jeg helt blank.
Fandt et eksempel på http://home20.inet.tele.dk/midgaard/snip/modem.html som jeg har kigget lidt på, men her sendes strenge istedet for integer.

Hvordan kan jeg sende integer til com porten og igen læse integer der sendes retur fra microcontrolleren?

Et eksempel ville være super.
Avatar billede bertelbrander Novice
03. juli 2008 - 22:16 #1
Hvis det er 8 bit størrelse der skal sendes er det ikke int, men "unsigned char" du skal sende.

Du kan sende på samme måde som i eksemplet, men caste dine data til den rigtige type.
Avatar billede mowijo Nybegynder
08. juli 2008 - 09:24 #2
Internettet er din ven....

http://www.tetraedre.com/advanced/serial.php

Vh. Morten
Avatar billede Michael Johansen Nybegynder
30. august 2011 - 15:56 #3
Det er ikke så svært:

Først skal du åbne com-porten:

HANDLE hPort = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);

Så skal du konfigurere porten med en DCB:
DCB dcb;
ZeroMemory(&dcb, sizeof(dcb));
dcb.DCBlength = sizeof(dcb);
GetCommState(hPort, &dcb);
dcb.BaudRate = CBR_38400;
dcb.fBinary = 1;
dcb.ByteSize = 8;
dcb.Parity = ODDPARITY;
dcb.StopBits = ONESTOPBIT;
SetCommState(hPort, &dcb);

og så er du i princippet kørende og du sender med WriteFile(hPort,....o.s.v.
og modtager med ReadFile(hPort,....o.s.v.
Avatar billede Michael Johansen Nybegynder
30. august 2011 - 16:03 #4
...ovenstående eksempel er synkron og blokkerer så længe der sendes/modtages.
Hvis du vil vide om der er modtaget data inden du kalder ReadFile så kan du kalde ClearCommError, som returnerer en COMSTAT struct som indeholder cbInQue der er antal bytes modtaget og som venter på at blive læst.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester