delphi怎么编写串口程序〉? 答对送分!20分

962veiri 2001-10-29 11:14:01
我现在要实现用delphi从串口取得数据,怎么做?
能给一个源程序嘛?
...全文
151 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenzm 2001-10-30
  • 打赏
  • 举报
回复
my email:wenzm@sina.com
Thank u !!!
yanguozhu 2001-10-29
  • 打赏
  • 举报
回复
delphi资源大全里有介绍!
Bob7946 2001-10-29
  • 打赏
  • 举报
回复
算了,太累了,你的邮箱是什末,我发给你!
Bob7946 2001-10-29
  • 打赏
  • 举报
回复
(接上面)
procedure Tform1.comminitialize;
//串行口初始化
var
lpdcb:Tdcb;
Begin
hcom:=createfile('com2',generic_read or generic_write,0,nil,open_exist
ing,
 file_attribute_normal or file_flag_overlapped,0);//打开串行口
cobi 2001-10-29
  • 打赏
  • 举报
回复
关注
Bob7946 2001-10-29
  • 打赏
  • 举报
回复
CSDN有bug,怎么总是说回复不能为空?
Bob7946 2001-10-29
  • 打赏
  • 举报
回复
程序:
unit comdemou;
interface
uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialo
gs;
const
Wm_commNotify=Wm_User+12;
type
 TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
 private
Procedure comminitialize;
Procedure MsgcommProcess(Var Message:Tmessage); Message Wm_commnotify;
{ Private declarations }
 public
{ Public declarations }
 end;
 //线程声明
 TComm=Class(TThread)
 protected
procedure Execute;override;
 end;
var
 Form1: TForm1;
 hcom,Post_Event:Thandle;
 lpol:Poverlapped;
implementation
{$R *.DFM}
Procedure TComm.Execute;
//线程执行过程
var
dwEvtMask:Dword;
Wait:Boolean;
Begin
fillchar(lpol,sizeof(toverlapped),0);
While True do Begin
 dwEvtMask:=0;
 Wait:=WaitCommEvent(hcom,dwevtmask,lpol);
 //等待串行口事件;
 if Wait Then Begin
waitforsingleobject(post_event,infinite);  //等待同步事件置位;
resetevent(post_event);
//同步事件复位;
PostMessage(Form1.Handle,WM_COMMNOTIFY,0,0);//发送消息;
end;
 end;
end;
Bob7946 2001-10-29
  • 打赏
  • 举报
回复
给你点资料:

基于Windows 95/NT的串行通信机制
Windows操作系统禁止应用程序直接访问计算机硬件,但它为程序员提供了一系列标
准API函数,使得应用程序的编制更加方便,并且免除了对有关硬件调试的麻烦。在Windo
ws 95/NT中,原来Windows 3.X的WM_COMMNOTIFY消息已被取消,操作系统为每个通信设备
开辟了用户可定义大小的读/写缓冲区,数据进出通信口均由操作系统后台完成,应用程序
只需对读/写缓冲区操作即可。Windows 95/NT中几个常用的串行通信操作函数如下:
@@0474300.JPG;表1@@
除上述几个函数外,还要经常用到一个重要的记录DCB(设备控制块)。DCB中记录有可
定义的串行口参数,设置串行口参数时必须先用GetCommState函数将系统默认值填入DCB
控制块,然后才可设定用户想改变的自定义值。
在Windows 95/NT中实现串行通信除了要了解基本的通信操作函数外,还要掌握多线
程编程。线程是进程内部执行的路径,是操作系统分配CPU时间的基本实体,每个进程都由
单线程开始完成应用程序的执行。串行通信需要利用多线程技术实现,其主要的处理逻辑
可以表述如下:进程一开始先由主线程做一些必要的初始化工作,然后主线程根据需要在
适当时候建立线程监视通信口,当指定的串行口事件发生时,向主线程发送WM_COMMNO
FY消息(由于Windows 95取消了WM_COMMNOTIFY消息,因此程序员必须自己创建),主线程
对其进行处理。若不需要WM_COMMNOTIFY消息,则主线程终止通信监视线程。
多线程同时执行可能会引起对共享资源的冲突,为避免冲突,需要用同步多线程对共
享资源进行访问。Windows 95提供了许多保持线程同步的方法,笔者采用创建事件对象来
保持线程同步。通过CreateEvent()创建事件对象,使用SetEvent()或PulseEvent()函数
将事件对象设置成信号同步。在应用程序中,利用WaitSingleObject()函数等待同步的触
发,等到指定的事件被其它线程设置为有信号时,才继续向下执行程序。
Delphi下的具体实现方法
Delphi的强大功能和支持多线程的面向对象编程技术,使得实现串行通信非常简单方
便。它通过调用外部的API函数来实现,主要步骤如下。
1. 利用CreateFile函数打开串行口,以确定本应用程序对此串行口的占有权,并封锁
其它应用程序对此串口的操作;
2. 通过GetCommState函数填充设备控制块DCB,再通过调用SetCommState函数配置串
行口的波特率、数据位、校验位和停止位;
3. 创建串行口监视线程监视串行口事件,在此基础上就可以在相应的串口上操作数
据的传输;
4. 用CloseHandle函数关闭串行口(具体的程序如下)。本程序用Delphi3.0编写,在
Windows 95环境下调试通过,已投入实际应用中,供广大读者参考。
962veiri 2001-10-29
  • 打赏
  • 举报
回复
wenzm(喜欢拉磨的驴子) 
you email?
962veiri 2001-10-29
  • 打赏
  • 举报
回复
Bob7946(X度空间) :
已经给你了,谢谢!!我现在去看看

wenzm(喜欢拉磨的驴子) :
没问题,不过我的网络速度很慢,不知道能不能发过去,
Bob7946 2001-10-29
  • 打赏
  • 举报
回复
to 962veiri(风尘旅人):发过去了,是txt格式的。给分?
wenzm 2001-10-29
  • 打赏
  • 举报
回复
to 962veiri:Plase Mail it to me if u recept,ok!?
962veiri 2001-10-29
  • 打赏
  • 举报
回复
我的邮箱 962veiri@sina.com.cn 谢谢
962veiri 2001-10-29
  • 打赏
  • 举报
回复
Bob7946(X度空间) 

能不能在详细一点??? 谢谢

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧