串口通信:

通信有串行通信和并行通信两种方式。在多微机系统以及现代测控系统中信息的交换多采用串行通信方式。

并行通信:通常是将数据字节的各位用多条数据线同时进行传送。

  • 优点:控制简单、传输数据快。
  • 缺点:由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。

freemodbus多个串口做主站_寄存器

串行通信:使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。只需要少数几条线就可以在系统间交换信息,特别适用于计算机与计算机,计算机与外设直间的远距离通信。

  • 优点:传输线少,长距离传送时成本低。
  • 缺点:数据的传送控制比并行通信复杂。

freemodbus多个串口做主站_freemodbus多个串口做主站_02

串行通信又可分为异步通信同步通信

异步通信是以字符**(构成的帧)为单位,进行传输,字符与字符之间的间隙(时间间隔)**是任意的,但每个字符中的各位是以固定的时间传送的,即字符之间不一定有“ 位间隔 ”的整数倍的关系,但同一字符内的各位之间的距离均为“ 位间隔 ”的整数倍。

freemodbus多个串口做主站_异步通信_03

异步通信是一种很常用的通信方式(效率较低),异步通信在发送字符时,发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接受下来。所传送地数据以字节为单位。每个字节前加上一位起始位,每个字节后面加上停止位。  优点:异步通信地好处是通信设备简单、便宜,但传输效率较低。

同步通信:

同步通信时要建立发送发时钟对接收方时钟地直接控制,使双方达到完全同步。此时,传输数据的位之间的距离均为“ 位间隔 ”的整数倍,同时传送的字符间不留间隙,即保持同步关系,也保持字符同步关系。发送发对接收方的同步可以通过两种方法实现。

传输速率:

比特率是每秒钟传输二进制代码的位数。单位是:位/秒(bps)。如每秒中传送240个字符,而每个字符格式包含10位(1个起始位,1个终止位,8个数据位)这时的比特率为:

            10位 × 240个/秒 = 2400 bps

传输距离与传输速率的关系:

串行接口或终端直接传送串行信息位流的最大距离与传输速率及传输线的电气特性有关。当传输线使用每0.3m(约1英尺)有50PF的电容的非平衡屏蔽双绞线时,传输距离随传输速率的增加而减小当比特率超过1000bps时,最大传输距离迅速下降,如9600bps时最大距离下降到只有76m(约250英尺)

采用RS-232C接口存在的问题(电气特性):

  1. 传输距离短、传输效率低
      RS-232C总线标准受电容允许值的约束,使用时传输距离一般不要超过15米(线路条件好时也不要超过几十米)。最高传送速率为20kpbs。
      双绞线会形成分布电容,又叫寄生电容,受电气特性自动产生,因为在三极管和场效应管会自动产生,所以会影响开通与关断的速度。
      电容:两个导体产生,与两个导体间的距离成反比,与导体的面积成正比
  2. 有电平偏移
      RS-232C总线标准要求收发双方共地。通信距离较大时,收发双方的地电位差别较大。在信号地上将有比较大的地电流并产生压降。
  3. 抗干扰能力差
      RS-232C在电平转换时采用单端输入输出,在传输过程中当干扰和噪声混在正常的信号中,为了提高信噪比,RS-232C总线标准不得不采用比较大的电压和摆幅。

SBUF:

  在逻辑上,SBUF只有一个,它即表示发送寄存器,又表示接收寄存器,具有同一个单元地址99H。但在物理结构上,则有两个完全独立的SBUF,一个是发送缓冲寄存器SBUF,另一个是接收缓冲寄存器SBUF。如果CPU写SBUF,数据就会被送入发送寄存器准备发送;如果CPU读SBUF,则读入的数据一定来自接收缓冲器。即CPU对SBUF的读写,实际上是分别对访问上述两个不同的寄存器。

(收) a = SBUF;   (发)SBUF =a;

串行口工作前需要对相关寄存器进行配置,设定其工作模式:

freemodbus多个串口做主站_freemodbus多个串口做主站_04

  1. 设定T1的工作方式(编程TMOD寄存器);
  2. 计算T1的初值,装载TH1、TL1;
  3. 启动T1(编程TCON中的TR1位);
  4. 确定串行口控制(编程SCON寄存器);
  5. 如需串行口在中断方式工作时,需进行中断设置编程IE寄存器。

freemodbus多个串口做主站_freemodbus多个串口做主站_05

当T1作为波特率发生器时,最典型的用法是使T1工作在自动再装入的**8位定时器方式(即方式2,且TCON的 TR1 = 1,以启动定时器)。**这时溢出率取决于TH1中的计数值。

         T1 溢出率 = fosc / { 12 × [ 256 - (TH1) ] }

freemodbus多个串口做主站_freemodbus多个串口做主站_06

freemodbus多个串口做主站_异步通信_07

fosc:外部晶振(11.0595)

自动再装:TL1、TH1的赋值。 TL1从初值开始加,加到255溢出后,会自动取TH1的初值。

产生波特率误差要为0,不能有误差!