本节重点
1.UART的概念
2、单工、半双工、全双工概念
3、串行、并行概念
4、串行、并行区别
5、 串口通信时序
6、奇偶校验的概念/缺点
7、串口通信参数(波特率 数据位 停止位 校验位 2400 8 N 1)
8、同步、异步概念
9、主从应答的概念
10、主机、从机
目录
[1. 单工](#1. 单工)
[练习--------发送"hello world!"](#练习--------发送“hello world!”)
练习-------------------主机发送指令,从机解析主机发送的指令并获得功能码,根据功能码完成对外设的控制,并回复应答给主机
51 单片机有8 根数据线 和16 根地址线:
- 数据线:与 CPU 的字长一致(8 位),负责传输 8 位二进制数据,对应 P0 口(双向 8 位并行 I/O 口,可作为地址 / 数据复用线)。
- 地址线 :16 位地址总线决定了寻址范围(最大 64KB,即
0x0000~0xFFFF
),其中 P0 口分时复用为低 8 位地址线,P2 口作为高 8 位地址线。
UART
UART:通用异步收发器,2个串口(1个串口被用于ISP下载程序,1个串口被用于和主机之间的通信),RXD(接收信号线) TXD(发送信号线)
全双工、串行、异步
一、通信方式:
1. 单工
(1)发送方和接收方是固定的,数据只能从发送方发给接收方
(2)数据传输是通过一根信号线实现,数据传输的方向是固定的
2.半双工 (I2C)
(1)通信双方既可以作为发送方也可以作为接收方
(2)数据传输是通过一根信号线实现,数据传输的方向可以是双向的
(3)同一时刻,数据传输的方向呈现单一性(A给B发的时候,B不能给A发,B只能去接收数据)

3.全双工(UART)
(1)通信双方既可以作为发送方也可以作为接收方
(2)数据传输是通过两根信号线实现,数据传输在任意时刻都是双向的(收发可以同时进行)


二、数据传输的顺序:
Uart在传输数据时,遵循LSB优先原则(低位先行),先发低位数据


三、数据传输的形式:
串行:
通过一根信号线传输数据,按照先后次序逐个bit逐个bit去发送数据
并行:
同多多根信号线同时去传输数据

四、串行传输和并行传输的区别:
串行:
(1)传输速率慢(只能通过一根线逐个bit去传输)
(2)硬件成本低,实现简单
(3)传输距离远,抗干扰性好(RS485差分)
并行:(1)传输速率快 (可以通过多根线同时传输多个bit)
(2)硬件成本高,实现复杂
(3)传输距离近,抗干扰性差(30米以内距离增加后多根信号新存在信号偏移,会电磁波干扰,会造成误差和干扰)
五、串口通信时序:
- 1.串口通信时,空闲状态为高电平
- 2.当由高电平变为低电平(发送一个低电平信号),代表发送了一个起始位,准备开始通信
- 3.发送数据(通常是8bit,遵循先发数据低位LSB原则)
- 4.再发送一个bit的校验位(奇偶校验)
- 5.再发送一个bit的停止位,代表这一次串口通信结束

校验:
- 奇偶校验(串口)
- 累加和校验
- CRC校验(Modbus协议)
六、奇偶校验:
问题:无法去检测偶数个bit出错的问题
奇校验:
校验位为"1,若数据位中"1的个数加上校验位中的"1",保持1的个数为奇数个 ,则代表校验通过
偶校验:
校验位为"0,若数据位中"1的个数加上校验位中的"0,保持1的个数为偶数个 ,则代表校验通过
七、串口通信参数:
波特率:
bps(bit per second),每秒钟传输bit的数量,常见的波特率:2400,4800,9600,115200
数据位:8,串口传输通常8bit数据位传输
停止位:1,1bit停止位
校验位:None,N,无校验
Even,E,偶校验
Odd,O,奇校验
9600,8, N, 12400,8,E,1
115200,8,0,1
八、同步通信、异步通信:
I2CUARTSPI同步?异步?(时钟线)
I2C:SCL时钟线
SPI:SCLK时钟线
UART:无时钟线异步
同步 :通信的双方有一根共享的时钟线来约定通信的频率(同步发送数据/接收数据)
异步: 通信双方没有时钟线进行同步,如Uart:可以通过设置波特率来实现同步(发:2400bps收:2400bps)
九、串口寄存器配置:

串口的波特率发生器依赖于定时器1(Timer1)
(1)SCON/PCON串口控制寄存器:
PCON寄存器中的bit6 置0 代表通过SCON寄存器中SM0和SM1两位指定串口工作方式:
①、将SCON寄存器中的bit6和bit7清0
②、将SCON寄存器中的SM1 bit6置1,SM0 bit7清0,代表串口工作8位UART模式
③、将SCON寄存器中REN bit4置1,代表允许串口接收数据
④、SCON寄存器中bit1 TI位,代表串口8位数据发送完毕硬件自动置1,但需要软件清0(查询)
⑤、SCON寄存器bit0 RI位,代表串口8位数据接收完毕硬件自动置1,但需要软件清0(查询)
⑥、PCON寄存器SMOD bit7位置1,代表波特率加倍
256 - 2 * 12M / 32 / 2400 / 12 = 256 - 26 =230(定时器初值)
SCON


PCON

定时器
(2)定时器寄存器相关配置:
TMOD 定时器模式选择寄存器:
①、将TMOD寄存器中的高四位清0(定时器1)
②、将TMOD寄存器中的bit5置1,bit4清0,代表定时器1工作在8位自动重装载模式
实际只有TL1在工作:TL1溢出后,再将TH1里的数,装到TL1里
---------------8 位自动重装载模式的核心优势:规避 "软件重装初值" 的误差-----------
---------------"波特率稳定"------------------------------------------------------------------------
③、将定时器初值写入到TL1和TH1
256 - 2 * 12M / 32 / 2400 / 12 = 256 - 26 =230(定时器初值)
④、将TCON寄存器中的bit6置1,代表允许定时器1开始计数
TMOD

TCON

(3)中断寄存器相关配置:
IE中断控制寄存器:
①、将IE寄存器中的bit7 EA位置1,代表CPU能够响应所有中断
②、将IE寄存器中的bit4 ES位置1,代表允许串口1中断产生中断

练习--------串口初始化
SBUFER 缓冲区
练习--------发送"hello world!"
PS:*p++ 优先级

片外RAM
练习----发数组等........
当需要 "异步、实时、高效地处理串口数据",
且避免 CPU 因 "轮询等待数据" 浪费资源时,就必须使用 串口中断函数
在串行通信的方式 0 中,数据格式为8 位同步移位寄存器方式 (无起始位、停止位,仅传输 8 位数据)。当串行口接收到 ** 第 8 位(即一帧数据的最后一位)** 时,内部硬件会自动置位接收中断请求标志位
RI=1
,向 CPU 请求中断,表明一帧 8 位数据已接收完成。而其他方式(方式 1、2、3)因数据帧包含起始位、停止位等(如方式 1 是 10 位:1 起始位 + 8 数据位 + 1 停止位),所以
RI
置位的时机是 "接收到停止位的中间时刻",与方式 0 的 "纯 8 位数据帧" 逻辑不同。
十、主从应答:
主机:拥有对通信绝对控制权,通信都是由主机发起
从机:无法直接发起通信,只能根据主机下发的指令完成对应操作


累加校验和----- 16E---取6E 取低两位
强制无符号转换,避免符号扩展练习-------------------主机发送指令,从机解析主机发送的指令并获得功能码,根据功能码完成对外设的控制,并回复应答给主机
(功能码01:LED控制 功能码02:数码管控制 功能码03:蜂鸣器控制)