[/img] 2004-5-7 8:31:00 yangguofa 来自:黑马王子 等级:业余侠客 文章:360 积分:27114 注册:2004年5月5日 第 2 楼 QQ SPCOMM的使用 下面是一个利用 SPCOMM控件的串口通信的例子。 以实现 PC机与单片机 8051之间的通信为例,首先要调通它们之间的握手信号。假定它们之间的通信协议是: PC到 8051一帧数据 6个字节, 8051到 PC一帧数据也为 6个字节。当 PC发出( F0,01,FF,FF,01,F0)后 8051能收到一帧( F0,01,FF,FF,01,F0),表示数据通信握手成功,两者之间就可以按照协议相互传输数据。 创建一个新的工程 COMM.DPR,把窗体的 NAME属性定为 FCOMM,把窗体的标题定义为测试通信,添加相应的控件。 1.设定 COMM1属性: ●波特率: 4800; ●奇偶校验位:无; ●字节长度: 8; ●停止位: 1; ●串口: COM1。 Memo1中将显示发送和接收的数据。将新的窗体存储为 Comm.pas。 2.编写源代码 //变量说明 var fcomm: TFCOMM; viewstring:string; i:integer; rbuf,sbuf:array[16] of byte; //打开串口 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 6 do begin if not fcomm.comm1.writecommdata(@sbuf,1) then begin commflg:=false; break; end; //发送时字节间的延时 sleep(2); viewstring:=viewstring+ inttohex(sbuf,2)+‘’ ; end; viewstring:=‘发送’+ viewstring; fcomm.memo1.lines.add(viewstring); fcomm.memo1.lines.add(‘’ ); if not commflg then messagedlg(‘发送失败 !’ ,mterror,[mbyes],0); end; //发送按钮的点击事件 procedure TFCOMM.Btn_sendClick(Sender: TObject); begin sbuf[1]:=byte($ f0); //帧头 sbuf[2]:=byte($ 01); //命令号 sbuf[3]:=byte($ ff); sbuf[4]:=byte($ ff); sbuf[5]:=byte($ 01); sbuf[6]:=byte($ f0); //帧尾 senddata;//调用发送函数 end; //接收过程 procedure TFCOMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;BufferLength: Word); var i:integer; begin viewstring:=‘’ ; move(buffer^,pchar(@rbuf^),bufferlength); for i:=1 to bufferlength do viewstring:=viewstring+ inttohex(rbuf,2)+‘’ ; viewstring:=‘接收’+ viewstring; memo1.lines.add(viewstring); memo1.lines.add(‘’ ); end;
Delphi 中TMsComm控件使用指南
作者:不详 来源:code173.com收集整理 发布时间:2005-9-3 0:15:07 发布人:admin 减小字体
增大字体
颜色 Delphi 中TMsComm控件使用指南
? 注册TMsComm控件
1.将Mscomm.srg, Mscomm32.ocx,Mscomm32.dep三个文件复制到系统文件夹中C:\\winnt\\system32\\。
2.用Windows下的注册工具regsvr32注册该OCX控件,点击“开始”->\运行\,再在中填入(假设操作安装在C盘,WIN2000):
Regsvr32 C:\\winnt\\system32\\Mscomm32.ocx
3.在注册表中手工新建一个主键项:先在点击“开始”->\运行\,再在中填入regedit命令打开注册表,找到HKEY_CLASSES_ROOT\\Licenses,在其中添加主键
4250E830-6AC2-11cf-8ADB-00AA00C00905 并将内容设置为:
kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun
? 引入TMSComm控件
(1)进入Delphi 编程环境下,在菜单项中选中Component/Import ActiveX选项,出现ActiveX控件导入窗口;?
(2)在其中选中Microsoft Comm Control 6.0(Version 1.1),并按需要选定Palette pages、unit dir name、Search path值(一般取默认值),最后选择Install按钮进行安装。即可将MSComm控件引入到Delphi 中。? (3)在编程使用中,直接打开ActiveX控件,选取TMSComm控件,放在窗体上,设置其属性即可。其使用方法与Delphi其它控件相同.
? TMSComm控件的主要属性及事件
MSComm控件有27个属性,其中一部分可缺省设置为不用,常用的属性如下:
(1) CommPort:设置串行口选择。缺省值为1,选择为COM1;若赋值为2,则选择COM2。
(2) PortOpen:设置通信端的状态。设置为True时,打开端口;设置为False时,关闭端口并清除接受和发送缓冲区。
(3) Settings:设置通信时的波特率、奇偶校验、停止位参数。
(4) Inputlen:设置每次从接受缓冲区读却的字符个数。缺省值为0,表示将读取接受缓冲区中全部内容;若设置值为n,表示每次将读取接受缓冲区中的n个字符。 (5) InputMode:设置接收数据的类型。
(6) InBufferCount:设置返回接受缓冲区中等待被读取的字符个数。初始化程序时,InBufferCount设置值为0,表示清除接受缓冲区。
(7) OutBufferCount:设置返回发送缓冲区中等待发送的字符个数。设置值为0时,表示清除发送缓冲区。
(8) InBufferSize:设置接受缓冲区中的长度,缺省值为1024字节。 (9) OutBufferSize:设置发送缓冲区中的长度,缺省值为512字节。
(10) Rthreshold:设置表示在触发OnComm事件之前接收缓冲区允许有的字符数。缺省值为0,表示即使接收缓冲区有字符时,也不会触发OnComm事件;设置值为n时,表示接收缓冲区每有n个字符时,就会触发一次OnComm事件。
(11) Sthreshold:设置表示在触发OnComm事件之前发送缓冲区允许有的字符数。缺省值为0,表示不触发OnComm事件;设置值为n时,表示发送缓冲区每有n个字符时,就会触发一次OnComm事件。 (12) DTREnable:设置DTR的有效性。 (13) RTSEnable:设置RTS的有效性。 (14) Input:从串口读取数据。 (15) Output:向串口写入数据。
如果在通信过程中发生错误或事件,就会触发OnComm事件,并由CommEvent属性代码反映错误类型,在通信程序的设计中可根据该属性值来执行不同的操作。CommEvent属性值及其含义如下: (1)ComEvSend:值为1,发送缓冲区的内容少于SThreshold指定的值。
(2)ComEvReceive:值为2,接收缓冲区内字符数达到RThreshold指定的值。 (3)ComEvFrame:值为1004,硬件检测到帧错误。 (4)ComEvRxOver:值为1008,接收缓冲区溢出。 (5)ComEvTxFull:值为1010,发送缓冲区溢出。 (6)ComEvRxParity:值为1009,奇偶校验错误。
(7)ComEvEOF:值为7,接收数据中出现文件尾(ASCII码为26)字符