串口通信的发送和接收的数据类型问题

swdraven 2008-10-07 05:16:55
我要做的事情很简单,就是发送4个十六进制的数,然后接收一个十六进制的数,看了一些例子,都是教接收字符串的,接收十六进制应该比它更简单吧?可是我还是不会...只好请教各位朋友了...
这个是发送:
CByteArray m_Array;
m_Array.SetSize(4);
m_Array.SetAt(0,0xAA);
m_Array.SetAt(1,0x00);
m_Array.SetAt(2,0x01);
m_Array.SetAt(3,0x03);
m_Comm.SetOutput(COleVariant(m_Array));

接收就不会了,发送也不知道有没有错,麻烦大家看一看,比较急
...全文
446 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
swdraven 2008-10-07
  • 打赏
  • 举报
回复
谢谢~~现在才发现没学好数据类型真的很麻烦。。。原来char是那么好用D。。。
changyj 2008-10-07
  • 打赏
  • 举报
回复 1
接收的话,在你使用的串口类或者串口空间的串口数据接收事件(OnDataReceivexx)中编写接收代码即可,如果你是固定发送4个字节的数据,那么固定Read 4个字节即可。
参考如下:
基本步骤:

1)打开与设置串口接口函数;
2)获得串口设置和串口状态接口函数;
3)设置串口发送数据方式、缓冲区接口及发送数据接口函数;
4)设置串口接收数据方式、缓冲区接口及接收数据接口函数;
5)设置与获取串口上发生的事件接口函数。


1.初始化

m_mscom.SetCommPort(3); //串口3
m_mscom.SetInBufferSize(1024); //设置输入缓冲区的大小,Bytes
m_mscom.SetOutBufferSize(512); //设置输入缓冲区的大小,Bytes
if(!m_mscom.GetPortOpen()) //打开串口
{
m_mscom.SetPortOpen(true);
}
m_mscom.SetInputMode(1); //设置输入方式为二进制方式
m_mscom.SetSettings("9600,n,8,1"); //设置波特率等参数
m_mscom.SetRThreshold(1); //为1表示有一个字符即引发事件
m_mscom.SetInputLen(0);

2.发送

CByteArray sendArr;
BYTE byLen = m_send.GetLength() + 1;
sendArr.Add(byLen);
for (int idx = 1; idx < byLen; idx++)
sendArr.Add(m_send.GetAt(idx-1));

TRACE("data len=%d\n", byLen - 1);
m_mscom.SetOutput(COleVariant(sendArr));

3.接收

BYTE g_byLen = 0;
CString strTest;

void CCommTestDlg::OnOnCommMscomm1()
{
// TODO: Add your control notification handler code here
UpdateData(true);

long i = 0;
switch (m_mscom.GetCommEvent())
{
case 2:
{
COleSafeArray safearray(m_mscom.GetInput());
long len = safearray.GetOneDimSize();
if (len <= 0)
return;

char szRxdata;
CString strData;
for (long nIdx = 0; nIdx < len; nIdx++) {
safearray.GetElement(&nIdx, &szRxdata);
strData += szRxdata;
}

if (0 == g_byLen) {
g_byLen = strData.GetAt(0) - 1;
strData.Delete(0);
TRACE("empty contest \n");
strTest.Empty();
TRACE("data len=%d\n", g_byLen);
}

strTest += strData;
g_byLen -= strData.GetLength();
if (0 == g_byLen) {
m_recv = strTest;
UpdateData(FALSE);
TRACE("data = %s\n", strTest);
}
}

break;
default:
break;
}

}

16,471

社区成员

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

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

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