串口通信以及波特率计算方法

串口通信

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

RS-232 也称标准串口,最常用的一种串行通讯接口,比如我们的电脑主机的9针串口 ,最高速率为20kb/s

RS-232是为点对点(即只用一对收、发设备)通讯而设计的,其传送距离最大为约15米。所以RS-232适合本地设备之间的通信

硬件电路

简单双向串口通信有两根通信线(发送端TXD和接收端RXD)

TXD与RXD要交叉连接

当只需单向的数据传输时,可以直接一根通信线

当电平标准不一致时,需要加电平转换芯片

串口通信以及波特率计算方法_第1张图片

电平标准

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

TTL电平:+5V表示1,0V表示0

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

RS485电平:两线压差+2 ~ +6V表示1,-2 ~ -6V表示0(差分信号)

常见通信接口比较

名称 引脚定义 通信方式 特点
UART TXD、RXD 全双工、异步 点对点通信
I2C SCL、SDA 半双工、同步 可挂载多个设备
SPI SCLK、MOSI、MISO、CS 全双工、同步 可挂载多个设备
1-Wire DQ 半双工、异步 可挂载多个设备

此外还有CAN、USB等

通信方式

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

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

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

异步:通信双方各自约定通信速率

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

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

51串口通信工作模式

STC89C52有1个UART

STC89C52的UART有四种工作模式:

​ 模式0:同步移位寄存器

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

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

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

串口参数及时序图

波特率:串口通信的速率(发送和接收各数据位的间隔时间)

​ 在数字通信中常常用时间间隔相同的符号来表示一个二进制数字,这样的时间间隔内的信号称为**(二进制)码元**

波特率可以被理解为一个设备在单位时间内发送(或接收)了多少码元(二进制)的数据,它是对符号传输速率的一种度量,表示单位时间内传输符号的个数(传符号率)

比特率又称“二进制位速率”,俗称“码率”。表示单位时间内传送比特的数目。用于衡量数字信息的传送速度,常写作bit/sec。根据每帧图像存储时所占的比特数和传输比特率,可以计算数字图像信息传输的速度

检验位:用于数据验证

停止位:用于数据帧间隔

串口通信以及波特率计算方法_第2张图片

串口模式图

SBUF:串口数据缓存寄存器,物理上是两个独立的寄存器,但占用相同的地址。写操作时,写入的是发送寄存器,读操作时,读出的是接收寄存器

串口通信以及波特率计算方法_第3张图片

由图可知需要用到T1定时器,使用定时器设置波特率,也需要开启中断

串口使用定时器1,模式选择8位自动重装载

数据显示模式

在串口助手中与单片机收发数据时有两种数据形式:

HEX模式/十六进制模式/二进制模式:以原始数据的形式显示

文本模式/字符模式:以原始数据编码后的形式显示,该编码依据ASCII码表,是十六进制的对应字符显示

波特率计算

串口通信以及波特率计算方法_第4张图片

SMOD:波特率选择位。当用软件置位SMOD,即SMOD=1,则使串行通信方式1、2、3的波特率加倍;SMOD=0,则各工作方式的波特率不加倍。复位时SMOD=0。

一般选择不加倍,所以SMOD为0,SYSclk是单片机时钟,也就是晶振的频率,11.0592MHz,运算时要转化为基本单位Hz,即11059200Hz

定时器工作模式是8位自动重装载,TH1和TL1赋的初值一样

9600:

12T模式定时器1溢出率:11059200Hz/12/(256-TH1) = 11059200Hz/12*(256-TH1) = 921600/(256-TH1)

9600 = 2^SMOD/32*(921600/(256-TH1)) = 1/32 * (921600/(256-TH1)) = 28800/(256-TH1)

256-TH1 = 28800/9600 = 3,TH1 = 256-3 = 253,253转为十六进制就是FD,所以TH1 = TL1 = FD

串口通信以及波特率计算方法_第5张图片

4800:

12T模式定时器1溢出率:11059200Hz/12/(256-TH1) = 11059200Hz/12*(256-TH1) = 921600/(256-TH1)

4800= 2^SMOD/32*(921600/(256-TH1)) = 1/32 * (921600/(256-TH1)) = 28800/(256-TH1)

256-TH1 = 28800/4800 = 6,TH1 = 256 - 6 = 250,253转为十六进制就是FA,所以TH1 = TL1 = FA

串口通信以及波特率计算方法_第6张图片

你可能感兴趣的:(51单片机,单片机,51单片机,嵌入式硬件)