您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第15章串行通信原理与设计浙江农林.
•介绍串行通信的基本概念,包括串行通信的原理、传输协议以及各种串行传输的接口标准•最后讲解了Windows环境下,最常见的API编程方法串行通信基本概念15.1串行传输协议15.2使用WindowsAPI进行同步串口编程15.3采用重叠I/O方式的编程方法15.4采用事件驱动方式的编程方法15.515.1串行通信基本概念•通信,是在一些联络信号的控制下,一次将8位、16位或32位数据同时进行传送的通信方式。在并行通信中,传输线数量没有限制,除了数据线之外还应设置有通信联络控制线。•串行通信,只需一对传输线,数据的各位按照时间顺序依次传送,如8位数据分8次传送。15.1.1串行通信特点•由于在一条传输线上既传输数据信息,又传输控制联络信息,这就需要一系列约定,从而识别一条线上传送的信息流中,哪一部分是数据信号,哪一部分是联络信号。•串行通信的信息格式有异步和同步信息格式。与此对应,有异步串行通信和同步串行通信两种方式。•由于串行通信中信息逻辑定义与TTL不兼容,故需要逻辑电平转换,以提高信息传输的可靠性。•为了降低通信线路的成本和简化通信设备,可用现存信道(如电话、电报信道等),配以适当的通信接口,在任意两点之间实现串行通信。15.1.2串行通信传输方式•串行通信的过程是将通信双方传输的数据序列变成电信号,在选定的通信线路上完成传递。通常,将通信传输方式分为信号传输方式和线路传输方式两部分。1.信号传输方式•在近距离传输时,广泛使用的是按信号原样传输的基波传输方式。•在远距离传输时,通常需要使用Modem。通过Modem,可以将原信号调制为高频的模拟信号,然后通过电话网络,进行远距离传输。2.线路传输方式在串行通信中,数据通常是在两个站(如微机、终端等)之间进行传送,按照数据流的方向及对线路的使用方式可分为如下几种基本传输方式:•单工传输方式。这种方式,在传输线路上,数据只能按一个固定的方向,且是交互式的。•半双工方式。当使用同一根传输线既作为输入又作为输出时,虽然数据可以在两个方向上传送,但通信双方不能同时收发数据,这种传输方式就是半双工传输方式。•全双工传输方式。当数据的发送和接收分别由两根不同的传输线传输时,通信双方都能在同一时刻进行发送和接收操作。•多工传输方式。使用复用技术,将一个信道(即传输信号的线路)划分为若干个频带或时间片,从而使多路信号同时共享信道,这就是多工传输方式。15.1.3数据纠错与检错•在基本通信规程中一般采用奇偶校验或方阵码检错,以反馈重发方式纠错。在高级通信控制规程中,一般采用循环冗余码CRC(CycleRedundancyCode)检验,以自动纠错方式来纠错。•首先,改善传输通道的电特性,使误码率达到要求,但是由于经济因素和技术因素等条件的限制,这方面的努力往往不能得到理想的效果;•其次,采取检错、纠错技术,即所谓差错控制技术,在差错控制技术中,对数据进行可靠有效地编码是很重要的途径之一。15.1.4传输速率与距离传输速率和距离是衡量串行通信的两个重要方面。通常串行通信涉及以下三个方面:•1.波特率•2.发送接收时钟•3.传输距离与传输速率的关系波特率•在并行通信中,传输速率以每秒传送的字节(B/s)数来表示,而串行通信中,在基波传输的情况下用每秒传送的位数(bit/s)来表示数据传输速率。•用的标准波特率是110、300、1200、2400、4800、9600和19200等。随着技术的进步,某些串行通信可以支持更高的波特率,如38400、57600等。发送接收时钟•在发送数据时,发送器在发送时钟的有效沿(下降沿)作用下将移位寄存器的数据按位移位串行输出。•发送/接收时钟频率与波特率的关系如下:发送/接收时钟频率=n×发送/接收波特率表达式中的n=1,16,64。传输距离与传输速率的关系•串行接口或终端直接传送串行信息流的最大距离与传输速率及传输线的电气特性有关,传输距离随传输速率的增加而减少。•RS-232C标准规定,当数据传送速度小于20kbit/s,并且电缆的电容负荷小于2500pF时,传送距离小于30m。由于电缆的电容没有那么大,当传输速度较慢时,传输距离将超过这个距离。15.2串行传输协议•采用的串行通信协议有两类:异步通信和同步通信。•同步协议又分为面向字符、面向比特和面向字节计数3种。15.2.1异步传输协议•1.特点及传输格式在传输一个字符时总是以起始位开始,以停止位结束。异步通信传输格式如图15.1所示。图15.1异步通信字符传输帧格式•2.异步传输的错误检测由于线路或程序出错等原因,使得通信过程中产生了传送错误。因为异步通信的实质是字符的发送是随机的,接收方通常可检测到如下一些错误:奇偶错、超越错、帧格式错。15.2.2面向字符的同步传输协议1.特点与格式它的特点是一次传送由若干个字符组成的数据块,而不是只传送一个字符,并规定了10个特殊字符作为这个数据块的开头与结束标志以及整个传输过程的控制信息,它们也叫做通信控制字。由于被传送的数据块是由一序列字符组成的,故被称为面向字符的协议。协议的一帧数据格式如图15.2所示。图15.2面向字符的同步协议帧格式•由图15.2可知,一个面向字符的数据帧由几个控制字符开始,紧跟着数据位数相同的各字符(1~n),最后以校验字段结束。2.控制字符的定义在面向字符同步协议的帧格式中规定了10个通信控制字符。面向字符协议中规定的10个通信控制字符的名称及代码如表15.1所示。•面向字符的同步通信有别于异步通信的一个特点是,它允许连续发送一序列字符,而每个字符的数据位数都相同,且没有起始位和停止位。•由于在面向字符的同步通信协议中采用了一些传输控制字,从而增强了通信控制能力和校验功能,但也出现了一些问题。15.2.3面向比特的同步传输协议1.特点与格式面向比特的同步传输又称做二进制同步传输。在面向比特的同步协议中,最有代表性的同步协议有如下3种:•同步数据链路控制规程SDLC(SynchronousDataLinkControl),由IBM公司制定。•高级数据链路控制规程HDLC(HighLevelDataLinkControl),由国际标准化组织ISO(InternationalStandardsOrganization)制定。•先进数据通信规程ADCCP(AdvancedDataCommunicationsControlProcedure),由美国国家标准协会制定。2.帧信息的分段SDLC/HDLC的一帧信息包括以下几个场,所有场都是从最低有效位开始传送。•SDLC/HDLC的标志字符。SDLC/HDLC协议规定,所有信息传输必须以一个标志符开始,且以同一个标志符结束。这个标志符是01111110,称为标志场(Flag)。•地址场和控制场在标志场之后,可以有一个地址场A(Address)和一个控制场C(Control)。地址场用来规定与之通信的次站地址。控制场可规定若干个命令。•信息场(数据场)。跟在控制场之后的信息场I(Information)。信息场包含有要传送的数据,并不是每一帧都必须有信息场,即数据场可为0。当它为0时,则这一帧主要是控制命令。•帧校验场。紧跟在信息场之后的是两个字节的帧校验场,帧校验场称为FC(FrameCheck)或称为帧校验序列FCS(FrameCheckSequence)。SDLC/HDLC均采用循环冗余校验码CRC。其生成多项式为CCITT多项式x16+x12+x5+1。除了标志场和自动插入的“0”位外,所有的信息都参加CRC计算。3.实际应用时的几个技术问题•“0”位插入/删除技术。由于SDLC/HDLC协议规定以01111110为标志字节,但在信息场中也完全有可能有同一种模式的字符,为了能将它与标志区分开来,所以采取了“0”位插入和删除技术。•SDLC/HDLC异常结束。如果在发送过程中出现错误,则SDLC/HDLC协议用异常结束(Abort)字符,或称失效序列使本帧作废。•HDLC的3种基本通信操作方式。正常响应方式(NRA),用于由一个主站和多个从站组成的多点式结构。异步响应方式(ARM),用于一个主站和一个从站组成的点点式结构,或者通信双方均由主站和从站叠加而成的平衡型结构。•同步通信中的纠错与数据帧重发。面向比特的同步协议中,由标志字段开始,紧跟着几千比特的信息,最后以具有自动纠错能力的CRC校验码结束。15.3使用WindowsAPI进行同步串口编程•如何使用API实现串口通信,对于数据的接收采用查询方式。•使用WinAPI来编写串口通信程序时,读写操作可以有同步方式与重叠的异步方式。15.3.1概述•所谓同步方式,就是当发出写命令后,直到数据确实写入到输出缓冲区后,写函数才返回。这种方式操作简单,但当数据写入时间较长时,将会使程序挂起,降低程序的效率。•首先使用CreateFile()函数打开串口,以非重叠方式打开。该函数可以返回一个串口句柄,使用该句柄初始化串口参数。然后使用WriteFile()可以发送串行数据,使用ReadFile()可以从串口读取串行数据。操作完串口后,使用CloseHandle()函数来关闭串口。15.3.2创建串口1.CreateFil该函数是一个通用的创建或打开文件的函数。在WinAPI编程中,它不仅可以操作文件,也可以操作串口。使用该函数可以打开一个串口,并返回一个句柄,在程序中便可以通过访问该句柄来实现对串口的访问。下面针对在串口方面的应用介绍其参数的含义及设置方法。HANDLECreateFile(LPCTSTRlpFileName,DWORDdwDesiredAccess,DWORDdwShareMode,LPSECURITY_ATTRIBUTESlpSecurityAttributes,DWORDdwCreationDisposition,DWORDdwFlagsAndAttributes,HANDLEhTemplateFile);2.SetupComm()函数•设置串口输入缓冲区及输出缓冲区的大小。BOOLSetupComm(HANDLEhFile,DWORDdwInQueue,DWORDdwOutQueue);3.DCB数据结构串口通信中,使用该数据结构存放通信参数。由于该结构包括的通信参数很多,逐个设置不方便。通常的做法是首先将串口的当前设置值读出到一个DCB结构中,然后根据需要修改该DCB结构中的某些参数,再以该结构来设置串口通信参数。4.SetCommState()函数要设置串行通信参数,首先定义一个DCB结构类型的变量。根据通信要求,设置该结构变量的数值,然后以该结构变量作为参数,执行SetCommState()函数即可完成串口通信参数的设置。BOOLSetCommState(HANDLEhFile,LPDCBlpDCB);5.GetCommState()函数使用该函数可以获取当前串口通信参数的设置值。获取的参数值存放到一个DCB结构型的变量中。BOOLGetCommState(HANDLEhFile,LPDCBlpDCB);6.举例说明举例子说明创建串口的程序代码,串口参数在代码注释中说明。15.3.3关闭串口关闭串口的操作很简单,只需执行CloseHandle()函数即可。BOOLCloseHandle(HANDLEhObject//指向串口句柄);15.3.4发送数据•发送数据使用WriteFile()函数。BOOLWriteFile(HANDLEhFile,LPCVOIDlpBuffer,DWORDnNumberOfBytesToWrite,LPDWORDlpNumberOfBytesWritten,LPOVERLAPPEDlpOverlapped);15.3.5接收数据•接收数据使用ReadFile()函数。BOOLReadFile(HANDLEhFile,LPVOIDlpBuffer,DWORDnNumberOfBytesToRead,LPDWORDlpNumberOfBytesRead,LPOVERLAPPEDl
本文标题:第15章串行通信原理与设计浙江农林.
链接地址:https://www.777doc.com/doc-2153619 .html