串口通信时,需要发校验字节,校验和是最为简单的,就是在发送一帧数据时,把发送的多字节数据相加得到和,但只保留8位,作为一个字节的校验和再发送出去。接收一方在接收到数据后,也按相同的方法求和,也得一个校验和,就与接收的校验和比较,如果相同,接收不是正常的,反之,接收就是错误的。不作处理。
而CRC校验比较麻烦点,方法与校验和相似,但是要对发送的多个字节的数据进行CRC计算,结果可以是8位的,也可是16位的。这CRC计算是一个标准算法,网上可以查到,并有CRC计算的程序。
直接发送这个16位数据和其和就可以了,也就是发送3个字节。接收到和同样求一下和看是否一致就行。例如:
senddat()
{
dat[2]=dat[0]+dat[1];
i=0;
while(i<3)
{
SBUF=dat[i];
while(!TI);
TI=0;
i++;
}
}
char recive()
{
i=0;
while(i<3)
{
if(RI)
{
RI=0;
dat[i]=SBUF;
}
}
if(dat[2]==dat[0]+dat[1])return(1);
else return(0);
}
#include<iostream>
using namespace std;
int main()
{
ifstream fin("ptxt");
int i;
while (fin>>i)cout<<i<<' ';
cout<<endl;
system("pause");
return 0;
}
输入文件:qtxt
输出在屏幕上
以上就是关于串口通讯CRC校验和求和校验怎么用全部的内容,包括:串口通讯CRC校验和求和校验怎么用、我要51单片机串口发送16位的数据,谁能给我个最方便的校验代码例如CRC什么的…谢谢!、用C++,串口接收到的数据怎样提取并进行累加和校验呢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)