看几行程序,得100分哪!(SPCOMM的最简单程序)快!快!快!(100分)

  • 主题发起人 主题发起人 qiuqiu
  • 开始时间 开始时间
Q

qiuqiu

Unregistered / Unconfirmed
GUEST, unregistred user!
我用以下完整程序从串口接收数据(从单片机发出:2400波特,1位STOP,8位数据位,无校验)却根本收不到数据,EDIT1能显示OK,即COM1可以打开;EDIT2却无法显示YES,即根本无RECEIVEDATA事件,再接着就是死机,只有重启动,请各位大虾帮忙调试,看看问题究竟出在哪里。(硬件绝对正确,因为我用汇编调试过,可以收到数据)
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Comm1: TComm;
Memo1: TMemo;
Edit1: TEdit;
Edit2: TEdit;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
try
comm1.StopComm;
Comm1.startcomm;//创建窗体时,将comm1控件打开。
//Sendtimer.Enabled :=true;
edit1.Text:='ok';
except
showmessage('wrong');
end;


end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm1.StopComm;
end;

procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);

var
viewstring:string;
i:integer;
receivebuffer:array [0..200] of char;
begin

edit2.Text:='yes';
Move(Buffer^,pchar(@ReceiveBuffer)^, 20);
viewstring:='';
for i:=0 to 19 do
viewstring:=viewstring+inttohex(strtoint(ReceiveBuffer),2)+' ';
viewstring:='接收'+viewstring;
Memo1.Lines.Add(viewstring);
Memo1.Lines.Add('');
Memo1.Invalidate;
end;

end.
 
-)2400波特,1位STOP,8位数据位,无校验
在软件中设置了吗?
再试试下面的程序
procedure TMainForm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
Var
Get_Str : String ;
begin
Get_Str := StrPas( PChar(Buffer) );
Edit2.Text := Get_Str ;
end;
 
还是不行,各位高手救救我吧!
不然的话,我要被炒了!求求你了!
 
关注!!!
 
不会吧
两边的设置肯定一样吗?
 
我用示波器测得有波形,两边设置也一样,就是收不到,!!!!!!!
 

试试下面

procedure TMainForm.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
Var
p: pChar;
InBuf: String;
i: word;
begin
InBuf := '';
p := Buffer;
for i:=1 to BufferSize do begin
InBuf := InBuf + p^;
inc(p);
end;
Edit2.Text := InBuf ;
end;
 
谁能给我发个SPCOMM控件,我快急死了!!!万分感谢!
whqiu24@163.net
 
为什么大家不多帮一下我???
我已经困了2个月了,我快绝望了!!!!
 
换台计算机试一下
 
RThresHold=1即可
 
多调试一下,我用spcomm才作了一个与单片机通讯的程序,没问题
你可以用串口精灵或其他软件检测一下串口接收的数据,数据格式
一定要一致,我发了一个spcomm给你。
 
我刚才用你的程序和我的一个现成的 spcomm程序通讯,老是出现异常。
后来发现是
for i:=0 to 19 do
viewstring:=viewstring+inttohex(strtoint(ReceiveBuffer),2)+' ';
引起的。i在你这是一个‘死’的。实际上应该是‘活’值。
我着有现成的程序,如你需要,给我Email .
 
能给我发一个么?
也是一个困惑的人!!!
不胜感激!
distillbn@263.net
 
接受答案了.
 
后退
顶部