windows串口写的问题

legendhui 2004-12-22 11:15:35
我想直接按十六进制发送数据,就把值直接赋给字符型数组,别的值都还好说,接收到的都正确,可是为什么发送0就不好使,请大家指教。我的程序如下:
Sport.InitPort(this,1,9600,'n',8,1);
Sport.StartMonitoring();
char buf[100];
memset(&buf, 0, sizeof(buf));
buf[0]=0xa5;
buf[1]=0xc4;
buf[2]=0xa1;
buf[3]=0x40;
buf[4]=0x00;
buf[5]=0x00;
buf[6]=0x00;
buf[7]=0xf5;
Sport.WriteToPort(buf);
...全文
130 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
legendhui 2004-12-25
  • 打赏
  • 举报
回复
void CSerialPort::WriteChar(CSerialPort* port)
{
BOOL bWrite = TRUE;
BOOL bResult = TRUE;

DWORD BytesSent = 0;

ResetEvent(port->m_hWriteEvent);

// Gain ownership of the critical section
EnterCriticalSection(&port->m_csCommunicationSync);

if (bWrite)
{
// Initailize variables
port->m_ov.Offset = 0;
port->m_ov.OffsetHigh = 0;

// Clear buffer
PurgeComm(port->m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR | PURGE_RXABORT | PURGE_TXABORT);

bResult = WriteFile(port->m_hComm, // Handle to COMM Port
port->m_szWriteBuffer, // Pointer to message buffer in calling finction
strlen((char*)port->m_szWriteBuffer), // Length of message to send
&BytesSent, // Where to store the number of bytes sent
&port->m_ov); // Overlapped structure

// deal with any error codes
if (!bResult)
{
DWORD dwError = GetLastError();
switch (dwError)
{
case ERROR_IO_PENDING:
{
// continue to GetOverlappedResults()
BytesSent = 0;
bWrite = FALSE;
break;
}
default:
{
// all other error codes
port->ProcessErrorMessage("WriteFile()");
}
}
}
else
{
LeaveCriticalSection(&port->m_csCommunicationSync);
}
} // end if(bWrite)

if (!bWrite)
{
bWrite = TRUE;

bResult = GetOverlappedResult(port->m_hComm, // Handle to COMM port
&port->m_ov, // Overlapped structure
&BytesSent, // Stores number of bytes sent
TRUE); // Wait flag

LeaveCriticalSection(&port->m_csCommunicationSync);

// deal with the error code
if (!bResult)
{
port->ProcessErrorMessage("GetOverlappedResults() in WriteFile()");
}
} // end if (!bWrite)

// Verify that the data size send equals what we tried to send
if (BytesSent != strlen((char*)port->m_szWriteBuffer))
{
TRACE("WARNING: WriteFile() error.. Bytes Sent: %d; Message Length: %d\n", BytesSent, strlen((char*)port->m_szWriteBuffer));
}
}
一条晚起的虫 2004-12-24
  • 打赏
  • 举报
回复
他的WriteToPort()大概是发送以‘\0’结尾的字符串的,猜的
因为他没有发送长度
onestation 2004-12-24
  • 打赏
  • 举报
回复
Sport.WriteToPort(buf);
这个函数连buf的长度都不知道,肯定不对啊!
legendhui 2004-12-24
  • 打赏
  • 举报
回复
怎么知道0x00是结束符啊?!
我在程序中怎么找不到?
hjunxu 2004-12-22
  • 打赏
  • 举报
回复
他认为0x00是结束符吧
wujian53 2004-12-22
  • 打赏
  • 举报
回复
我有自己写的串口类库, 可以发16进制, 类似(Com1.Write(p, 8);), 比较简单;
blog.csdn.net/wujian53
nuaawenlin 2004-12-22
  • 打赏
  • 举报
回复
0x00是结束符
auly403 2004-12-22
  • 打赏
  • 举报
回复
你所说他的是谁,如何是BUf, 就认为是.
串口就不认为.

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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