|
发表于 2008-9-16 20:33:32
|
显示全部楼层
从古老的文件夹里抠了段出来
{*********************************
串口中断!! 按照
$FE xxx xxx xxx xxx $EF
的格式接收数据
***********************************}
procedure TForm1.MSComm1Comm(Sender: TObject);
var
SerialInput: Variant;
i: Integer;
InputLen: Integer;
begin
if MSComm1.CommEvent = 2 then
begin
InputLen := MSComm1.InBufferCount; //读入字节数计数
SerialInput := MSComm1.Input; //串口读入数据
for i := 0 to InputLen - 1 do
begin
if DataPtr = 0 then //如果还没有收到起始位
begin
if SerialInput = $FE then //判断是否是起始位
begin
Data[DataPtr] := SerialInput;
//把接收到的数据放入接收缓冲区
DataPtr := DataPtr + 1; //指针++
end
else
begin
DataPtr := 0; //如果不是起始位,则ptr=0,继续等待起始位
end;
end
else if DataPtr < 4 then //判断是否接收够6位
begin
Data[DataPtr] := SerialInput; //不够,继续把数据放入缓冲区
DataPtr := DataPtr + 1;
end
else if DataPtr = 4 then //如果收到6个数,
begin
if SerialInput = $EF then //判断是否是结束位
begin
Data[DataPtr] := SerialInput;
//是,则把结束位送入缓冲,执行后续操作
RecvCnt := RecvCnt + 1; //收到包计数++
saveToCar();
dispCar();
end
else
begin
DataPtr := 0; //不是结束位,则ptr=0,继续等待起始位
end;
end
else
begin
DataPtr := 0; //缓冲区已满,清除缓冲继续等待
end;
end;
end;
end; |
|