Pile 0004: 串口硬件流控制

一、流控制

  这里讲到的“流”,当然指的是数据流。数据在两个串口之间传输时,常常会出现丢失数据的现象,或者两台计算机的处理速度不同,如台式机与单片机之间的通讯,接收端数据缓冲区已满,则此时继续发送来的数据就会丢失。现在我们在网络上通过modem进行数据传输,这个问题就尤为突出。流控制能解决这个问题, 当接收端数据处理不过来时,就发出“不再接收”的信号,发送端就停止发送,直到收到“可以继续发送”的信号再发送数据。因此流控制可以控制数据传输的进程,防止数据的丢失。pc机中常用的两种流控制是硬件流控制(包括rts/cts、dtr/cts等)和软件流控制xon/xoff(继续/停止)。

二、硬件流

  硬件流控制常用的有rts/cts(请求发送/清除发送)流控制和dtr/dsr(数据终端就绪/数据设置就绪)流控制。
  1.rts/cts流 

  硬件流控制必须将相应的电缆线连上,用rts/cts(请求发送/清除发送)流控制时,应将通讯两端的rts、cts线对应相连,数据终端设备(如计算机)使用rts来起始调制解调器或其它数据通讯设备的数据流,而数据通讯设备(如调制解调器)则用cts来起动和暂停来自计算机的数据流。这种硬件握手方式的过程为:
  我们在编程时根据接收端缓冲区大小设置一个高位标志(可为缓冲区大小的75%)和一个低位标 志(可为缓冲区大小的25%),当缓冲区内数据量达到高位时,我们在接收端将cts线置低电平(送逻辑0),当发送端的程序检测到cts为低后,就停止发送数据,直到接收端缓冲区的数据量低于低位而将cts置高电平。rts则用来标明接收设备有没有准备好接收数据

 

RS232标准:
RTS:终端我准备发数据给你,快用CTS应答,准备好没?
CTS:好了,来吧

 

MODEM的硬件流控:
CTS:主机,我有数据,请求接收
RTS:我是主机,就绪,请求发送。

 

  2.dtr/dsr
  常用的流控制还有还有dtr/dsr(数据终端就绪/数据设置就绪)。我们在此不再详述。由于流控制的多样性,我个人认为,当硬件里用了流控制时,应做详细的说明,如何接线,如何应用。

  串口通信引脚:

Signal I/O Function
RXD    O   Serial data output to DTE
TXD    I   Serial data input (TXD) from DTE
CTS    O   Output for Clear to send signal (CTS) to DTE
RTS    I   Input for Request to send signal (RTS) from DTE
DSR    O   Output for Data set ready signal (DSR) to DTE
DTR    I   Input for Data terminal ready signal (DTR) from DTE

  说明:DTE是数据发送的主动方,DCE是数据的接受方。

 

三、软件流控制

  由于电缆线的限制,我们在普通的控制通讯中一般不用硬件流控制,而用软件流控制。一般通过xon/xoff来实现软件流控制。常用方法是:当接收端的输入 缓冲区内数据量超过设定的高位时,就向数据发送端发出xoff字符(十进制的19或control-s,设备编程说明书应该有详细阐述),发送端收到 xoff字符后就立即停止发送数据;当接收端的输入缓冲区内数据量低于设定的低位时,就向数据发送端发出xon字符(十进制的17或control- q),发送端收到xon字符后就立即开始发送数据。一般可以从设备配套源程序中找到发送的是什么字符。
  应该注意,若传输的是二进制数据,标志字符也有可能在数据流中出现而引起误操作,这是软件流控制的缺陷,而硬件流控制不会有这个问题。

posted @ 2016-10-13 21:29  窝窝头HZ  阅读(262)  评论(0编辑  收藏  举报