请教 单片机向上位机PC发送带有CRC校验位的数据,PC这边的接收程序应该怎样接收并且进行对比呢?

move1016 2009-01-14 02:58:54
请教 单片机向上位机PC发送带有CRC校验位的数据,PC这边的接收程序应该怎样接收并且进行对比呢?

接收端应该把除了校验位的其他数据提出来再做一次CRC校验,然后把结果同校验位的数据进行对比,如果一致就说明数据没有丢失。。。

请教 有这方面的列子吗?我想学习一下。。。
...全文
225 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zdingyun 2009-01-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zdingyun 的回复:]
LZ:你第二次发问此CRC校验的问题,单片机与上位机一般是串口通信,是用MSCOMM控件实现通信。设置上位机按2进制接收,一般CRC校验2字节挂在数据后。

VB code
Option Explicit
Dim strData As String

Private Sub MsComm1_OnComm()
Dim inByte() As Byte
Dim i As Integer
Select Case MsComm1.CommEvent
Case comEvReceive
inByte = MsComm1.Input
For i = 0 To UBound(…
[/Quote]
LZ:将接收2进制字节流转换成的16进制字符串,依据通信协议做数据校验和处理。
此时应将16进制字符串再转换为BYTE字节数组,取出作CRC校验的字节求出CRC校验字节与接收的CRC校验字节比对。符合就进入数据处理。
具体代码须按通信协议规定来写。
zdingyun 2009-01-14
  • 打赏
  • 举报
回复
LZ:你第二次发问此CRC校验的问题,单片机与上位机一般是串口通信,是用MSCOMM控件实现通信。设置上位机按2进制接收,一般CRC校验2字节挂在数据后。

Option Explicit
Dim strData As String

Private Sub MsComm1_OnComm()
Dim inByte() As Byte
Dim i As Integer
Select Case MsComm1.CommEvent
Case comEvReceive
inByte = MsComm1.Input
For i = 0 To UBound(inByte)
If Len(Hex(inByte(i))) = 1 Then
strData = strData & "0" & Hex(inByte(i))
Else
strData = strData & Hex(inByte(i))
End If
Next
Text1.Text = strData
'以下写符合通信协议规定的判断代码处理接收数据及CRC校验,CRC校验函数参阅我回复你另一贴的。
End Select
End Sub

Private Sub Form_Load()
With MsComm1
.CommPort = 1
.Settings = "9600,n,8,1"
.InBufferCount = 0
.InputLen = 0
.RThreshold = 1
.InputMode = comInputModeBinary '以2进制接收
.PortOpen = True
End With
Text1 = ""
End Sub

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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