使用 vc++ 编译器如何访问串口。Bioscom() 函数可以在 Turbo C 中使用。
问问题
6430 次
4 回答
2
你必须像这样打开适当的 com 设备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 条目。另外,出于简洁的原因,我省略了断开连接的方法。
于 2009-05-05T09:32:11.513 回答
2
它们是 Code Project 中关于与 C++ 进行串行通信的许多文章。这是返回的第一篇文章。您基本上可以通过文件 I/O 操作访问端口。这有点复杂,我建议为此任务找到合适的库。
于 2009-05-05T09:35:27.480 回答
1
Microsoft 开发人员网络上的此页面介绍了如何在 Windows 中使用串行端口,我假设这是您想要定位的环境,具体取决于您选择的编译器。
于 2009-05-05T09:18:52.433 回答
0
bios 功能仅在您使用 MSDOS 或非常旧的 Windows 版本(并且特定于 Turbo C)时可用。对于现代版本的 Windows,您将需要使用 OS API 来执行串行 I/O。
于 2009-05-05T09:23:45.667 回答