procedure A8051tran(Data:string); //以16进制形式下载
var
Len:integer; //数据长度
SendStr:string; //发送的数据
ChkSum:integer; //校验和
I:integer; //求校验和时的循环变量
begin
ChkSum:=0;
SendStr:=''; //清空传送字串
Len:=Length(Data);
SendStr:=chr($FA)+chr($FB)+chr($FD)+chr(Len)+Data;
for i:=1 to length(SendStr) do
chksum:=chksum+ord(sendstr[i]);
chksum:=chksum mod 256; //检查码
SendStr:=SendStr+chr(chksum); //CR
sleep(10);
F_Main.Comm1.WriteCommData(pchar(SendStr) ,length(SendStr));
Sleep(10);
end;上面使我的发送函数,比如Data为“?”时经过上面函数的处理,通过串口助手16进制接收
得到的 就是 FAFBFD013F32,现在我通过串口助手给计算机发送FAFBFB013F32,我需要根据
FAFBFB013F计算校验和,判定校验位是否正确,如果正确则说明发送中没有错误,因为现在的
数据是FAFBFB013F,而不是chr($FA)+chr($FB)+chr($FD)+chr(Len)+Data,不能在通过
for i:=1 to length(SendStr) do
chksum:=chksum+ord(sendstr[i]);
chksum:=chksum mod 256; //检查码
SendStr:=SendStr+chr(chksum); //CR
求校验和了
现在有2个问题
1:怎样求FAFBFD013F的校验和,校验和应该是32,该如何处理那,或者说 如何判断传来的数据是
正确的 ,通过何种方法?
2:怎样把3F变回发送?
var
Len:integer; //数据长度
SendStr:string; //发送的数据
ChkSum:integer; //校验和
I:integer; //求校验和时的循环变量
begin
ChkSum:=0;
SendStr:=''; //清空传送字串
Len:=Length(Data);
SendStr:=chr($FA)+chr($FB)+chr($FD)+chr(Len)+Data;
for i:=1 to length(SendStr) do
chksum:=chksum+ord(sendstr[i]);
chksum:=chksum mod 256; //检查码
SendStr:=SendStr+chr(chksum); //CR
sleep(10);
F_Main.Comm1.WriteCommData(pchar(SendStr) ,length(SendStr));
Sleep(10);
end;上面使我的发送函数,比如Data为“?”时经过上面函数的处理,通过串口助手16进制接收
得到的 就是 FAFBFD013F32,现在我通过串口助手给计算机发送FAFBFB013F32,我需要根据
FAFBFB013F计算校验和,判定校验位是否正确,如果正确则说明发送中没有错误,因为现在的
数据是FAFBFB013F,而不是chr($FA)+chr($FB)+chr($FD)+chr(Len)+Data,不能在通过
for i:=1 to length(SendStr) do
chksum:=chksum+ord(sendstr[i]);
chksum:=chksum mod 256; //检查码
SendStr:=SendStr+chr(chksum); //CR
求校验和了
现在有2个问题
1:怎样求FAFBFD013F的校验和,校验和应该是32,该如何处理那,或者说 如何判断传来的数据是
正确的 ,通过何种方法?
2:怎样把3F变回发送?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货