串口通讯怎样设置1位其始位?

pc200300 2003-12-09 05:51:55
加精
过去没有遇到,谢谢了!
...全文
243 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
crzman37 2003-12-10
  • 打赏
  • 举报
回复
一般默认的起始位就是1位吧。就是加上高电平的起始位
hCom = CreateFile(CommPort.c_str(),
GENERIC_READ | GENERIC_WRITE,
0, //必须以opened w/exclusive-access
NULL, //无安全属性
OPEN_EXISTING, //必须用OPEN_EXISTING
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, //重叠I/O
NULL //对通信设备必须是NULL
);
if (hCom == INVALID_HANDLE_VALUE) {
// dwError = GetLastError();
MessageBox(NULL,"打开通信设备文件失败!","错误",MB_OK);
return false;
}

SetupComm(hCom,4096,4096); // 设置输入,输出缓冲区皆为4096字节

fSuccess = GetCommState(hCom, &dcb);
if (!fSuccess) {
MessageBox(NULL,"获取通信设备控制块数据结构操作异常!","错误",MB_OK);

return false;
}

// 填充DCB: baud=9600, 8 data bits, no parity, 1 stop bit.

dcb.BaudRate = BaudRateP;
dcb.ByteSize = ByteSizeP;
dcb.Parity = ParityP;
dcb.StopBits = StopBitsP;
dcb.fDtrControl = DTR_CONTROL_ENABLE;

dcb.fInX = TRUE; //允许输入(接收)Xon/Xoff流量控制
dcb.fOutX = TRUE; //允许输出(发送)Xon/Xoff流量控制
dcb.XonLim = BLOCK_LENGTH/4; //接收时发出Xon时的门限值
dcb.XoffLim = BLOCK_LENGTH/4;//接收时发出Xoff时的门限值

//用改变后的控制(配置)块数据结构设置串行口
fSuccess = SetCommState(hCom, &dcb);
if (!fSuccess) {
MessageBox(NULL,"设置通信设备控制块数据结构操作异常!","错误",MB_OK);
return false;
}

CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF;
CommTimeOuts.ReadTotalTimeoutMultiplier = 0;
CommTimeOuts.ReadTotalTimeoutConstant = 0;
CommTimeOuts.WriteTotalTimeoutMultiplier = 0;
CommTimeOuts.WriteTotalTimeoutConstant = 5000;

SetCommTimeouts(hCom, &CommTimeOuts);
if(!SetCommMask(hCom, EV_RXCHAR))
{
MessageBox(NULL,"设置通信设备超时数据结构操作异常!","错误",MB_OK);
return false;
}

memset(&osRead, 0, sizeof(OVERLAPPED));
memset(&osWrite, 0, sizeof(OVERLAPPED));
osRead.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
osWrite.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);

BufferOffset=0;
LineBytes=0;
return true;

}

4,387

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧