关于串口读写的处理,spcomm控件
现在
procedure Tmainform.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i:integer;
returnstr:string;
rbuffer:array[0..Maxsize] of byte;
begin
bufferdatalen:=bufferlength;
if bufferlength<>2 then
begin
move(buffer^,(@rbuffer)^,bufferlength);
hand[0]:=rbuffer[0];
for i:=0 to bufferlength-1 do
begin
inbuffer[i]:=rbuffer[i];
end;
end;
application.ProcessMessages;
end;
===========
function TMainform.rd(chip,AddrHigh,AddrLow,dataLenHigh,dataLenLow:byte):byte;
var
i:integer;
Tbuf:array [0..10] of byte;
checksum:byte;
datalen:word;
begin
hfok:=$55;
bufferdatalen:=0;
DataLen:=DataLenHigh*256+DataLenLow;
Tbuf[0]:=$01;
Tbuf[1]:=$00;
Tbuf[2]:=$ff;
Tbuf[3]:=$01;
Tbuf[4]:=chip;
Tbuf[5]:=AddrHigh;
Tbuf[6]:=AddrLow;
Tbuf[7]:=dataLenHigh;
Tbuf[8]:=dataLenLow;
Tbuf[9]:=Tbuf[0];
for i:=1 to 8 do Tbuf[9]:=Tbuf[9] xor Tbuf[i];
comm1.WriteCommData(pchar(@Tbuf),10);
timedelay(2000,datalen+4);
if bufferdatalen>=datalen+4 then
begin
checksum:=0;
for i:=0 to datalen+3 do
begin
checksum:=checksum xor inbuffer[i];
end;
for i:=3 to datalen+3 do pt[i-3]:=inBuffer[i];
if checksum=0 then
hfok:=$99
else
hfok:=$44;
end;
result:=hfok;
end;
Function TMainform.wr(chip,AddrHigh,AddrLow,dataLenHigh,dataLenLow:byte):byte;
var
i:integer;
buffer:array [0..MaxSize] of byte;
//buffer:array [0..2048] of byte;
datalen:word;
begin
hfok:=$55;
bufferdatalen:=0;
DataLen:=DataLenHigh*256+DataLenLow;
buffer[0]:=$01;
buffer[1]:=$00;
buffer[2]:=$ff;
buffer[3]:=$00;
buffer[4]:=chip;
buffer[5]:=AddrHigh;
buffer[6]:=AddrLow;
buffer[7]:=dataLenHigh;
buffer[8]:=dataLenLow;
for i:=0 to datalen-1 do
begin
buffer[9+i]:=pt[i];
end;
buffer[9+datalen]:=$00;
for i:=0 to datalen+8 do // to datalen+11-1
begin
buffer[datalen+9]:=buffer[datalen+9] xor buffer[i];
end;
comm1.WriteCommData(pchar(@buffer),datalen+10);
timedelay(2000,1);
if bufferdatalen>0 then
if (inbuffer[0]=$99) then
hfok:=$99
else
hfok:=$44;
result:=hfok;
end;