×
单片机 > 单片机程序设计 > 详情

delphi与51单片机串行通信

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

//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++);
   }
   

关键字:delphi  51单片机  串行通信

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

热门文章 更多
单片机中高阻态的实质及意义