VB 的mscomm有单片机串口那样的逐字节接收校验功能吗?
以下是单片机串口接收中断和每接收一个字节就判断一次,这样可以保证接收的数据百分百准确/******************************************...
以下是单片机串口接收中断和每接收一个字节就判断一次,这样可以保证接收的数据百分百准确
/*******************************************************************
判断数据接收是否正确函数
*******************************************************************/
void Com_In_Judge()
{
switch (i)
{
case 0: //如果当前计数器为第一个字节
if(INBUF[i]==0xaa||INBUF[i]==0xcc||INBUF[i]==0xe0)//头字节必须是修改老化车或者录像机以及波特率号中的任意一个
i++; //判断正确,计数器加一,以便接收下一位
else i=0; //如果不正确,就清除计数器,接收从0开始
break;
case 1: //如果当前计数器为第二个字节
if(INBUF[i]>=1&&INBUF[i]<=0x32) //第二个字节是参数修改区,范围为1-32
i++; //判断正确,计数器加一,以便接收下一位
else i=0; //如果不正确,就清除计数器,接收从0开始
break;
case 2: //如果当前计数器为第三个字节
if(INBUF[i]==0) //第三个字节固定为0
i++; //判断正确,计数器加一,以便接收下一位
else i=0; //如果不正确,就清除计数器,接收从0开始
break;
case 3: //如果当前计数器为第四个字节
if(INBUF[i]==0) //第四个字节固定为0
i++; //判断正确,计数器加一,以便接收下一位
else i=0; //如果不正确,就清除计数器,接收从0开始
break;
case 4: //如果当前计数器为第五个字节
if(INBUF[i]==0xbb||INBUF[i]==0xdd||INBUF[i]==0xf0)//尾字节必须是修改老化车或者录像机以及波特率号中的任意一个
{
i=0; //数据已经满5个字节,清除计数器,重新开始计数
Read_Flag=1; //五个字节全正确,置读取标志为1
}
else i=0; //如果不正确,就清除计数器,接收从0开始
break;
}
}
/*******************************************************************
函数说明: 单片机串口接收中断
变量说明: 串口接收的数据暂存
*******************************************************************/
void serial () interrupt 4 using 3
{
if(RI) //有串口中断产生
{
RI = 0; //清除接收中断标志
INBUF[i]=SBUF; //将串口数据送入INBUF
Com_In_Judge(); //判断接收数据是否正确
}
}
请问VB 的mscomm接收有单片机串口那样的逐字节接收校验功能吗?
多谢ZDINGYUN的回复,不过这样是有问题的,因为单片机每次向PC机发送的是8字节数据,如果设置 Rthreshold 为 1 , InputLen 为 1 ,则每次只能收到8个字节中的第一个字节 展开
/*******************************************************************
判断数据接收是否正确函数
*******************************************************************/
void Com_In_Judge()
{
switch (i)
{
case 0: //如果当前计数器为第一个字节
if(INBUF[i]==0xaa||INBUF[i]==0xcc||INBUF[i]==0xe0)//头字节必须是修改老化车或者录像机以及波特率号中的任意一个
i++; //判断正确,计数器加一,以便接收下一位
else i=0; //如果不正确,就清除计数器,接收从0开始
break;
case 1: //如果当前计数器为第二个字节
if(INBUF[i]>=1&&INBUF[i]<=0x32) //第二个字节是参数修改区,范围为1-32
i++; //判断正确,计数器加一,以便接收下一位
else i=0; //如果不正确,就清除计数器,接收从0开始
break;
case 2: //如果当前计数器为第三个字节
if(INBUF[i]==0) //第三个字节固定为0
i++; //判断正确,计数器加一,以便接收下一位
else i=0; //如果不正确,就清除计数器,接收从0开始
break;
case 3: //如果当前计数器为第四个字节
if(INBUF[i]==0) //第四个字节固定为0
i++; //判断正确,计数器加一,以便接收下一位
else i=0; //如果不正确,就清除计数器,接收从0开始
break;
case 4: //如果当前计数器为第五个字节
if(INBUF[i]==0xbb||INBUF[i]==0xdd||INBUF[i]==0xf0)//尾字节必须是修改老化车或者录像机以及波特率号中的任意一个
{
i=0; //数据已经满5个字节,清除计数器,重新开始计数
Read_Flag=1; //五个字节全正确,置读取标志为1
}
else i=0; //如果不正确,就清除计数器,接收从0开始
break;
}
}
/*******************************************************************
函数说明: 单片机串口接收中断
变量说明: 串口接收的数据暂存
*******************************************************************/
void serial () interrupt 4 using 3
{
if(RI) //有串口中断产生
{
RI = 0; //清除接收中断标志
INBUF[i]=SBUF; //将串口数据送入INBUF
Com_In_Judge(); //判断接收数据是否正确
}
}
请问VB 的mscomm接收有单片机串口那样的逐字节接收校验功能吗?
多谢ZDINGYUN的回复,不过这样是有问题的,因为单片机每次向PC机发送的是8字节数据,如果设置 Rthreshold 为 1 , InputLen 为 1 ,则每次只能收到8个字节中的第一个字节 展开
展开全部
RThreshold 属性
设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。
InputLen 属性
设置并返回 Input 属性从接收缓冲区读取的字符数
两属性都初始化设置为1
通过OnComm 事件由Input 属性返回并删除接收缓冲区中的数据流。InputLen 属性确定被 Input 属性读取的字符数。
补充:
单片机每次向PC机发送的是8字节数据
那就设置:
MsComm1.InputLen = 0
MsComm1.RThreshold = 1 或 MsComm1.RThreshold = 8
串口传递速度远远低于VB处理数据的速度.完整按协议判断接收并进行数据处理.
设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 MSComm 控件产生 OnComm 事件。
InputLen 属性
设置并返回 Input 属性从接收缓冲区读取的字符数
两属性都初始化设置为1
通过OnComm 事件由Input 属性返回并删除接收缓冲区中的数据流。InputLen 属性确定被 Input 属性读取的字符数。
补充:
单片机每次向PC机发送的是8字节数据
那就设置:
MsComm1.InputLen = 0
MsComm1.RThreshold = 1 或 MsComm1.RThreshold = 8
串口传递速度远远低于VB处理数据的速度.完整按协议判断接收并进行数据处理.
参考资料: MSDN
2010-05-31
展开全部
VB串口通信,有一套非常好的技术资料,600M多,你在淘宝搜索"太阳雨VB串口通信技术资料"就可以找到 ..
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询