1.1RS-232串口知识简介1.1.1RS-232串口管脚定义管脚符号定义信号方向管脚1CD载波信号PC机←Modem82RXD数据接收PC机←Modem33TXD数据发送PC机→Modem24DTRPC机就绪PC机→Modem205GND公共地76DSRMODEM就绪PC机←Modem67RTSPC机允许发送PC机→Modem48CTSMODEM允许发送PC机←Modem59RI振铃信号PC机←Modem221.1.4RS-232C串口通信参数1.数据的传送速度波特率(bps)是指每秒钟所传送的数据位数。原始信号经过不一样的波特率取样后,所得的结果完全不同,如图所示:发送速度10原始信号0011000101001110接收速度2.数据的传送单位(数据包含的位数)例如:1个起始位+8个数据位+0个校验位+1个停止位数据格式共有10位,所以通信中最小的传输单位是10位。每秒钟传输的字节数(波特率为9600bps,采用十位数据格式,则:9600/10=960(字节/秒)传输1M字节的数据,需要的时间为:1000000/960≈17(分)因此,串口通信通常用在数据量不是很大的场合。1.1.7RS-232C串口通信的硬件连接1.单机模拟方式使用一个串口(COM1或COM2)。将串口的第2脚(RXD)与第3脚(TXD)短接线。单机模拟串口通信的另外一种方法是,制作一条串口联接电缆,如下图所示:2.两台计算机电缆联机方式在两台计算机上进行串口通信,只要将上面制作的串口连接电缆的两端分别连接在两台计算机的COM1(或COM2)。1.2MSComm控件的属性和事件1.2.1MSComm控件的引用在控件工具箱中添加“MicrosoftCommControl6.0控件,该控件的原文件为系统目录下的System子目录中的MSComm32.ocx文件。1.通信参数设置(1)CommPort属性语法:MSComm1.CommPort[=Value]作用:设置/返回通讯使用的串口号。类型:Integer取值:Value=1,2,…,16。举例:MSComm1.CommPort=2说明:必须在打开端口之前设置CommPort属性。(2)Settings属性语法:MSComm1.Settings[=Value]作用:设置或返回通信参数,通信参数包括波特率、奇偶校验位、数据位、停止位。格式:BBBB,P,D,S类型:String取值:Value=“BBBB,P,D,S”。Settings属性的缺省值是9600,N,8,1“举例:MSComm1.Settings=1200,e,8,1(3)Handshaking属性语法:MSComm1.Handshaking[=Value]作用:设置或返回硬件握手协议。类型:Integer取值:0-没有握手协议(默认);1-XON/XOFF;2-RTS/CTS;3-XON/XOFF和RTS/CTS两者皆可。2.打开/关闭端口(4)PortOpen属性语法:MSComm1.PortOpen[=Value]作用:打开或关闭通讯串行端口,在设计时无效。类型:Boolean型。取值:True(打开)/False(关闭)。说明:必须保证CommPort和Settings属性设置正确。3.发送数据(5)OutPut属性语法:MSComm1.OutPut[=Variant]作用:向输出缓冲区写数据流并将数据发送出去。类型:Variant型取值:要传输的文本数据或二进制数。说明:传输文本数据时,应将String型数据放入Variant变量,传输二进制数据(字节)时,应将Byte型数组数据放入Variant变量。举例:MSComm1.OutPut=Text1.text(6)OutBufferSize属性语法:MSComm1.OutBufferSize[=Value]作用:设置或返回输出缓冲区大小。类型:Integer型。取值:输出缓冲区的字节数,默认值为512字节。OutBufferSize属性的最大值为:32767字节。OutBufferSize属性值应根据需要选取。(7)SThreshold属性语法:MSComm1.SThreshold[=Value]作用:设置或返回发送缓冲区中允许的最小字符数。该属性和MSComm控件的OnComm事件有关联。Sthreshold属性为0(缺省值),数据传输事件不会产生OnComm事件。类型:Integer型取值:发送缓冲区中允许的最小字符数4.接收数据(8)Input属性语法:MSComm1.Input[=Variant]作用:从接收缓冲区中接收数据并将数据读入应用程序中。类型:Variant型。数值:接收缓冲区中收到的数据。说明:接收文本数据时,读入的数据为String型。接收二进制数据时,读入的数据为Byte型数组数据。举例:Text1=MSComm1.Input(9)InBufferSize属性语法:MSComm1.InBufferSize[=Value]作用:设置或返回接收缓冲区大小。类型:Integer型取值:接收缓冲区的字节数,默认值为1024字节。InBufferSize属性的最大值为:32767字节。说明:InBufferSize值应根据需要选取。(10)InputMode属性语法:MSComm1.InputMode[=Value]作用:设置或返回接收数据的数据类型。类型:Integer型取值:0-接收文本型数据;1-接收二进制数据。说明:InputMode属性决定Input属性取回数据的格式是字符串还是二进制数据的数组。(11)InBufferCount属性语法:MSComm1.InBufferCount[=Value]作用:返回接收缓冲区中已传到但还未取走的字符个数,该属性在设计时无效。类型:Integer型取值:未取走的字符个数。说明:InBufferCount是指已接收,并在接收缓冲区等待被取走数据的字符数。可以把InBufferCount属性设置为0来清除接收缓冲区。(12)RThreshold属性语法:MSComm1.RThreshold[=Value]作用:设置或返回在接收多少个字符数时,产生OnComm事件。与SThreshold属性相同,该属性也和MSComm控件的OnComm事件有关联。类型:Integer型取值:说明在产生OnComm事件之前要接收的字符数。说明:◆当接收字符后,若Rthreshold属性设置为0(缺省值)则不产生OnComm事件。◆设置Rthreshold为1,接收缓冲区收到每一个字符都会产生OnComm事件。5.状态控制(13)DTREnabled;(14)RTSEnabled;(15)DSRHolding;(16)CTSHolding;(17)CDHolding。以上五个属性均取值True/False,用于读取或控制串口管脚的状态。1.3编程串口通信程序用VB编写串口通信程序的基本步骤如下:◆在工程中加入MSComm控件;◆设置CommPort属性选择通信串口;◆设置Settings属性选择通信参数;◆设置PortOpen=True打开通信串口;◆使用Output或Input属性发送或接收数据;◆通信任务结束后,设置PortOpen属性为False关闭串口。1.3.1最简单的串口通信程序1.通信的硬件连接采用单机模拟通信方式,串口选择COM1(默认值),将COM1的第2脚和第3脚端接。如果串口COM1被占用,可以选择COM2。2.软件编程运行VB6.0,在弹出的“新建工程”中,选择“标准EXE”选项,单击“确定”按钮,进入VB6.0的集成开发环境。(1)界面设计(2)编写代码在Form_Load中加入代码:MSComm1.PortOpen=True在Command1_Click中加入代码:MSComm1.Output=Text1.Text在Command2_Click中加入代码:Text2.Text=MSComm1.Input在Command3_Click中加入代码:End完整的程序代码如下:PrivateSubCommand1_Click()MSComm1.Output=Text1.TextEndSubPrivateSubCommand2_Click()Text2.Text=MSComm1.InputEndSubPrivateSubForm_Load()MSComm1.PortOpen=TrueEndSubPrivateSubCommand3_Click()EndEndSub(3)运行程序