DELPHI写的上位机程序

zyp12345 2006-11-25 02:04:50
谁给我看看,我向单片机发送数据,然后单片机在给我发回来,问什么我收不到,怎么知道数据是否发给了单片机,单片机上的程序是正确的我用串口助手已经调试过了.谢谢
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SPComm;

type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
ComboBox1: TComboBox;
Label1: TLabel;
Button6: TButton;
Comm1: TComm;
Edit1: TEdit;
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Comm1ReceiveData(Sender: TObject;Buffer:pointer;BufferLength:Word);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;


implementation

{$R *.dfm}

procedure TForm1.Comm1ReceiveData(Sender: TObject;Buffer:pointer;BufferLength:Word);
var
data:string;
begin //接收数据
SetLength(data,BufferLength);
move(Buffer^,pchar(data)^,Bufferlength);
Memo1.lines.Add(data);
Memo1.Invalidate;

end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Form1.Close;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
comm1.StopComm ;
button1.Enabled:=true ;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
try
//comm1.CommName:='com'+inttostr(combobox1.ItemIndex); //选择端口号
comm1.CommName=com1;
comm1.BaudRate:=9600;
comm1.StartComm;
button1.Enabled:=false;
button2.Enabled:=true;
button3.Enabled:=true;
button4.Enabled:=true;
button5.Enabled:=true;
except
ShowMessage('打开串口错误!');
end;
end;

procedure TForm1.Button4Click(Sender: TObject);
var
str:string;
begin //发送数据
str:= Edit1.Text;
form1.comm1.writecommdata(pchar(str),length(str));
end;
end.
...全文
351 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hermit 2006-11-30
  • 打赏
  • 举报
回复
嗯,用TurboPower的吧,还是不错,稳定可靠。
zzjzln 2006-11-30
  • 打赏
  • 举报
回复
TComm??自己定制的组件?
是否使用了多线程、异步读写串口(waitforObject)?可能是你的读超时设置的不合理。

检查读超时设置。
pcf00 2006-11-29
  • 打赏
  • 举报
回复
你用的是SPComm控件吧,以前我用过,在接收速度上好像有问题;建议用MSCOM控件吧,比较好使。在DELPHI里我作的波特率是115200
springnet 2006-11-28
  • 打赏
  • 举报
回复
我是用VB做的没有你先进啊!
flowercity 2006-11-28
  • 打赏
  • 举报
回复
你串口控件的自动接受属性没设置
所以收不到
请设置为true
lbing7 2006-11-27
  • 打赏
  • 举报
回复
procedure TForm1.Comm1ReceiveData(Sender: TObject;Buffer:pointer;BufferLength:Word);
var
data:string;
begin //接收数据
SetLength(data,BufferLength);
move(Buffer^,pchar(data)^,Bufferlength);
Memo1.lines.Add(data);
Memo1.Invalidate;

end;
我不知道DELPHI的机制哈,我同事在用VC开发的时候,接收串口的消息是用一个定时器来不停地扫串口缓冲区,不知道DELPHI是不是这样,感觉WIN的机制应该差不多吧.
icesnows 2006-11-26
  • 打赏
  • 举报
回复
这个代码不熟悉

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧