第7章PC端接口技术_第1页
第7章PC端接口技术_第2页
第7章PC端接口技术_第3页
第7章PC端接口技术_第4页
第7章PC端接口技术_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第7章PC端接口技术RS-232串行通信技术串行通信技术USB接口技术接口技术实践与思考实践与思考本章主要内容:第7章 PC端接口技术RS-232串行通信技术串行通信技术 目前已经有几种。RS-232标准是目前常用的串行通信接口标准,它是美国EIA(电子工业联合会)与BELL等公司一起开发的1969年公布的通信协议。它适合于数据传输速率在020Kbps范围内的通信。这个标准对串行通信接口的有关问题,如信号线功能、电器特性都做了明确规定。由于通信设备厂商都生产与RS-232C制式兼容的通信设备,因此,它作为一种标准,目前已在计算机通信接口中广泛采用。 RS-232串行通信技术串行通信技术 RS-

2、232C标准介绍 简单的串行通信协议的设计 MSComm控件介绍 使用VB开发串行口通信软件 使用VC+开发串行口通信软件 RS-232C标准介绍标准介绍 1. RS-232C中的引脚定义 9针RS-232串口(DB9)25针RS-232串口(DB25)引脚简写功 能 说 明 引脚简写功 能 说 明1CD载波侦测(Carrier Detect)8CD载波侦测(Carrier Detect)2RXD接收数据(Receive)3RXD接收数据(Receive)3TXD发送数据(Transmit)2TXD发送数据(Transmit)4DTR数据终端准备(Data Terminal Ready)20D

3、TR数据终端准备(Data Terminal Ready)5GND地线(Ground)7GND地线(Ground)6DSR数据准备好(Data Set Ready)6DSR数据准备好(Data Set Ready)7RTS请求发送(Request To Send)4RTS请求发送(Request To Send)8CTS清除发送(Clear To Send)5CTS清除发送(Clear To Send)9RI振铃指示(Ring Indicator)22RI振铃指示(Ring Indicator)RS-232C标准介绍标准介绍2. RS-232C的电气特性 RS-232C标准对逻辑电平的定义:

4、在TXD和RXD上:逻辑1(MARK)= 315V,逻辑0(SPACE)=+3+15V。在RTS、CTS、DSR、DTR和DCD等控制线上:信号有效(接通,ON状态,正电压)=+3+15V ,信号无效(断开,OFF状态,负电压)=315V。 RS-232C与TTL转换: EIA-RS-232C是用正负电压来表示逻辑状态的,为了能够同计算机接口或终端的TTL器件连接,必须在EIA-RS-232C与TTL电路之间进行电平和逻辑关系的变换。实现这种变换的方法可用分立元件,也可用集成电路芯片。目前较为广泛地使用集成电路转换器件,如MC1488、SN75150芯片可完成TTL电平到EIA电平的转换,而M

5、C1489、SN75154可实现EIA电平到TTL电平的转换。RS-232C标准介绍标准介绍 左图显示了1488 和1489的内部结构和引脚。MC1488的引脚(2)、(4,5)、(9,10)和(12,13)接TTL输入。引脚3、6、8、11输出端口接EIA- RS-232C。MC1498的14的1、4、10、13脚接EIA输入,而3、6、8、11脚接TTL输出。具体连接方法如右图所示。 RS-232C标准介绍标准介绍3. RS-232C接口的电平转换 RS-232C电平采用负逻辑,即:逻辑“0”:+5+15V逻辑“1”:515V RS-232C不能和TTL电平直接相连,使用时必须进行电平转换

6、,否则将使TTL电路烧坏,实际应用时必须注意! 常用的电平转换集成电路除了上面所介绍的传输线驱动器MC1488和传输线接收器MC1489。另一种常用的电平转换电路是MAX232,MAX232芯片可完成TTLEIA双向电平转换。 图为MAX232引脚图。 简单的串行通信协议的设计简单的串行通信协议的设计 PC和单片机最简单的连接是零调制三线经济型。下图给出了采用MAX232芯片的PC和单片机串行通信接口电路,与PC相连采用9芯标准插座。2. PC通信软件1. 单片机通信软件 MCS-51通过中断方式接收PC发送的数据,并回送。单片机串行口工作在方式1,晶振为6MHz,波特率2400,定时器T1按

7、方式2工作,经计算定时器预置值为0F3H,SMOD=1。 参考程序 PC方面的通信程序可以用汇编语言编写,也可以用其他高级语言例如VB、VC来编写。 汇编语言编写的参考程序 MSComm控件介绍控件介绍 在Windows环境下,串口是系统资源的一部分。应用程序要使用串口进行通信,必须在使用前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。在Windows的系统函数中,均包含了支持通信中断的功能。对串口通信而言,Windows为相应的串口设备开放了用户定义的输出缓冲区和输入缓冲区,应用程序只能对输入/输出缓冲区进行操作,数据进出串口的操作均由系统后台完成。以接收为例,

8、系统每接收一个字符就产生一个低级的硬件中断,系统的串口驱动程序将接收到的字符送入输入缓冲区,此时应用程序就可以通过访问输入缓冲区得到接收到的字符信息。MSComm控件介绍控件介绍Windows为用户提供了两种方式实现串口通信。 使用串口通信控件使用Windows的API应用程序接口 使用串口通信控件进行串口程序开发极为方便,如果不需要对串口进行高级控制一般多选择使用MSComm控件进行开发。本章介绍在VB下使用MSComm控件进行计算机实验室温控系统串口程序开发。使用串口通信控件使用串口通信控件 针对串口通信,微软公司专门提供了MSComm控件,使用该控件进行串口通信设计是十分方便的,程序员不

9、必花时间去了解较为复杂的API函数。通过简单修改控件的属性和使用控件提供的方法,就可以实现对串口的配置、完成串口接收和发送数据。使用使用Windows的的API应用程序接口应用程序接口 在Windows中,串口是以文件的形式被打开和访问的。串口和串口通信驱动需要使用设备控制块(Device Control Block,DCB)进行配置。应用程序使用API函数CreateFile打开串口,ReadFile读串口,CreateEvent建立事件对象和CloseHandle关闭串口。使用使用Windows的的API应用程序接口应用程序接口 Micronsoft Communications Cont

10、rol (MSComm)是Micronsoft公司提供的简化Windows下串口通信编程的ActiveX控件,它为应用程序提供了通过串口收发数据的简便方法。在串口编程中,使用MSComm控件非常方便,仅需通过简单修改控件的属性和使用控件提供的方法,就可以实现对串口的配置,完成串口接收和发送数据等任务。 使用使用Windows的的API应用程序接口应用程序接口(1)MSComm控件的通信方法。MSComm控件提供了两种处理通信的方式:事件驱动方式和查询方式。(2)MSComm控件的属性与常数。 CommPort属性。设置并返回通信端口号。端口号的范围为116,但如果用PortOpen属性打开一个

11、并不存在的端口时,MSComm控件会产生错误68(设备无效)。RThreshold属性。设置返回要接收的字符数。接收字符后,如果RThreshold属性被设置为0(默认值),则不产生OnComm事件,如果RThreshold被设成n,则接收缓冲区收到n个字符时MSComm控件产生OnComm事件。CTSHolding属性。确定是否通过查询Clear To Send(CTS)线的状态发送数据。该属性在设计时无效,在运行时为只读。使用使用Windows的的API应用程序接口应用程序接口SThreshold属性。设置并返回传输缓冲区中允许的最小字符数。若SThreshold属性被设置为0(默认值)时

12、,数据传输不会产生OnComm事件。而当SThreshold属性被设为1,当传输缓冲区完全空时,MSComm控件产生OnComm事件。CDHolding属性。通过查询Carrier Detect(CD)线的状态确定是否有传输。该属性在设计时无效,在运行时为只读。DSRHolding属性。确定Data Set Read(DSR)线的状态。该属性在设计时无效,在运行时为只读。Settings属性。设置返回波特率、奇偶校验、数据位、停止位参数。当端口打开时,如果属性值非法,则MSComm控件产生错误380(非法属性值)。BBBBPDS 各个属性值间用逗号隔开,其中BBBB为波特率,P为奇偶校验,D为

13、数据位数,S为停止位数。其默认值为“9600,N,8,1”。Settings属性的设置由4个设置组成,格式如下:InputLen属性。设置并返回Input属性从接收缓冲区中读取的字符数。InputLen 属性的默认值是0。设置InputLen为0时,使用Input将使MSComm控件读取缓冲区中全部的内容。使用使用Windows的的API应用程序接口应用程序接口使用使用Windows的的API应用程序接口应用程序接口EOFEnable 属性。确定在输入过程中 MSComm 控件是否寻找文件结尾(EOF)字符。如果找到 EOF 字符,将停止输入并激活 OnComm 事件,此时 CommEvent

14、 属性设置为 comEvEOF。 语法:object.EOFEnable = value EOFEnable 属性语法包括下列部分:value 布尔表达式,确定当找到 EOF 字符时,OnComm 事件是否被激活,如“设置值”中所描述。value的设置值为True:当EOF字符找到时 OnComm 事件被激活。 value的设置值为False(默认):当EOF字符找到时OnComm事件不被激活。当EOFEnable属性设置为False,OnComm控件将不在输入流中寻 找EOF字符。说明:使用使用Windows的的API应用程序接口应用程序接口 Handshake常数。 Handshake常数

15、如表所示。 OnComm常数。 OnComm常数如表所示 常 数值描 述comNone0无握手comXonXoff1XOn/Xoff握手comRTS2Request-to-send/clear-to-send握手comRTSXOnXOff3Request-to-send和clear-to-send握手皆可常 数值描 述comEvSend1发送事件comEvReceive2接收事件comEvCTS3clear-to-send线变化comEvDSR4data-set ready线变化comEvCD5carrier detect线变化comEvRing6振铃检测comEvEOF7文件结束使用使用Wi

16、ndows的的API应用程序接口应用程序接口Error常数。Error常数如表所示。 常 数值描 述comEventBreak1001接收到中断信号comEventCTSTO1002Clear-to-send超时comEventDSRTO1003Data-set ready超时comEventFrame1004帧错误comEventOverrun1006端口超速comEventCDTO1007Carrier detect超时comEventRxOver1008接收缓冲区溢出comEventRxParity1009Parity错误comEventTxFull1010传输缓冲区满comEventD

17、CB1011检索端口设备控制块(DCB) 时的意外错误使用使用Windows的的API应用程序接口应用程序接口InputMode常数。InputMode常数如表所示。 常 数值描 述comInputModeText0(默认)通过Input属性以文本方式取回数据comInputModeBinary1通过Input属性以二进制方式检取回数据使用使用Windows的的API应用程序接口应用程序接口(3)错误消息(MS Comm控件)。表列出MSComm控件可以捕获的错误。 值描 述常 数380无效属性值comInvalidPropertyValue383属性为只读comSetNotSupported

18、394属性为只读comGetNotSupported8000端口打开时操作不合法comPortOpen8001超时值必须大于8002无效端口号ComPortInvalid8003属性只在运行时有效8004属性在运行时为只读8005端口已经打开comPortAlreadyOpen8006设备标识符无效或不支持该标识符使用使用Windows的的API应用程序接口应用程序接口值描 述常 数8007不支持设备的波特率comPortAlreadyOpen8008指定的字节大小无效8009默认参数错误8010硬件不可用(被其他设备锁定)8011函数不能分配队列8012设备没有打开comNoOpen8013

19、设备已经打开8014不能使用comm通知8015不能设置comm状态comSetCommStateFailed8016不能设置comm事件屏蔽8018仅当端口打开时操作才有效comPortNotOpen8019设备忙8020读comm设备错误comReadError8021为该端口检索设备控制块时的内部错误comDCBError使用使用VB开发串行口通信软件开发串行口通信软件 l 用户界面设计l 初始化程序 l 发送数据 l 接收数据 l 其他工作 使用VB开发串行通信程序的详细步骤。 用户界面设计用户界面设计 添加控件 最终完成界面 添加用户界面 新工程界面 新建工程 用户界面设计用户界面设

20、计 修改界面上各控件的属性如下表所示。控件名称Name 属性Caption属性FormRS232_VBRS232_VBLable1Lable1发送数据Lable2Lable2接收数据Text1Text_SENDText2Text_RECVCommand1Button_SEND发送数据Command2Button_SEND_C清空发送文本框Command3Button_RECV_C清空接收文本框MSComm1MSComm初始化程序初始化程序 程序的初始化部分主要完成对串口的设置工作,包括串口的选择、波特率及帧结构设置、打开串口以及发送和接收触发器的时间控制等。此外,在程序运行前,还应进行清除发送

21、和接收缓冲区的工作。这部分工作是在窗体载入的时候完成的,因此应将初始化代码放在Form_Load三函数中添加如下代码,这样就完成了程序的初始化工作。初始化程序初始化程序初始化代码Private Sub Form_Load三 MSComm.CommPort = 2 设置串口2 MSComm.Settings = 9600,N,8,1 波特率9600bps,无校验,8位数据,1位停止位 MSComm.InputLen = 0 读取接收缓冲区的所有字符 MSComm.InBufferSize = 1024 设置接收缓冲区为1024字节 MSComm.OutBufferSize = 512 设置发送缓

22、冲区为512字节 MSComm.PortOpen = True 打开串口 MSComm.SThreshold = 0 不触发发送事件 MSComm.RThreshold = 1 每一个字符到接收缓冲区都触发接收事件 MSComm.InBufferCount = 0 清除发送缓冲区数据 MSComm.OutBufferCount = 0 清除接收缓冲区数据 Text_SEND.Text = 清空发送文本框 Text_RECV.Text = 清空接收文本框End Sub发送数据发送数据 本例中,发送数据的过程是通过单击发送数据按钮来完成的。程序应完成下面的工作:(1)单击发送数据按钮,程序检查发送

23、文本框中的内容是否为空,如果为空,则终止发送命令,警告后返回。(2)检测串口是否处于打开状态,如串口关闭,则打开串口。(3)将发送文本框中的内容送入MSComm的发送缓冲区,等待数据发送。发送数据发送数据 双击发送数据部分,添加Button_Send_Click三 函数,其代码如下:发送数据Private Sub Button_SEND_Click三 Dim x As String If Text_SEND.Text = Then 发送数据不能为空 x = MsgBox(发送数据不能为空, 16) Exit Sub End If If Not MSComm.PortOpen Then 保证串口

24、打开 MSComm.PortOpen = True End If MSComm.Output = Text_SEND.Text + Chr$(13) 发送数据 For i = 1 To 202X0000 延时 NextEnd Sub接收数据接收数据 接收数据部分使用了事件响应方式。当串口收到数据使得数据缓冲区的内容超过1字节时就会引发comEvReceive事件。OnComm三函数负责捕捉这一事件,并负责将发送缓冲区的内容送入输出文本框显示。OnComm三函数还对错误信息进行捕捉,当程序发生缓冲区溢出之类的错误时,由程序员负责将缓冲区清空。 接收数据接收数据 要实现上述功能,首先要双击MSCo

25、mm控件创建OnComm三,并输入代码:接收数据Private Sub MSComm_OnComm三 Select Case MSComm.CommEvent 检验串口事件 错误处理 Case comEventOverrun 数据丢失 Text_SEND.Text = 清空发送缓冲区 Text_RECV.Text = 清空接收缓冲区 Exit Sub Case ComEventRxOver 接收缓冲区溢出 Text_SEND.Text = 清空发送缓冲区 Text_RECV.Text = 清空接收缓冲区 Exit Sub 接收数据接收数据 Case ComEventTxFull 发送缓冲区已满

26、 Text_SEND.Text = 清空发送缓冲区 Text_RECV.Text = 清空接收缓冲区 Exit Sub 事件处理 Case ComEvReceive 接收缓冲区内有数据 Dim str As String str = MSComm.Input 从接收队列中读入字符串 Text_RECV.Text = Text_RECV.Textstr 读出字符串送显 End SelectEnd Sub其他工作其他工作 完成通信的主要功能后,还需要输入程序完成其他两个按钮的功能,这两个按钮负责清除发送和接收两个文本框的内容。该部分代码内容十分简单,其代码实现如下:清空接收文本框Private S

27、ub Button_RECV_C_Click三 Text_RECV.Text = 清空接收文本框 End Sub清空发送文本框Private Sub Button_SEND_C_Click三 Text_SEND.Text = 清空发送文本框 其他工作其他工作使用该软件实现通信效果的界面如图所示。运行测试程序 使用使用VC+开发串行口通信软件开发串行口通信软件 l 用户界面设计l 初始化程序 l 发送数据 l 接收数据 l 其他工作 使用 讲义开发串口通信软件的方法。用户界面设计用户界面设计 新建工程步骤1 新建工程步骤2 建立新工程后界面 编辑程序界面 添加控件 最终完成界面 用户界面设计用户

28、界面设计 修改程序界面用到的各个控件的属性后,要使用这些控件,还需要为其添加对应的变量。该项工作是使用ClassWizard面板来完成的。在Member Variables选项卡中相应控件的Control ID,MFC单击Add Variables按钮为相应控件添加对应变量。 ClassWizard面板 添加控件对应变量 用户界面设计用户界面设计各个控件添加变量的具体设置如表所示。 控件ID对应变量变量类别变量类型IDC_EDIT_RECVm_str_recvValueCStringIDC_EDIT_SENDm_str_sendValueCStringIDC_HEXM_hexcontrolCB

29、uttonIDC_MSCOMMm_mscommcontrolCMSComm 添加变量后的ClassWizard面板如图所示。 初始化程序初始化程序 在VC中,需要将这部分代码添加到对话框类的OnInitDialog三函数中。 if(m_MSComm.GetPortOpen三) / 如果串口已打开,则关闭串口m_MSComm.SetPortOpen(FALSE);m_MSComm.SetCommPort(2); / 选择COM2if(!m_MSComm.GetPortOpen三)m_MSComm.SetPortOpen(TRUE); / 打开串口elseAfxMessageBox(serial

30、port open error); m_MSComm.SetSettings(“9600,n,8,1”); / 设置波特率9600,无 校验,8位数据位,1位停止位m_MSComm.SetRThreshold(1); / 串口接收缓冲区中有多于或等于1 个字符时将产生接收数据的OnComm事件m_MSComm.SetInputLen(0); / 设置当前接收区数据长度为0m_MSComm.GetInput三; / 预读缓冲区以清除残留数据接收数据接收数据 当MSComm的接收缓冲区有字符时,程序会发送事件消息,OnComm三函数响应该消息并进行处理。由于MSComm类的GetInput三函数返

31、回的数据变量类型为Variant型,而编辑框对应的显示字符串是Cstring型,因此接收数据时,需要先进行类型转换。在VC中,转换过程如下:OnComm三函数的完整代码 将Variant类型转换为ColeSafeArray类型;将ColeSafeArray类型转换为BYTE型数组;将BYTE型数组转换为Cstring变量。发送数据发送数据 发送数据功能使用发送数据按钮对应函数Onsend三来实现。发送数据时,程序仅需要读出发送编辑框的内容,将其转化为发送程序需要的数据格式后,再使用C语言中的强制类型转换功能,将其转换为ColeVariant数据类型,由MSComm类的SetOutput三函数送

32、入发送缓冲区即可。 发送函数OnSend三的源代码 其他工作其他工作 void CRS232_VCDlg:OnClr三 / TODO: Add your control notification handler code herem_str_send = ; / 清空发送文本框m_str_recv = ; / 清空接收文本框UpdateData(FALSE); / 更新文本框内容 清空按钮用于清除发送编辑框和接收编辑框中的已有内容,其相应函数OnClr的代码如下: 其他工作其他工作运行测试程序 连接串口线,启动软件后,首先勾选十六进制发送/接收单选框,在发送文本框中添入数据“02 35 08

33、4A”的字符串,单击发送按钮。然后删除发送文本框中的内容,去掉十六进制发送/接收的勾选,再填入数据“Goodbye”,软件的测试效果如图所示。USB接口技术接口技术 USB的全称为Universal Searial Bus,即通用串行总线。与RS-232类似,USB总线也是一种串行外围设备连接的总线形式,它是202X年由Microsoft、Compaq、IBM等公司联合制定的一种新的PC串行通信协议,从推出之日起就得到了各大厂商的广泛支持,得以不断完善和发展,目前 USB协议的最新版本已经达到了。USB总线作为一种新的串行总线,不仅在传输速度上得到了极大的提高,同时还具有接口简单、真正的即插即

34、用、传输线供电、多设备级联等特性。USB总线的成功推出,对外设的接口产生了广泛的影响,目前使用USB总线接口的如键盘、鼠标、闪存、摄像头等外围设备在市场上已广泛存在。本节将系统地介绍USB总线开发的相关知识,帮助读者尽快熟悉USB开发流程。USB接口技术接口技术USB总线介绍EZ-USB系列接口控制芯片 EZ-USB固件程序开发 USB通信设计要点 USB总线介绍总线介绍 USB设备主要具有以下优点: (1)可以热插拔(2)携带方便(3)标准统一(4)可以连接多个设备USB的互联USB的设备USB的主机1. 总线的拓扑结构:USB设备与主机之间的各种连接方式。2. 内部层次关系:根据性能叠置,

35、USB的任务被分配到系统的每一个层次。3. 数据流模式:描述了数据在系统中通过USB从产生方到使用方的流动方式。4. USB的调度:USB提供一个共享的连接。对可以使用的连接进行调度以支持同步数据传输,并且避免优先级判别的开销。 USB的互联主要包括以下几方面 : USB的总线结构 USB的电气特性与电源管理 USB总线协议 系统设置 数据流种类 USB设备 USB主机:硬件和软件 一个典型的USB系统的描述如下。它主要被定义为3个部分:USB的总线结构的总线结构 USB连接了USB设备和USB主机,USB的物理连接是有层次性的星形结构。每个网络集线器是在星形的中心,每条线段是点点连接。从主机

36、到集线器或其功能部件,或从集线器到集线器或其功能部件。 在任何USB系统中,只有一个主机。USB和主机系统的接口称为主机控制器,主机控制器可由硬件、固件和软件综合实现。根集线器是由主机系统整合的,用以提供更多的连接点。USB的总线结构的总线结构USB的设备如下所示:网络集线器,向USB提供了更多的连接点。功能器件:为系统提供具体功能,如ISDN的连接,数字的游戏杆或扬声器。USB设备提供的USB标准接口的主要依据:对USB协议的运用。对标准USB操作的反馈,如设置和复位。标准性能的描述性信息。USB的电气特性与电源管理的电气特性与电源管理 1电气特性USB的高速信号的比特率定为12Mbps。低

37、速信号传送的模式定为。USB的电缆 低速模式需要更少的EMI保护。两种模式可在用同一USB总线传输的情况下自动地动态切换。 USB传送信号和电源是通过一种4线的电缆,图中的两根线用于发送信号。存在两种数据传输率:USB的电气特性与电源管理的电气特性与电源管理2机械特性 所有设备都有一个上行的连接。上行连接器和下行连接器不可简单地互换,这样就避免了集线器间非法的循环往复的连接。电缆中有4根导线:一对互相缠绕的标准规格线,一对符合标准的电源线。连接器有4个方向,具有屏蔽层,以避免外界干扰,并有易拆装的特性。3. 电源电源分配:即USB的设备如何通过USB分配得到由主计算机提供的能源。电源管理:即通过电源管理系统,USB的系统软件和设备如何与主机协调工作。 电源主要包括以下两个方面: USB总线协议总线协议 USB总线属一种轮询方式的总线,主机控制端口初始化所有的数据传输。 存在两种类型的通道:流和消息。 事务

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论