• 详解同步通讯和异步通讯的原理


    5.1.3 同步通信和异步通信
    一、同步通信和异步通信
    串行通信可以分为两种类型,一种叫同步通信,另一种叫异步通信。
    同步通信方式,是把许多字符组成一个信息组,这样,字符可以一个接一个地传输,但是,在每组信息(通常称为信息帧)的开始要加上同步字符,在没有信息要传 输时,要填上空字符,因为同步传输不允许有间隙。同步方式下,发送方除了发送数据,还要传输同步时钟信号,信息传输的双方用同一个时钟信号确定传输过程中 每1位的位置。见右图5.2所示。



    图5.2 同步通信示意图
    在异步通信方式中,两个数据字符之间的传输间隔是任意的,所以,每个数据字符的前后都要用一些数位来作为分隔位。
    从图5.2中可以看到,按标准的异步通信数据格式(叫做异步通信帧格式),1个字符在传输时,除了传输实际数据字符信息外,还要传输几个外加数位。具体 说,在1个字符开始传输前,输出线必须在逻辑上处于“1”状态,这称为标识态。传输一开始,输出线由标识态变为“0”状态,从而作为起始位。起始位后面为 5~8个信息位,信息位由低往高排列,即先传字符的低位,后传字符的高位。信息位后面为校验位,校验位可以按奇校验设置,也可以按偶校验设置,或不设校验 位。最后是逻辑的“1”作为停止位,停止位可为1位、1.5位或者2位。如果传输完1个字符以后,立即传输下一个字符,那么,后一个字符的起始位便紧挨着 前一个字符的停止位了,否则,输出线又会进入标识态。在异步通信方式中,发送和接收的双方必须约定相同的帧格式,否则会造成传输错误。在异步通信方式中, 发送方只发送数据帧,不传输时钟,发送和接收双方必须约定相同的传输率。当然双方实际工作速率不可能绝对相等,但是只要误差不超过一定的限度,就不会造成 传输出错。图5.3是异步通信时的标准数据格式。

    图5.3 异步通信示意图
    比较起来,在传输率相同时,同步通信方式下的信息有效率要比异步方式下的高,因为同步方式下的非数据信息比例比较小。
    二、传输率
    所谓传输率就是指每秒传输多少位,传输率也常叫波特率。在计算机中,每秒传输多少位和波特率的含义是完全一致的,但是,在最初的定义上,每秒传输多少位和 波特率是不同的,前者是指每秒钟传输的数位是多少,而波特率是指每秒钟传输的离散信号的数目。所谓离散信号,就是指不均匀的、不连续的也不相关的信号。在 计算机里,只允许高电平和低电平两种离散信号,它们分别表示l和0,于是,造成了波特率与每秒传输数位这两者的吻合。但在其他一些场合,就未必如此。比 如,采用脉冲调制时,可以允许取4种相位,而每种相位代表2个数位,这种情况下,按每秒传输多少位(bps)计算的传输率便是波特率的两倍。
    国际上规定了一个标准波特率系列,标准波特率也是最常用的波特率,标准波特率系列为110、300、600、1200、1800、2400、4800、9600、19200......。
    大多数接口的波特率可以通过编程来指定。
    作为例子,我们可以考虑这样一个异步传输过程:设每个字符对应1个起始位、7个数据位、1个奇/偶校验位和1个停止位,如果波特率为1200,那么,每秒钟能传输的最大字符数为1200/10=120个。 
    作为比较,我们再来看一个同步传输的例子。假如也用1200的波特率工作,每个字符为7位,用4个同步字符作为信息帧头部,但不用奇/偶校验,那么,传输 100个字符所用的时间为7×(100+4)/1200=0.6067,这就是说,每秒钟能传输的字符数可达到100/0.6067=165个。
    三、异步通信的差错类型
    异步通信过程中,可能发生通信错,一般有3种错误:
    1、帧格式错:在应该接收到停止位的时候,接收到逻辑的“0”,便产生帧格式错误。
    2、奇偶错:接收到的奇偶校验位错。
    3、覆盖错:通信接口接收到数据并存放到数据输入寄存器中,但是CPU没有及时来取,后面新接收的数据覆盖了前面收到的数据,叫做覆盖错。
    发生帧格式错和奇偶错的原因可能为下面几种:
    ◆ 发送和接收双方采用了不同的传输率,或虽然双方约定了相同的传输率,但传输率不可能绝对相等。在通信的速率比较高的情况下,如果双方的传输率误差达到一定的程度,也会造成通信出错;
    ◆ 通信双方采用了不相同的帧格式;
    ◆ 干扰。

  • 相关阅读:
    用spring的InitializingBean作初始化
    LinkedList源码分析
    CgLib动态代理
    DB2删除表分区
    spring aop搭建redis缓存
    List怎么遍历删除元素
    线程池ExecutorService和完成服务CompletionService的使用获取线程的返回结果
    synchronized与static synchronized 的区别
    将spring管理的bean使用注解的方式注入到servlet中
    eclipse右击打war包class没打上去的问题
  • 原文地址:https://www.cnblogs.com/alanfeng/p/4793529.html
Copyright © 2020-2023  润新知