-1

vc++ コンパイラを使用して、シリアル ポートにアクセスする方法。Bioscom() 関数は Turbo C で使用できます。

4

4 に答える 4

2

そのようにして適切なコムデバイスを開く必要がありますCreateFile。ニーズに合わせてください。

// Handle of the communication connection 
void *comHandle;

// Port parameters, set to your own needs
unsigned portIndex;
unsigned baudRate;
unsigned dataBits;
Parity   parity;
unsigned stopBits;
bool     handShake;
int      readIntervalTimeout;
int      readTotalTimeoutMultiplier;
int      readTotalTimeoutConstant;
int      writeTotalTimeoutMultiplier;
int      writeTotalTimeoutConstant;
DCB dcb;
COMMTIMEOUTS ct;

// Create COM-device name string 
char comDevice[20];
sprintf(comDevice, "\\\\.\\COM%d", portIndex);

// Open serial port
_comHandle = CreateFile(comDevice, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if (comHandle == INVALID_HANDLE_VALUE)
{
  return false;
}


ct.ReadIntervalTimeout         = readIntervalTimeout;        
ct.ReadTotalTimeoutMultiplier  = readTotalTimeoutMultiplier; 
ct.ReadTotalTimeoutConstant    = readTotalTimeoutConstant;   
ct.WriteTotalTimeoutMultiplier = writeTotalTimeoutMultiplier;
ct.WriteTotalTimeoutConstant   = writeTotalTimeoutConstant;  

if (!GetCommState(_comHandle,&dcb))
{
  disconnect();
  return false;
}

dcb.BaudRate        = baudRate;  
dcb.ByteSize        = (BYTE)dataBits;
dcb.Parity          = (parity == None) ? NOPARITY : ((parity == Even) ? EVENPARITY : ODDPARITY);
dcb.StopBits        = (stopBits > 1) ? TWOSTOPBITS : ONESTOPBIT;
dcb.fRtsControl     = handShake ? RTS_CONTROL_HANDSHAKE : RTS_CONTROL_ENABLE;
dcb.fOutxCtsFlow    = handShake;
dcb.fOutxDsrFlow    = handShake;
dcb.fDtrControl     = handShake ? DTR_CONTROL_HANDSHAKE : DTR_CONTROL_ENABLE;
dcb.fDsrSensitivity = handShake;
dcb.fOutX           = FALSE;
dcb.fInX            = FALSE;
dcb.fErrorChar      = FALSE;
dcb.fNull           = FALSE;
dcb.fAbortOnError   = TRUE;

// Set port state
if( !SetCommState(_omHandle, &dcb) ||
    !SetCommTimeouts(comHandle, &ct) ||
    !SetupComm(comHandle, 64, 64) ||
    !PurgeComm(comHandle, PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR))
{
  disconnect();
  return false;
} 

呼び出されるさまざまな関数の適切な MSDN エントリを読み取ります。また、簡潔にするために、disconnect メソッドを省略しました。

于 2009-05-05T09:32:11.513 に答える
2

C++ とのシリアル通信に関する Code Project の多くの記事です。これは最初に返された記事です。基本的にファイル I/O 操作でポートにアクセスします。少し複雑なので、このタスクに適したライブラリを見つけることをお勧めします。

于 2009-05-05T09:35:27.480 に答える
1

Microsoft Developer Network のこのページでは、Windows でシリアル ポートを操作する方法を紹介しています。Windows は、選択したコンパイラに基づいて対象とする環境であると想定しています。

于 2009-05-05T09:18:52.433 に答える
0

BIOS 機能は、MSDOS または非常に古いバージョンの Windows (および Turbo C に固有) を使用している場合にのみ使用できます。最新バージョンの Windows では、OS API を使用してシリアル I/O を実行する必要があります。

于 2009-05-05T09:23:45.667 に答える