Komma åt serieporten i C (windows)

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Johan.o
EF Sponsor
Inlägg: 2386
Blev medlem: 18 juni 2003, 01:08:50
Ort: Jönköping

Komma åt serieporten i C (windows)

Inlägg av Johan.o »

Hejsan

Håller på att läsa en kurs i C , som snart är slut.
Får nog ses som en grundkurs, iaf så undrar jag lite
hur jag ska gå tillväga om jag vill komma åt seriellporten
i C på en windowsdator, hört att det visst ska vara lite knepigt med just windows.. ? iaf inget vi fått lära oss.
Användarvisningsbild
Icecap
Inlägg: 26151
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Inlägg av Icecap »

Det är inget svårt alls faktisk.

Öppna en fil med namnet "COM1" (eller "COM2"...) och sedan är det klart.
Ett sax från ett av mina program i Borland C Builder:

Kod: Markera allt

  // Check out COM1 - COM20 if they are available
  for(int Counter = 1;Counter <= 20;Counter++)
    {
    sprintf(MyText,"COM%u",Counter);
    Handle = CreateFile(MyText,GENERIC_READ | GENERIC_WRITE,0,0,OPEN_EXISTING,0,0);
    if(Handle != INVALID_HANDLE_VALUE)
      {
      COM_Select->Items->Add(MyText);
      PurgeComm(Handle,PURGE_RXABORT);
      CloseHandle(Handle);
      if(!strcmp(Config.COM_Port, MyText)) Select = Available;
      Available++;
      }
    else
      {
      if(GetLastError() == 5)
        { // It's there....but used by another application
        COM_Select->Items->Add(MyText);
        if(!strcmp(Config.COM_Port, MyText)) Select = Available;
        Available++;
        }
      }
    }
Johan.o
EF Sponsor
Inlägg: 2386
Blev medlem: 18 juni 2003, 01:08:50
Ort: Jönköping

Inlägg av Johan.o »

Tack så mycket! Ska försöka kika på det lite senare..
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Att komma åt själva serieporten (hårdvaruregisterna) under nyare Windows är i princip lika krångligt som med parallellporten eller annan hårdvara. Det är nog detta du tänker på. Det krävs speciella drivrutiner.

Däremot är det, precis som Icecap säger, väldigt enkelt att använda Windows API-funktioner för sända och ta emot seriedata.
Skriv svar