
帮忙看下delphi7 spcomm控件
电脑接受从单片机发送的数据,程序如下,上位机接受不到数据,求高人给看下哪出错了,unitUnit1;interfaceusesWindows,Messages,SysUt...
电脑接受从单片机发送的数据,程序如下,上位机接受不到数据,求高人给看下哪出错了,
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SPComm;
type
TForm1 = class(TForm)
Comm1: TComm;
Memo1: TMemo;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
procedure Comm1ModemStateChange(Sender: TObject; ModemEvent: Cardinal);
procedure Memo1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
viewstring: string;
i: integer;
rbuf:array[1..16] of byte;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
begin
comm1.StartComm;
end;
//打开串口
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm1.StopComm;
end;
//关闭串口
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i: integer;
begin
move(buffer^, pchar(@rbuf)^, bufferlength);
for i:= 1 to bufferlength do
viewstring := viewstring + inttohex(rbuf[i], 2) + '';
viewstring := '接受' + viewstring;
memo1.Lines.Add(viewstring);
memo1.Lines.Add('');
end;
procedure TForm1.Comm1ModemStateChange(Sender: TObject;
ModemEvent: Cardinal);
begin
end;
procedure TForm1.Memo1Change(Sender: TObject);
begin
end;
end. 展开
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SPComm;
type
TForm1 = class(TForm)
Comm1: TComm;
Memo1: TMemo;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
procedure Comm1ModemStateChange(Sender: TObject; ModemEvent: Cardinal);
procedure Memo1Change(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
viewstring: string;
i: integer;
rbuf:array[1..16] of byte;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
begin
comm1.StartComm;
end;
//打开串口
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm1.StopComm;
end;
//关闭串口
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i: integer;
begin
move(buffer^, pchar(@rbuf)^, bufferlength);
for i:= 1 to bufferlength do
viewstring := viewstring + inttohex(rbuf[i], 2) + '';
viewstring := '接受' + viewstring;
memo1.Lines.Add(viewstring);
memo1.Lines.Add('');
end;
procedure TForm1.Comm1ModemStateChange(Sender: TObject;
ModemEvent: Cardinal);
begin
end;
procedure TForm1.Memo1Change(Sender: TObject);
begin
end;
end. 展开
2个回答
展开全部
procedure TForm1.FormShow(Sender: TObject);
begin
comm1.onReceiveData:=Comm1ReceiveData; //关键句
comm1.stopcomm;
try
comm1.StartComm;
except
comm1.stopcomm;
//.....
end;
end;
更多追问追答
追问
try前边为啥要来一遍comm1.stopcomm
追答
防止重复打开串口导致的出错。

2023-06-12 广告
STM32F103R8T6是ST旗下的一款常用的增强型系列微控制器,是一款基于ARM Cortex-M内核的微控制器。STM32F103R8T6主要面向消费类电子产品、工业控制、医疗仪器、汽车电子等领域,可用于开发各种类型的应用。STM32...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询