SPCOMM通讯奇怪的问题!!!!(100分)

  • 主题发起人 主题发起人 mylovegirl
  • 开始时间 开始时间
M

mylovegirl

Unregistered / Unconfirmed
GUEST, unregistred user!
我用SPCOMM接收数据,单片机一直发送数据,为什么程序会崩溃?
一直不显示接收到的数据,一会儿就崩溃了,我估计是缓冲区被破坏了,我该怎么做才能正常工作?
 
代码贴出来
 
procedure TMainFrm.SpcommReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
Str:string;
rbuf:array[1..16] of byte;
crc,i:integer;
begin
Str:='';
move(buffer^,Pchar(@rbuf)^,bufferlength);

crc := 0; // CRC初始值
for i:=1 to bufferlength-1 do
crc := CalCRC8(rbuf,crc,$8C); // 按位计算CRC

if rbuf[bufferlength]<>crc then
begin
SendParameter:=false;
SendBill:=false;
TxDTimer.enabled:=false;
Application.MessageBox('传输数据错误','错误',MB_ICONError+MB_OK);
exit;
end;

if rbuf[1]=$A0 then
begin
TxDTimer.Enabled:=false;
ClockBtn.Enabled:=true;
Application.MessageBox('时钟校正完毕','提示',MB_ICONInformation+MB_OK);
SendClock:=false;
end;

if rbuf[1]=$A1 then
begin
TxDTimer.Enabled:=false;
ParameterBtn.enabled:=true;
Application.MessageBox('系统参数设置完毕','提示',MB_ICONInformation+MB_OK);
SendParameter:=false;
end;

if rbuf[1]=$C0 then
BillSendData();

if rbuf[1]=$C1 then
begin
TxDTimer.Enabled:=false;
Application.MessageBox('票据参数设置完毕','提示',MB_ICONInformation+MB_OK);
SendBill:=false;
BillBtn.Enabled:=true;
end;
end;
 
if bufferlength<=16 then
move(buffer^,Pchar(@rbuf)^,bufferlength);

 
bufferlength 不等于 16 的情况
 
后退
顶部