串口通讯

原创 2004年09月07日 17:22:00

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    rdCOM: TRadioGroup;
    Label1: TLabel;
    mSend: TMemo;
    Label2: TLabel;
    mReceive: TMemo;
    btnOpenPort: TButton;
    btnSend: TButton;
    btnEnd: TButton;
    Timer1: TTimer;
    procedure btnSendClick(Sender: TObject);
    procedure btnOpenPortClick(Sender: TObject);
    procedure btnEndClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure mSendKeyPress(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
    procedure OpenComm;  //打开通信端口
  end;

var
  Form1: TForm1;
  hComm: THandle;


implementation

{$R *.DFM}

procedure TForm1.btnSendClick(Sender: TObject);
var
  Temp:string;
  lrc:LongWord;
begin
  if (hComm=0) then exit;
  Temp:=msend.Text ;
  WriteFile(hComm,Pointer(Temp)^,Length(Temp), lrc, nil); //送出数据
end;

procedure TForm1.btnOpenPortClick(Sender: TObject);

begin
  //若通信端口已打开,则不需要再打开
  if (hComm<>0) then begin
    ShowMessage('通信端口已打开!不需再开!');
    exit;
  end;
  OpenComm;
end;

//以下是打开通信端口的程序
procedure TForm1.OpenComm;
var
  cc:TCOMMCONFIG;
  Temp:string;
begin
  Temp:='COM'+inttostr(rdcom.ItemIndex+1);                          //选择所要打开的COM
  hComm:=CreateFile(PChar(Temp), GENERIC_READ or GENERIC_WRITE,
       0, nil, OPEN_EXISTING, 0, 0);                   //打开COM
  if (hComm = INVALID_HANDLE_VALUE) then begin         //如果COM 未打开
    MessageBox (0, '打开通信端口错误!!','',MB_OK);
    exit;
  end;

  GetCommState(hComm,cc.dcb);                         // 得知目前COM 的状态
  cc.dcb.BaudRate:=CBR_9600;                          // 设置波特率为9600
  cc.dcb.ByteSize:=8;                                 // 字节为 8 bit
  cc.dcb.Parity:=NOPARITY;                            // Parity 为 None
  cc.dcb.StopBits:=ONESTOPBIT;                        // 1 个Stop bit

  if not SetCommState(hComm, cc.dcb) then begin       // 设置COM 的状态
    MessageBox (0, '通信端口设置错误!!!','',MB_OK);
    CloseHandle(hComm);
    exit;
  end;
end;

procedure TForm1.btnEndClick(Sender: TObject);
begin
   CloseHandle(hComm);//关闭通信端口
   close;//结束程序
end;


//定时器事件
procedure TForm1.Timer1Timer(Sender: TObject);
  var
  Temp : string;
  inbuff: array[0..2047] of Char;
  nBytesRead, dwError:LongWORD ;
  cs:TCOMSTAT;
  begin
   ClearCommError(hComm,dwError,@CS);  //取得状态
   if cs.cbInQue =0 then exit;
   if cs.cbInQue > sizeof(inbuff) then begin
     PurgeComm(hComm, PURGE_RXCLEAR);  // 清除COM 数据
     exit;
   end;
   ReadFile(hComm, inbuff,cs.cbInQue,nBytesRead,nil); // 接收COM 的数据
   Temp:=Copy(inbuff,1,cs.cbInQue);
   mReceive.Text :=mReceive.Text + Temp;   // 将数据显示于Memo1 上 
   mReceive.SetFocus ;
   mReceive.SelStart  :=Length(mReceive.Text);
   mReceive.SelLength :=0;//将Memo的显示位置移到最下端
  end;
//以下是处理按键动作
procedure TForm1.mSendKeyPress(Sender: TObject; var Key: Char);
begin
    if key=#13 then btnSendClick(Sender);
end;

end.

Vc 三种串口通讯方式

本文介绍了在Windows平台下串行通信的实现机制,讨论了根据不同的条件用Visual C++ 设计串行通信程序的三种方法,并结合实际,实现对温度数据的接收监控。 在实验室和工业应用中,串口是常...
  • zhengyanan815
  • zhengyanan815
  • 2016年12月16日 15:21
  • 484

python 串口通讯编程

python的串口网上有很多例子,这里了只是把认为好的整理到一起。 首先,应该安装serial模块,还能开始后续的操作。我用的python2.6,serial模块可以在这里下载安装serial模块下...
  • u013634862
  • u013634862
  • 2015年04月07日 16:28
  • 1564

异步串口 I/O操作 中遇到的一个问题及解决

思路是这样,用CreateFile打开一个串口,然后ReadFile 从串口读取数据, 希望在读取数据后返回,或者如果没有数据读入的话必须在5000毫秒内返回. API 调用顺序如下: 1。Creat...
  • yinyuanqings
  • yinyuanqings
  • 2010年11月22日 15:01
  • 359

串口通讯

RS232 RS-232采取不平衡传输方式,即所谓单端通讯.收、发端的数据信号是相对于信号地,如从DTE设备发出的数据在使用DB25连接器时是2脚相对7脚(信号地)的电平。典型的RS-232信号在正负...
  • michael_wan
  • michael_wan
  • 2006年09月02日 00:26
  • 1011

串口通讯系列-串口通讯实现

/*====================================================== //使用到的控件有: //Panel 分组框 容器 //GroupBox 组合框 容...
  • yxllb
  • yxllb
  • 2018年02月01日 21:37
  • 59

Java串口通讯

Java串口通讯     串行通讯协议有很多种,像RS232,RS485,RS422,甚至现今流行的USB等都是串行通讯协议。而串行通讯技术的应用无处不在。可能大家见的最多就是电脑的串口与Modem的...
  • adderllyer
  • adderllyer
  • 2007年05月13日 21:45
  • 2584

串行通讯的根本原理及用MFC实现串口通讯编程(转载)

在Windows运用程序的开发中,我们常常须要面临与外围数据源设备通讯的问题。打算机和单片机(如MCS-51)都具有串行通讯口,可以设计相应的串口通讯程序,完成二者之间的数据通讯义务。   实际工作中...
  • shenya1314
  • shenya1314
  • 2017年02月28日 15:10
  • 329

串口通信-MSComm控件使用详解

MSComm 控件通过串行端口传输和接收数据,为应用程序提供串行通讯功能。MSComm控件在串口编程时非常方便,程序员不必去花时间去了解较为复杂的API函数,而且在VC、VB、Delphi等语言中均可...
  • h_kingone
  • h_kingone
  • 2016年12月12日 21:33
  • 293

python串口通信

首先,应该安装serial模块,还能开始后续的操作。我用的python2.6,serial模块可以在这里下载安装serial模块下载...
  • yangbingzhou
  • yangbingzhou
  • 2014年10月21日 22:36
  • 9104

【转载】WIN32 API串口通讯实例教程

第一节   实现串口通讯的函数及串口编程简介   API函数不仅提供了打开和读写通讯端口的操作方法,还提供了名目繁多的函数以支持对串行通讯的各种操作。常用函数及作用下: 函数名            ...
  • xuexiiphone
  • xuexiiphone
  • 2016年04月26日 18:12
  • 2132
收藏助手
不良信息举报
您举报文章:串口通讯
举报原因:
原因补充:

(最多只允许输入30个字)