7.1 串行数据通信概述

计算机数据传送的2种方式

并行传送

  • 定义:一个数据编码字符的所有各位都同时发送、并排传输,同时被接收
  • 优点:速度快,效率高。
  • 缺点数据线多,成本高,距离短 (一般小于30m)。
    • 因为传输距离如果太长就不能保证同时发送,同时接收

串行传送

  • 定义:一个数据编码字符的所有各位不是同时发送,而是按一定顺序,一位接着一位在信道中被发送和接收。
  • 优点:成本低,简单。
  • 缺点:速度慢。

串行通信的数据通路的方式❗

  • 单工方式(1-wire)
    • 定义:信号(不包括联络信号)在信道中只能沿一个方向传送。
    • 示例:发送方A (TXD) →接收方B (RXD)。
    • notion image
  • 半双工方式(
    • 定义:双方均具有发送和接收信息的能力,信道也具有双向传输性能,但在指定的时刻, 只能沿某一个方向传送信息,不能同时发送和接收。
    • 示例:发送方A (TXD, RXD) ←→接收方B (TXD, RXD),但某一时刻只能单向传输。
    • notion image
  • 全双工方式(
    • 定义:信号沿两个方向同时传送,任何一方在同一时刻既能发送又能接收信息。
    • 示例:发送方A (TXD->RXD_B, RXD<-TXD_B) <-> 接收方B (RXD<-TXD_A, TXD->RXD_A)。
    • notion image

同步传输和异步传输❗

为什么需要同步机制?

  • 为保证发送的信号在接收端能被正确地接收,发送端和接收端必须采用同步技术。
  • 如果接收端未在正确的时间开始接收,会发生错误。
notion image

同步传输

  • 定义:对数据块进行连续传输,需要同步技术,一般有同步线(时钟线)。
notion image

异步传输

  • 定义:以字符为单位进行数据传输,字符都用起始位停止位包装起来,在字符间允许有长短不一的间隙。
  • 特点单片微机中常用的串行通信都是异步方式
  • MCS-51单片机的一个字符帧的格式:1个起始位 (低电平),8位 (或9位) 数据位 (D0-D7),1个停止位 (高电平)。
  • 缺点
    • 添加了起始位和停止位,占用了传输时间,降低了传输效率,因此仅适用于远距离的数据通信。

波特率 (Baud Rate)❗

  • 定义:串行通信时每秒钟信号变化次数,单位“BAUD”。
  • 比特率:数据传输速率 bps (bit per second)。
在二进制通信中,比特率等于波特率。
这是因为对于二进制而言,信号变化一次(0/1)就代表着传输了一位数据。
  • 标准速率:RS-232C标准规定了常用的标准速率,如50~19200bps,根据不同的数据量及线路状况设定。

异步串行通信的同步技术❗❗

既然没有时钟,那么一定要有某种约定来确保数据被正确传输
  1. 通信双方约定一个通信速率 (波特率)。
  1. 采用相同的数据传输格式 (起始位(低)、数据位、停止位(高))。
  1. 低位在前,高位在后
notion image

7.2 80C51串行口及控制

80C51串行口结构

特性:80C51中的串行口是一个全双工的异步串行通信接口,可作UART (通用异步接收和发送器)用,也可作同步移位寄存器用。
主要技术问题
  • 数据传送:传送中的标准、格式及工作方式问题。
  • 数据转换:串行数据与并行数据之间的相互转换 (UART)。

波特率发生器

  • 由T1、T2及内部的一些控制开关和分频器所组成,提供TXCLOCK (发送时钟) 和RXCLOCK (接收时钟)。
    • 相关SFR:TMOD, TCON, T2CON, TL1, TH1, TL2, TH2, PCON (电源控制寄存器,用于波特率控制)。

数据缓冲寄存器 SBUF

  • 存放发送和接收数据的两个独立的缓冲寄存器,在SFR的地址都是99H
  • 写SBUF (MOV SBUF, A) 引发串口发送。
  • 读SBUF (MOV A, SBUF) 读取接收到的数据。
  • 由于发送SBUF与接收SBUF独立,51串行口是全双工接口。
  • CPU将数据送到发送SBUF后,SBUF自动一位一位发送,完成后 TI=1
  • 外部串行数据经RXD送入SBUF时,电路自动启动接收,完成后 RI=1

串行口控制逻辑

  • 接受来自波特率发生器的时钟信号——TXCLOCK(发送时钟),RXCLOCK(接收时钟)
  • 控制输入移位寄存器将外部串行数据转换为并行数据输入
  • 控制输出移位寄存器将内部的并行数据转换为串行数据输出
  • 控制串行中断(RI和TI)

引脚

  • RXD (P3.0) 用于接收数据(Receive),TXD (P3.1) 用于发送数据(Transmit)
notion image

80C51串行口控制寄存器

SCON (串行口控制寄存器) ❗❗

  • 地址:98H (位地址9FH~98H)。
注意这里的位地址是从大到小的
注意这里的位地址是从大到小的
  • 位定义
    • SM0, SM1 (位7, 位6):串行口工作方式选择位。
    • SM0
      SM1
      工作方式
      特点
      波特率 (典型)
      0
      0
      方式0
      8位移位寄存器
      0
      1
      方式1
      10位异步接收发送
      (T1产生)
      1
      0
      方式2
      11位异步接收发送
      1
      1
      方式3
      11位异步接收发送
      (T1产生)
    • SM2 (位5)多机通信控制位 (用于方式2和方式3)。
      • : 当接收到第9位RB8为1(说明送过来的是地址)时,有效,RI=1,产生中断。 RB8为0(说明送过来的是数据),无效,不产生中断。
        • 在这个条件下,仅对收到的地址响应,不对收到的数据响应
      • : 无论RB8为1或0,数据均有效,RI=1,产生中断。
        • 在这个条件下,对收到的地址、数据均响应;
      • 方式0时,SM2必须为0。
      • 方式1时,若SM2=1,停止位必须为1。
    • REN (位4)
      • 允许接收位。 允许接收, 禁止接收。
    • TB8 (位3)
      • 发送数据位8。 在方式2和方式3时,TB8是要发送的第9位数据。
        TB8=1表示地址,TB8=0表示数据。
    • RB8 (位2)
      • 接收数据位8。 在方式2和方式3接收到的第9位数据。方式1中接收到的是停止位。 方式0中不使用。
    • TI (位1)发送中断标志。 表示一帧数据发送结束,由软件清0。
    • RI (位0)接收中断标志。 表示一帧数据接收结束,由软件清0。
  • 系统复位后,SCON中所有位都被清除。

PCON (电源控制寄存器)

  • 地址:87H (不能位寻址)。
  • 位定义
    • SMOD (位7):波特率倍增位。 串行口波特率加倍。
      • 具体可以看波特率的计算公式
    • 其他位与掉电方式有关。

IE (中断允许寄存器)

  • 地址:A8H。
  • 位定义
    • ES (位4):串行中断允许位。 0为禁止,1为允许。
    • EA (位7):总中断允许位。

7.3 串行口的工作方式

通过SCON寄存器的SM0和SM1位设置,共四种工作方式。

方式0:同步串行通信方式 ()

  • 特点:同步串行通信方式,类似一个同步移位寄存器
  • 数据传输:8位数据,低位在前。
  • 波特率:固定为
  • 引脚功能
    • RXD (P3.0):输入或输出数据。
    • TXD (P3.1):输出同步移位时钟,因为同步传输还需要单片机输出时钟信号给对方。
  • 帧格式
notion image
  • 发送:执行写SBUF指令 (MOV SBUF,A) 时启动。
  • 接收:当REN=1且RI=0时启动。
  • 时序:发送过程约10个机器周期,接收过程类似。

方式1:8位UART,可变波特率 ()

特点

标准的8位UART,异步通信。

数据传输

10位数据帧:1个起始位 (低),8位数据 (低位在前),1个停止位 (高)
注意数据帧的概念。UART一次通信就传一个数据帧;而I2C、SPI理论上一次通讯可以传很多字节。
notion image

波特率

由定时器T1或T2 (80C51无T2则仅T1) 的溢出率决定,可设定。
T1通常工作在方式2 (自动重装载) 以获得稳定波特率。

引脚功能

RXD (P3.0) 接收数据,TXD (P3.1) 发送数据。

发送

  • 对SBUF写数据后,硬件自动加入起始位和停止位,从TXD串行输出。
  • 发送结束TI置1。
  • 实际发送开始于T1下一次溢出时刻。

接收

  • 条件:
    • REN=1且RI清零后,RXD引脚检测到1到0的跳变启动接收。
    • 启动16倍波特率速度采样
  • 起始位确认:
    • 连续8次采集到低电平确认起始位到来
  • 接收采样:
    • 对RXD线以16倍波特率速度采样,在每个数据位的第7,8,9个脉冲采样并“三取二”确定数据
  • 接收结束,置位RI的条件
      1. RI=0。
      1. 接收到的停止位=1(这里停止位的采样和普通数据位的采样一样,“三取二”
notion image

波特率计算 (使用定时器1):

  • 公式
分母32,来源于8051串行通信口(UART)内部的两个固定的硬件分频系数的乘积
  • T1工作于方式0 (13位计数器):每次溢出需重装初值TC。
    • 式中,TC表示计数初值;X表示中断程序所需的机器周期数目
  • T1工作于方式1 (16位计数器):每次溢出需重装初值TC。
    • T1工作于方式2 (8位自动重装载):无需中断服务程序重装,波特率更稳定,应禁止T1中断。

      方式2和方式3:9位UART ( )

      特点

      标准的9位UART,异步通信。

      数据传输

      • 11位数据帧:1个起始位,9位数据(低位在前),1个停止位。
      • 第9数据位(TB8发送,RB8接收)可作奇偶校验位或控制位。
      notion image

      引脚功能

      RXD (P3.0) 接收数据,TXD (P3.1) 发送数据。

      波特率

      • 方式2 ():波特率几乎几乎固定。
        • 波特率 = (即当SMOD=1时, ;当SMOD=0时,
      • 方式3 ()
        • 波特率可变,由定时器T1的溢出率决定,和方式一一致

      数据控制

      通过 SETB TB8CLR TB8 设置发送的第9位。

      发送

      执行写SBUF指令启动。

      接收

      • 条件:REN=1且RI清零后,RXD引脚检测到1到0的跳变启动接收。
      • 如果第一个时钟周期接收到的不是0(说明不是起始位),则复位接收电路,继续检测RXD上1到0的跳变(起始位的检测和确认机制是基本一致的)

      置位RI的条件 (受SM2影响):

      • :无论RB8为0或1,均置位RI,触发中断。
      • :只有当RB8=1时才置位RI,触发中断。若RB8=0,则接收数据被忽略
      这一特性被用在下面的多机通信中👇

      7.4 多机通信

      intro

      • 概念:整个系统有多个单片微机,需要相互通信。
      notion image
      • 实现机制:利用串行口工作方式2或方式3,以及SCON寄存器中的SM2位 (SCON.5)。
      notion image

      主-从通信系统❗❗

      1. 主机发起:每次通信都由主机发起。
      1. 从机地址:每个从机都有各自的地址 (通常一个字节)。
      1. 通信格式:主机先发送地址帧,然后发送数据帧
        1. notion image
          地址帧:发送的第9位数据 (TB8) 置1。
          数据帧:发送的第9位数据 (TB8) 清0。
      1. 从机初始状态:所有从机的SM2位均设置为1,并允许串行口中断接收。
      1. 地址识别
          • 主机发送地址帧 (TB8=1),所有从机因SM2=1且接收到RB8=1而响应中断。
          • 从机在中断中比较接收到的地址与本机地址。
            • 地址匹配:若地址相符,该从机将SM2清0,准备接收后续的数据帧。
            • 地址不匹配
              • 若地址不符,该从机保持SM2=1,忽略后续的数据帧
              • (因为数据帧的RB8将为0,SM2=1时不会产生中断),等待下一次地址帧。
      1. 数据传输:地址匹配的从机 (SM2=0) 接收主机发来的数据帧 (TB8=0)。
      1. 从机回复 (如果需要):被选中的从机可以向主机发送数据。 此时从机发送时TB8通常为0,主机接收时应将SM2设为0。

      7.5 串行口的应用

      波特率允许误差❗❗

      如图所示,虚线表示应当采样的地方;箭头表示实际采样的地方。在5/6次采样的时候,累积误差过大导致采样错误
      如图所示,虚线表示应当采样的地方;箭头表示实际采样的地方。在5/6次采样的时候,累积误差过大导致采样错误
      异步串口通信没有时钟信号,时序的维持全靠双方约定的波特率。为保证正确接收,发送与接收波特率累积误差在最后一位采样时不应超过半个位周期
      例如:第10位累积误差
      • 其中 是误差百分比, 是位周期,9.5是最后一个bit采样的时刻
      • 通常要求波特率误差 小于5%,因为

      晶振选择与TH1初值

      • 为获得精确的常用波特率,晶振频率的选择很重要。
      • 常用晶振:11.0592MHz 或 7.3728MHz 可以产生无误差的常用波特率。 12MHz晶振在某些波特率下会有误差。
      • 计算TH1 (定时器1方式2)
      • 例:, BaudRate=2400, SMOD=0 ⇒
        • 例:, BaudRate=1200, SMOD=0 ⇒}$。

          方式0的编程和应用

          • 用于扩展并行I/O口等。
          • 示例:使用74LS164串入并出扩展并行输出口控制LED。
            • 初始化:MOV SCON, #00H (方式0), CLR ES
            • 发送:MOV SBUF, A, JNB TI, $, CLR TI

          方式1的编程和应用

          • 示例:双机通信
            • 甲机发送,乙机接收。串行口方式1,T1方式2作波特率发生器,波特率2400bps,晶振6MHz。
            • 波特率计算
            • 初始化 (甲机)MOV TMOD, #20H, MOV TL1, #0FAH, MOV TH1, #0FAH, SETB TR1, MOV SCON, #40H (方式1, 禁止接收)。
            • 发送首末地址 (查询方式)MOV SBUF, data, JNB TI, $, CLR TI
            • 发送数据块 (中断方式)SETB ES, SETB EA, MOV SBUF, A (发送第一字节),后续在中断服务程序中发送。
            • 发送中断服务程序 (SINT):保护现场,发送下一字节,判断是否结束,恢复现场,RETI。
            • 初始化 (乙机):类似甲机,但 MOV SCON, #50H (方式1, 允许接收)。
            • 接收中断服务程序 (RSINT):保护现场,读SBUF,根据标志判断是地址还是数据,存入RAM,更新指针和计数,判断结束,恢复现场,RETI。
          • 示例:通过串行口发送带奇偶校验位的数据块
            • ASCII码7位,最高位用作奇偶校验。 方式1,T1方式2,1200bps,。 查询发送。
            • (SMOD=0)。
            • 初始化:MOV TMOD, #20H, MOV PCON, #00H, MOV TL1, #0E8H, MOV TH1, #0E8H, SETB TR1, MOV SCON, #40H (禁止接收)。
            • 发送子程序 (SP-OUT):取数据,计算奇偶校验位 (P标志) 并置于ACC.7,MOV SBUF, A, JNB TI, $, CLR TI
          • 示例:通过串行口接收带奇偶校验位的数据块
            • 接收32字节,存20H~3FH,1200bps,奇校验出错C置“1”。
            • 初始化:类似发送,但 MOV SCON, #50H (允许接收)。
            • 接收子程序 (SP-IN):JNB RI, $, CLR RI, MOV A, SBUF。 检查奇偶性 (P标志),若出错,C=1。 去掉校验位后数据存A。

          方式2、3的编程和应用

          • 方式3 波特率设置与方式1相同,可由用户设置。
          • 主要用于多机通信
          • 第9数据位TB8/RB8 也可用于校验位。
          • 示例:利用第9位作为奇偶校验位编写发送中断程序
            • 中断服务程序 (SPINT):关中断EA,保护现场PSW, ACC,开中断EA。 切换寄存器工作组 (SETB RS0),取数据,计算奇偶校验 (P标志),将校验位送TB8 (MOV TB8, C),数据送SBUF,指针增加。 关中断EA,恢复现场,清RS0,RETI。

          第七章作业

          里面有很多例程还是很好的,可以很大增进理解。
          Loading...