最近用delphi写了个串口程序,与51单片机进行通信,但是不能收发数据,不知道为什么,跪求。。。 10

以下是源程序代码,本人是初学者,请高手指教:unitUnit1;interfaceusesWindows,Messages,SysUtils,Variants,Class... 以下是源程序代码,本人是初学者,请高手指教:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SPComm;

type
TForm1 = class(TForm)
comm1: TComm;
memo1: TMemo;
Button1: TButton;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
private
{ Private declarations }
public
{ Public declarations }
end;

var Form1: TForm1;
implementation
{$R *.dfm}
var
fcomm: TForm1;
viewstring:string;
rbuf,sbuf:array[1..16] of byte;

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
viewstring:='';
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 senddata;
var
i:integer;
commflg:boolean;
begin
viewstring:='';
commflg:=true;
for i:=1 to 6 do
begin
if not fcomm.comm1.writecommdata(@sbuf[i],1) then
begin
commflg:=false;
break;
end;

//发送时字节间的延时
sleep(2);
viewstring:=viewstring+inttohex(sbuf[i],2)+''; //改了
end;
viewstring:='发送'+viewstring;
fcomm.memo1.lines.add(viewstring);
fcomm.memo1.lines.add('');
if not commflg then messagedlg('发送失败!',mterror,[mbyes],0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
sbuf[1]:=byte($f0);//帧头
sbuf[2]:=byte($01);//命令号
sbuf[3]:=byte($ff);
sbuf[4]:=byte($ff);
sbuf[5]:=byte($01);
sbuf[6]:=byte($f0);//帧尾
senddata;//调用发送函数
end;

end.
展开
 我来答
a_zhu13
2013-04-05 · TA获得超过393个赞
知道小有建树答主
回答量:115
采纳率:100%
帮助的人:97.3万
展开全部
一般先用调试助手调试成功后再写程序。用Docklight比较不错,功能全。
串口不通讯,一般为:
1. 串口参数是否正确。
2. 有无CTS, DTR信号使用,如果有,需要在串口参数里使能之。
3. 从51向上位机发送,看底层的串口是否配置OK。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sirouszlh
2013-04-05 · TA获得超过1651个赞
知道小有建树答主
回答量:1038
采纳率:100%
帮助的人:648万
展开全部
var
CHData: array[0..1023] of char
len:integer;

发送 TermComm.WriteCommData(CHData, len);

接收
Move(Buffer^, CHData, BufferLength);

另外 需要配置好 数据长度 停止位 校验位等参数
我个人是还设置 spcomm的 inbuffersize 为 1024
inputlen 也为1024
更多追问追答
追问
你好,怎么设置  spcomm的 inbuffersize  为 1024
inputlen 也为1024,本人是初学者,请具体的讲解麻烦您具体的讲解一下!
追答

左边不是有属性可以设置的嘛

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式