学习笔记

在Visual C++6.0集成开发环境,使用MSComm控件串口编程,发送一帧数据,数据的格式为:

帧头是FE FB,帧尾是FE FA,中间有6个字节,每两个字节在0~4095变化,这六个字节要做校验;校验完后,进行转义:FE转义为FE FE。

校验函数:

unsigned short crc16_calculate(unsigned char* pucSendBuf, unsigned short usLen)
{
unsigned short i, j;
unsigned short usCrc = 0xFFFF;
for (i = 0; i < usLen; i++)
{
usCrc ^= (unsigned short)pucSendBuf[i];
for (j = 0; j < 8; j++)
{
if (usCrc & 1)
{
usCrc >>= 1;
usCrc ^= 0xA001;
}
else
{
usCrc >>= 1;
}
}
}


return usCrc;
}

使用定时器,连续发送数据

void CSendDataDlg::OnTimer(UINT nIDEvent) 
{
// TODO: Add your message handler code here and/or call default
sendA[0]+= 10;
sendA[1]+= 100;
sendA[2]+= 100;
if(sendA[0]> 540)
{
sendA[0] = 0x0000;
}
if(sendA[1] > 0x0FFF)
{
sendA[1] = 0x0000;
}
if(sendA[2] > 0x0FFF)
{
sendA[2] = 0x0000;
}

sendB[2] = (sendA[0] >> 8) & 0xFF;
sendB[3] = (sendA[0] & 0xFF);
sendB[4] = (sendA[1] >> 8) & 0xFF;
sendB[5] = (sendA[1] & 0xFF);
sendB[6] = (sendA[2] >> 8) & 0xFF;
sendB[7] = (sendA[2] & 0xFF);
unsigned short sendC = crc16_calculate(&sendB[2], 6);
sendB[8] = (sendC >> 8) & 0xFF;
sendB[9] = (sendC & 0xFF);

int s1 = 10;
for(int i =2; i != s1; i+=1)
{
if(sendB[i] == 0xFE)
{
//sendD=sendB[i+1];
//sendB[i+1] =0xFE;
//s1+=1;
for(int k = s1; k!=i;k--)
{
sendB[k] = sendB[k-1];
}
//sendB[i+1] = 0xFE;
s1+=1;
i++;
}
}

CByteArray array1;
array1.RemoveAll();
array1.SetSize(s1);
array1.SetAt(0,sendB[0]);
array1.SetAt(1,sendB[1]);
int j;
for(j =2; j!= s1; j++)
{
//if(sendB[i] == 0x00)
//break;
array1.SetAt(j,sendB[j]);
}
CByteArray array2;
array2.RemoveAll();
array2.SetSize(2);
array2.SetAt(0,0xFE);
array2.SetAt(1,0xFA);
m_Mscomm.SetOutput(COleVariant(array1));
m_Mscomm.SetOutput(COleVariant(array2));
CDialog::OnTimer(nIDEvent);
}

数组的长度是个常量,针对这个问题,一帧数据的长度会发生变化,所以可以使用·vector容器,vector容器可以获取长度,自增长。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值