[51单片机]串口通信

226 阅读5分钟

串口介绍

基本概念

  1. 串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的相互通信。

  2. 单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各种模块相互通信,极大地扩展了单片机的应用范围,增强了单片机系统的硬件实力。

  3. 51单片机内部自带UART(Universal Asynchronous Receiver Transmitter,通用异步收发器),可实现单片机的串口通信。

通信方式

微控制器与外部设备的数据通信,根据连接结构传送方式的不同,可以分为两种:并行通信串行通信

并行通信:指数据的各位同时发送或接收,每个数据位使用一条导线。

串行通信:指数据一位接一位地顺序发送或接收

电平标准

电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常见的电平标准有如下三种:

  1. TTL电平:+5v表示1,0v表示0

  2. RS232电平:-3~-15表示1,+3~+15表示0

  3. RS485电平两线压差+2~+6表示1,-2~-6表示0(差分信号) (适用于远距离传输信号)

硬件电路

  • 简单双向串口通信有两根通信线(发送端TXD和接收端RXD)
  • TXDRXD要交叉连接
  • 当只需单向的数据传输时,可以直接一根通信线
  • 当电平标准不一致时,需要加电平转换芯片
image.png

常见通信接口比较

image.png
> 此外还有CAN、USB等

通信方式相关术语

全双工:通信双方可以在同一时刻互相传输数据。

半双工:通信双方可以互相传输数据,但必须分时复用一根数据线。

单工:通信只能由一方发送到另一方,不能反向传输。

全双工概念.png

异步:通信双方各自约定通信速率,以字符为单位进行数据帧传送,一次传送一个帧。

同步:通信双方靠一根时钟线来约定通信速率。

总线:连接各个设备的数据传输线路(类似于一条马路,把马路边各住户连接起来,使住户可以互相交流)

51单片机的UART【串口】

51单片机的UART

STC89C52中有一个UART,更高级的单片机上可能有多个UART

STC89C52的UART有四种工作模式

模式0:同步移位寄存器

模式1:8位UART,波特率可变(常用)

模式2:9位UART,波特率固定

模式3:9位UART,波特率可变

串口是通信设备单片机的内部资源,是不需要像"LED" "数码管"一样有外部资源使用的。

波特率的计算与产生

  • 波特率:串口每秒钟传输的位数

  • 在51单片机的串口通信中,模式1和模式3的波特率是可变的,取决于定时器1的溢出率,也就是说定时器1每溢出1次,串口就发送一次数据。

  • 通常使用定时器1的工作模式2(8位自动重装)来产生波特率,TL1作为脉冲计数寄存器,HT1作为自动重装寄存器,当计数到最大值溢出时,TH1的值会自动装到TL1中。

image.png SMOD:决定是否进行波特率加倍

fosc:晶振频率

波特率的计算方法了解即可,STC-ISP软件上可以直接生成所需波特率的代码。或者查阅相关芯片手册(如下图,以51单片机举例)

image.png 51单片机的晶振频率一般为12MHz或11.0592MHz。

在串口通信上我们一般用11.0592MHz,因为用12MHz或有一些误差。

时序图

  • 检验位:用于数据验证(奇校验/偶校验)
  • 停止位:用于数据帧间隔
image.png

串口模式图

image.png

UART口的数据发送与接收

  • 串行口中有两个缓冲寄存器SBUF,一个是发送寄存器,一个是接收寄存器,在物理结构上是完全独立的。他们都是字节寻址的寄存器,字节地址均为99H

  • 这个重叠的地址靠读/写指令区分:

    串行发送时,CPU向SBUF写入数据,此时99H表示发送缓存SBUF

    串行接收时,CPU从SBUF读出数据,此时99H表示接收缓存SBUF

  • 数据发送:把数据扔进SBUF后,内核会自动将数据发送出去,内容发送完成后,会将TI标志位置1.

    SBUF = 数据/变量 如:SBUF = 0x58

  • 数据接收,内核从串口接收到一个完整的数据后,会将RI标志位置1,用户用SBUF直接读取即可。

    变量 = SBUF 如:dat = SBUF

串口的中断系统逻辑图

image.png

由图可以看出,RI和TI占用的都是同一个中断通道,所以无论是发送或接收都会产生中断,因此在具体题目中需要具体判断。(大于等于1是一个或门

ES:使能中断

EA:使能所有中断

PS可以设置中断优先级,给0的话为低优先级,给1就是高优先级。果只有一个中断的话,不需要设置优先级。中断较多时需要设置。

串口相关寄存器

image.png

TH1TL1:设置波特率参数

TMOD:设置定时器1的工作方式

SBUF:串行通信数据的发送和接收缓冲器

SCON:串行接口控制寄存器

image.png
对于RB8和TB8,当需要奇校验/偶校验时需要配置

异步8位UART并且允许接收:SCON = 0x50

对于IAP15F2K61S2单片机,还要对辅助寄存器AUXR0x8e)进行设置

辅助寄存器AUXR的位定义:

image.png

//参考:b站江科大PPT、小蜜蜂《单片机设计与开发》