51单片机自学笔记(2)——串行通讯

1. 通讯的介绍

  给另一个设备(可以为单片机)发送数据或者读取另一个设备(可以为单片机)发送出来的数据就可以称为通讯,也可以理解为不同设备的数据“分享”。通讯又可分为串行通讯和并行通讯,本文主要讲解串行通讯。

1.1 串行通讯

  串行通讯:将数据一位一位有顺序的发出,仅需一个引脚就可以发送完所有位的数据,对资源消耗小,缺点就是发送数据速度与并行通讯略差。串行通讯又分为串行同步通讯与串行异步通讯。
  51单片机的串行通讯主要由串行数据缓冲器SBUF(字节地址为99H)、控制寄存器SCON(字节地址为98H)以及节电控制寄存器PCON(字节地址为87H)这几个特殊功能寄存器(SFR)进行控制与运行。
  51单片机一次通讯有效数据只有8位或者9位,发送数据的起始位与停止位不包含在有效数据中,起始位说明数据准备发送或者准备接收,停止位说明数据结束发送或者结束接收。起始位+有效数据+停止位=一帧数据,一帧数据就是一次通讯需要收发的所有信息。

1.2 并行通讯

  并行通讯:将数据各位共同发送,由于需同时发送即需要引脚就特别多(一个引脚发送1位的数据),对于资源的消耗特别大,优点就是发送数据速度快。

2.串行数据缓冲器——SBUF(99H)

  当需要发送数据时必须将发送的数据放入SBUF中数据才可以被发送,当接收数据时数据会被直接放入SBUF中。
  当发送数据时,需将数据存入SBUF中,这时SBUF称为发送数据缓冲器;当接受数据时,数据将放入SBUF中,这时SBUF称为接收数据缓冲器。即发送数据缓冲器与接收收据缓冲器公用同一个地址所以该SFR称为串行数据缓冲器。

3.控制寄存器——SCON(98H)

  该寄存器一共8位(可位寻址,98H–9FH)。
在这里插入图片描述

3.1 波特率

  介绍该寄存器之前,先介绍一下波特率的定义:串行口每秒发送或接收的位数注意:不是字节数而是位数,一字节等于8位)。波特率是串行通信的重要指标,用于表征数据传输的速度。波特率越高,数据传输速度越快。
  以下内容选择可以选择忽略,在介绍方式1、方式2、方式3波特率计算方式时可以回头看。
T1溢出率:T1溢出时间的倒数。
T1用于波特率发生器时一般工作与非门控定时器方式2,即常数自动重装载方式,这个是对51单片机定时计数器的介绍,可以详细了解常数自动重装载方式。T1溢出率计算方式为(TH1为计数的初值)。:在这里插入图片描述

3.1 SM0与SM1位:工作方式选择位

  串行口一共有4种工作方式由SM0与SM1控制。
  方式0:SM0=0、SM1=0,串行口用作同步移位寄存器使用。数据从RXD(P3.0)端串行输入或输出,同步移位信号从TXD(P3.1)端输出,每一个移位脉冲对应数据帧的一个数据位。方式0的波特率固定为晶振频率的12分频(即一个机器周期)。
  方式1:SM0=0、SM1=1,有效数据为8位的全双工异步通讯(UART)方式,其一帧数据为10位,TXD为数据发送端、RXD为数据接收端,串行口用方式1工作时,使用定时器T1作为波特率发生器,波特率的设定以T1的溢出率为基准,波特率的计算方式为:在这里插入图片描述
  该方式发送数据,首先发送起始位0,接着从有效数据最低位开始发送,最后发送结束位1,结束位发送完成后硬件自动将TI置1,在发送收据前与发送数据时TI位应处于清0状态,否则数据发送将存在异常。
  该方式接收数据,首先检测RDX是否发生负跳变(即是否接收到起始位),发生负跳变后接收有效数据,最后接收结束位1,若接收数据前与接收时RI为0则此帧数据为有效数据,反之则丢失接收的一帧信息。
  方式2:SM0=1、SM1=0,有效数据为9位的全双工异步通讯(UART)方式。
  方式3:SM0=1、SM1=1,有效数据为9位的全双工异步通讯(UART)方式。
  方式2与方式3皆为9位有效数据全双工异步通讯方式,发送数据的第9位在TB8中、接收数据第9位在RB8中,TXD为数据发送端(在发送数据时应先写入TB8中内容再写入SBUF中内容)、RXD为数据接收端,一帧数据有11位,接收数据与发送数据详情与方式1一致。
  方式2与方式3的区别在于收发信号的波特率不同,方式2波特率计算方式为:在这里插入图片描述
方式3波特率计算方式为:在这里插入图片描述

3.2 SM2位:多机通讯控制位

  初学者对该位不需要做过多的了解,只需知道当处于多机(单片机个数大于等于3)通讯时需该位控制。本文对此位不过多介绍,1对1通讯时该位清0即可。
  

3.3 REN位:允许串行接收位

  若需要接收外部信息需控制此位,当REN=1时允许串口接收外部信息;当REN=0时不允许串口接收信息,该位始终由软置1或清0。

3.4 TB8

  当发送的有效数据为9位时(工作在方式2或者方式3),该位存放的是发送的第9位数据即由软件置1或者清0。在多机通讯中用来表示是地址帧还是数据帧,TB8=1为地址帧;TB8=0为数据帧。

3.5 RB8

  当接收的有效数据为9位时(工作在方式2或者方式3),该位存放的是接收的第9位数据。

3.6 TI位:发送中断标志位

  该位指示一帧数据发送是否完成,在方式0串行发送第8位数据结束时由硬件置1,或者在其他方式串行发送停止位后也是由硬件置1。TI在发送数据前必须由软件清0(及时对其进行清0处理负责影响后续数据发送),发送结束后由硬件置1,CPU可由TI状态查询到1帧数据是否发送完毕。

3.7 RI位:接收中断标志位

  该位指示一帧数据接收是否完成,在方式0串行接收第8位数据结束时由硬件置1,或者在其他方式串行接收停止位后也是由硬件置1。RI在接收数据前必须由软件清0(及时对其进行清0处理负责影响后续数据接收),接收数据结束后由硬件置1,CPU可由RI状态查询到1帧数据是否接收完毕。

4. 节电控制寄存器——PCON(87H)

  该寄存器功能就比较简单,主要是控制方式1、方式2、方式3的波特率。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值