zoukankan      html  css  js  c++  java
  • 串口通信

    并行与串行基本通信方式

         并行: 并行通信是将数据字节的各位用多条数据线同时进行传送,每一位数据都需要一条传输线,如图所示

    8位数据总线的通信系统,一次传送8位数据(1个字节),将需要8条数据线,此外还需要一条信号线和若干控制信号线,这种方式仅适用于短距离的数据传输。此种方式,控制简单、相对传输速度快,由于传输线较多,长距离传输时成本高且收发方的各位同时接收困难。

    二  串行通信方式

      串行通信是将数据字节分成一位一位的形式在一条传输线上逐个的传送,此时只需要一条数据线,外加一条公共信号地线和若干控制信号线。因为一次只能传输一位,所以对于一个字节的数据,至少要分成8位才能传输完毕,如下图所示

    串行通信的必要过程是:发送时,要把并行数据变成串行数据发送到线路上去,接收时,要把串行信号变成并行数据,这样才能被计算机及其他设备处理。

    串行通信传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂多了。

    串行通信又有两种方式:异步串行通信和同步串行通信。

    三 异步串行通信方式

      异步串行通信是指通信的发送与接收设备使用各自的时钟控制数据的发送和接收过程。为使双方收发协调,要求发送和接收设备的时钟尽可能一致,如下图所示

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

    异步通信一帧字符信息由4部分组成:起始位、数据位、奇偶校验位和停止位,如下图所示

    有的字符信息也有带空闲位形式,即在字符之间有空闲字符。

    异步通信的特点:不要求收发双方时钟的严格一致,容易实现,设备开销小,但每个字符要加2~3位,用于起止位、校验位和停止位,各帧之间还有间隔,因此传输效率不高。

    四 串行通信的错误校验

      (1)奇偶校验

          在发送数据时,数据位尾随的1位奇偶校验位。奇校验时,数据中1的个数与校验位1的个数和应为奇数;偶校验时,数据中1的个数与校验位1的个数和为偶数。接收字符时,对1的个数进行校验,若发现不一致,则说明传输过程中出现差错。

      (2)代码和校验

          代码和校验是发送方将所有数据块求和(或各字节异或),产生一个字节的校验字符(校验和)附加到数据块末尾,接收方同样进行求和,再进行比较。

    五 波特率和定时器初值的关系

       在串行通信中,收发双方对发送或接收数据的速率要有约定。通过编程可对单片机串行口设定为4种工作方式,其中方式0和方式2的波特率是固定的,而方式1和方式3的波特率是可变的,有定时器T1的溢出率来决定。

        串行口的4种工作方式对应3种波特率。由于输入的移位时钟的来源不同,所以各种方式的波特率计算公式也不同

            方式0:F/12。   方式1: (2的SMOD次方/32)* T1溢出率。  方式2: (2的SMOD次方/64)* F   方式3: (2的SMOD次方/32)* T1溢出率

            式中F为系统晶振频率;SMOD是PCON寄存器的最高位

    六 电源管理寄存器PCON

      电源管理寄存器在特殊功能寄存器中,字节地址为87H,不能进行位寻址,PCON用来管理单片机的电源部分,包括上电复位检测、掉电模式、空闲模式等。单片机复位时PCON全部被清0。

      SMOD---该位与串口通信波特率有关。

        SMOD=0:串口方式1、2、3时,波特率正常。

        SMOD=1:串口方式1、2、3时,波特率加倍。

        (SMOD0、LVDF、P0F)--这三位是STC单片机特有的功能

      PD---掉电模式设定位

        PD=0:单片机处于正常工作状态

        PD=1:单片机进入掉电(power down)模式,可有外部中断低电平触发或由下降沿触发或者硬件复位模式唤醒,进入掉电模式后,外部晶振、CPU、定时器、串行口     全部停止工作,只有外部中断继续工作。

      IDL---空闲模式设置位

        IDL=0:单片机处于正常工作状态。

        IDL=1:单片机进入空闲模式,除CPU不工作外,其余仍继续工作,在空闲模式下可由任一个中断或硬件复位唤醒。

    单片机在通信时,波特率都较高,因此T1溢出率必然很高。如果我们使用定时器1的工作方式1在中断中装初值的方法求T1溢出率的话,在进中断、装初值、出中断很容易产生时间上微小的误差,当多次操作时微小的误差不断积累,最终会产生错误。,因此使用T1定时器的工作方式2,8位初值自动重装的8位定时器/计数器。

    七 51单片机串行口结构

      51单片机的串行口是一个可编程全双工的通信接口,具有UART(通用异步收发器)的全部功能,能同时进行数据的发送和接收,也可作为同步异位寄存器使用。

       51单片机的串行口主要有2个独立的串行数据缓冲寄存器SBUF(一个发送缓冲寄存器,一个接收缓冲寄存器)和发送控制器、接收控制器、输入移位寄存器及若干控制门电路构成。串行口基本结构如下

    51单片机可以通过特殊功能寄存器SBUF对串行接收或串行发送寄存器进行访问,2个寄存器共用一个地址,但物理上是2个独立的寄存器,由操作指令决定访问哪一个寄存器。执行写指令时,访问串行发送寄存器。执行度指令时,访问串行接收寄存器。接收寄存器具有双缓冲结构,即在从接收寄存器中读出一个已收到的字节之前,便能接收第二个字节,如果第二个字节接收完毕,第一个字节还未读出,则丢失其中一个字节。

    八 串行口控制寄存器SCON

      串行口控制寄存器SCON在特殊功能寄存器中,字节地址为98H,可位寻址,SCON用以设定串行口的工作方式,接收/发送控制以及设置状态标志等。单片机复位时,SCON全部被清0。

      SM0、SM1---工作方式选择位

        SM0     SM1        方式                          功能说明

         0         0           0    同步移位寄存器方式(通常用于扩展I/O口)

           0         1           1    10位异步收发(8位数据),波特率可变(由定时器1的溢出率控制)

           1         0           2    11位异步收发(9位数据),波特率固定

         1     1            3    11位异步收发(9位数据),波特率可变(由定时器1的溢出率控制)

      SM2--多机通信控制位

        主要用于方式2和方式3,。当接收机的SM2=1时,可利用收到的RB8来控制是否激活RI(RB8=0,不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,并激活RI,继而在中断服务中将数据读走)。当SM2=0时,无论RB8收到的是0还是1,收到的数据均进入SBUF,并激活RI。通过控制SM2,可实现多机通信。方式0时,SM2必须是0。方式1时,若SM2=1,则只有接收到有效停止位时,RI才置1。

      REN---允许串行接收位。

        REN=1,允许串行接收。REN=0,禁止串行接收。

      TI---发送中断标志位

        方式0时,当串行发送第8位结束时,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发出中断申请。在中断服务程序中,必须由软件将其清0,取消此中断申请。

      RI---接收中断标志位

        方式0时,当串行接收第8位结束时,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发出中断申请。在中断服务程序中,必须由软件将其清0,取消此中断申请。

      TB8---方式2、3中发送数据的第9位。

      RB8---方式2、3中接收数据的第9位

  • 相关阅读:
    个人学期总结
    实验四:201571030116/201571030106《小学四则运算练习软件需求说明》结对项目报告
    201571030106/201571030116《小学四则运算练习软件》结对项目报告
    java实现随机四则运算
    《构建之法》不得不提的五个问题
    项目自动化建构工具gradle 入门5——在intellij中做一个gradle的web工程
    项目自动化建构工具gradle 入门4——javaWeb在浏览器中显示helloWorld
    项目自动化建构工具gradle 入门3——生一个exe的helloWorld
    项目自动化建构工具gradle 入门0——环境 & 废话
    项目自动化建构工具gradle 入门2——log4j输出helloWorld
  • 原文地址:https://www.cnblogs.com/ATMvip/p/2484432.html
Copyright © 2011-2022 走看看