×
嵌入式 > 嵌入式开发 > 详情

delphi与51单片机串行通信

发布时间:2020-10-21 发布时间:
|
说明:可能前面几次首发不太准确

//delphi源码

unit Unit1;

interface

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

type
TFCOMM = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Memo1: TMemo;
Comm1: TComm;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FCOMM: TFCOMM;
viewstring:string;
i:integer;
rbuf,sbuf:array[1..9] of byte;

implementation

{$R *.dfm}

procedure TFCOMM.FormShow(Sender: TObject);
begin
comm1.startcomm;
end;

procedure TFCOMM.FormClose(Sender: TObject; var Action: TCloseAction);
begin
comm1.stopcomm;
end;
//自定义发送数据过程

procedure senddata;
var
i:integer;
commflg:boolean;
begin
viewstring:= ;
commflg:=true;
for i:=1 to 9 do
begin
if not fcomm.comm1.writecommdata(@sbuf[i],1) then
begin
commflg:=false;
break;
end;
//发送时字节间的延时
sleep(2);
viewstring:=viewstring+inttohex(sbuf[i],1)+ ;
end;
viewstring:=发送+viewstring;
fcomm.memo1.lines.add(viewstring);
fcomm.memo1.lines.add( );
if not commflg then
messagedlg(发送失败! ,mterror,[mbyes],0);
end;

procedure TFCOMM.Button1Click(Sender: TObject);
begin
sbuf[1]:=byte($95); //帧头
sbuf[2]:=byte($10); //命令号
sbuf[3]:=byte($20);
sbuf[4]:=byte($25);
sbuf[5]:=byte($95); //帧头
sbuf[6]:=byte($10); //命令号
sbuf[7]:=byte($20);
sbuf[8]:=byte($25);
sbuf[9]:=byte($25);
senddata;
end;

procedure TFCOMM.Button2Click(Sender: TObject);
begin
memo1.clear;
end;

procedure TFCOMM.Button3Click(Sender: TObject);
begin
close;
end;

procedure TFCOMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
i:integer;
begin
viewstring:=;
move(buffer^,rbuf,bufferlength);
for i:=1 to bufferlength do
viewstring:=viewstring+ inttohex(rbuf[i],2)+ ;
viewstring:=接收+ viewstring;
memo1.lines.add(viewstring);
memo1.lines.add();
end;
end.

//单片机源码

#include

void send(b)
{

SBUF=b;
while(TI==0);
TI=0;

}

void main()
{
int i=0,k;
unsigned int a[9];
TMOD=0x20;
TL1=0xfd;
TH1=0xfd;
SCON=0xd8;
PCON=0x00;
TR1=1;
while(1)
{ if(i>8)break;
while(RI==0);
RI=0;
a[i]=SBUF;
//for(k=0;k<200;k++);
i++;
}
for(i=0;i<9;i++)
{
send(a[i]);
//for(k=0;k<10000;k++);
}
}



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
探讨CAN总线的抗干扰能力