51单片机串口


TCON: timer/counter control register ,定时器/计数器 控制寄存器,,定时器的启停开关+溢出状态反馈

TR0 : 开启timer0

TF0 :定时器0溢出标志,计数溢出硬件的时候,自动置为1,,开中断则响应后硬件清0


串行通讯: 通过一条数据线逐位传输

并行通讯: 多条数据线同时传输

串并转换,,,

有些传输的快一些,有些传输的慢一些,,,数据就会混淆

UART : universal asynchronous receiver transmitter

通用异步收发传输器

真正跑在网线,光纤,基站上的物理层,,全部都是串行传输,一位一位发二进制比特,从来不用并行

距离一远,多跟线时序不同步,,采样直接翻车

电脑内部主板、芯片之间:近距离,可以用并行;


单工通讯: 只允许数据在一个方向上传输,,电视广播

双工通讯: 允许数据在两个方向上传输

半双工通信: 两个方向不能同时进行

全双工通讯: 允许数据同时在两个方向上传输


  • 同步通讯
  • 异步通讯

解析的方式有无数种,,

  • 同步方案 : 发送放和接收方 要共用 一个 时钟线,,,

    几乎不可能,,硬件成本上升,,多了一根线,就多一分干扰,,不太现实,,时钟频率不一样是一件很正常的事情

  • 统一发送方的发送频率,,,接收方的接收频率,,, 发送方和接收方协商一致就可以


UART : universal asynchronous receiver transmitter

异步的,全双工的串行通信接口

数据格式:在UART 中,,数据是 逐帧 frame 发送的,,, 每个数据帧,,包含 起始位,,数据位(5-9位) 校验位(校验你当前的数据位传输的数据是否正确),,停止位(用来标识这个数据已经传输完成了)

  • 空闲状态 : 没有数据传输的时候,保持高电平
  • 起始位: 起始位一定是低电平,,表示要发数据
  • 数据位: 长度5-9位 ,,
  • 校验位: 校验当前帧传输的数据是否正确
    • 奇校验 odd parity : 数据位中的1的数目是偶数,,,则校验位为1,,如果1的数目是奇数,,校验位为0,,,
      保证数据位+校验位中1的总个数为奇数
    • 偶校验 : even parity : 数据位中1的数目+校验位 ===》 偶数

校验位可选

  • 停止位 : 数据帧发送结束之后,有一个停止位,,通常是1位或者2位

异步约定,,,


波特率: baud rate : 表示数据的传输速率,,发送方和接收方必须约定好这个速率,,,才能正确的接收

比特率: 单位时间内,只能传一个bit,,1秒钟只传1位,,1bit每秒

比特率: 每秒传输的位(bit)数

波特率: 一秒钟传递多少信号,,,每秒传输的符号(symbol)数,,,

串口通信中,,只有0和1,,,一个符号用1位表示,,所以波特率和比特率是等价的


发送方和接收方,,需要明确数据的位数,,

校验位: 需要明确校验算法是哪个

停止位: 停止位可以是一位还是两位,,,

UART寄存器 :

Rx

Tx

8位UART : 数据位是8位,,,

波特率可变: 波特率可以协商

溢出率

溢出率可变 : 时钟有初始值,可以通过设置时钟初始值寄存器,来表示一个时间周期,传输多少数据,,,波特率可变

系统工作时钟频率,,这个时间周期是确定的

SMOD: 要么是0 ,要么是1


SCON : serial control : 串口控制寄存器

SBUF : 缓冲器

TX Control : 发送控制器,,, 一位一位的把数据,,将数据发送出去

write to SBUF : 控制消息发送的开关

shift : 位移

timer 1 overFlow : 是否分频,,,smod为2,,2分频

tx clock : 发送控制器时钟

TI : transmit interrupt : 中断标志位,,,会产生一个串口中断 : serial port intterupt

TI需要自己清零


RxD : 接收消息

1-To-0 transition detector : 10跳变检测器

接收到一位,,就进行移位操作,,交给Sbuf,,,,,


溢出率 :一秒钟溢出多少次,,就是溢出率,,,,,

SMOD : 51单片机中控制串口波特率是否加倍的关键位,,,baud rate doubler bit

溢出率:

每次溢出前,,定时器需要计数的次数 = 256 - TH1

每次计数的时间 1 / SYSclk ... 12T模式下就是 12/SYSclk

溢出一次的总时间(256-TH1)* (12 / SYSclk) ,

溢出率: 每秒溢出多少次,,, 也就是溢出周期的倒数 SYSclk /( (256-TH1)*12)

波特率 : 每秒传输的 码元(信号单元个数),,单位是波特 Baud

信号,,在通信术语中叫码元,,他是通信中最小的,离散的信号单位

波特率: 每秒传递多少个码元,, 只看信号的个数,不管每个信号带了多少信息

比特率: bit per second : 每秒传多少个比特bit,看的是信息的总量

比特率 = 波特率 * 每个码元携带的比特数

  • SMOD = 0 : 要攒32个定时器溢出脉冲,,--》 才产生一个位节拍(1个码元),才生成1个串口码元

  • SMOD = 1 : 收集16个定时器溢出脉冲 ---》才产生一个位节拍(1个码元)

    SYSclk /( (256-TH1)*12) / 16

溢出率 : 每秒溢出多少次

波特率: 每16次溢出,传输一个码元

1s中有多少个时间周期 : (SYSclk/12)

溢出率: (SYSclk/12) / (256-TH1) ===> SYSclk / ((256-TH1)*12)

波特率 :

单位时间溢出了多少次,,,,


UART : universal asynchronous receiver transmitter : 通用异步收发器

两个设备,,都具备UART收发器,,就可以进行通讯

电脑端,可以通过USB转向口,,,

VGA接口 : 3排15针,,传输视频的,,

USB

电瓶协议

串口 : 和其他的进行通讯,,,

蓝牙串口

TXD : transmit exchange data

RXD : receive exchange data

电瓶标准不一样,,,需要电平转换芯片

定义一种协议,,传输中,人为规定的电压和数据的对应关系

  • TTL电平 : 5V为1,,0V为0
  • RS232电平

TTl ,,RS232 最多十多米,,长了数据会错误率很高

RS485 : 传输1000米

数据流控制 : 流控

如果设备1发送特别快

半双工: 必须分时复用一根数据线,,只有一根线,,发送和接收都是同一根线

单工: 只能有一方发送到另一方,,不能反向传输 : 遥控器

异步:

同步:




serial control , SCON :

PCON : power control ,

相关推荐
Deitymoon2 小时前
STM32——I2C协议
stm32·单片机·嵌入式硬件
YangWeiminPHD2 小时前
金水32051编译器:人与单片机CPU之间的桥梁
c语言·单片机·编译器
YONYON-R&D2 小时前
KSZ8863RLLI 与STM32F407接口
单片机·嵌入式硬件
XMAIPC_Robot2 小时前
180FPS AI相机模组,轻巧大算力, 高性能双目同步摄像模组+搭配RK3588
人工智能·嵌入式硬件·深度学习·数码相机·fpga开发
Psyduck_ing2 小时前
从MCU到Linux开发的思维破壁
linux·网络·单片机
LingLong_roar2 小时前
使用 ESP8266 + Arduino IDE + ST7789 240*240 OLED 显示屏实现显示“Hello World!”
单片机·嵌入式硬件
星夜夏空992 小时前
STM32单片机学习(1)——keil5安装以及环境部署
stm32·单片机·学习
kaikaile19952 小时前
STM32 + ADS1256 24位高精度ADC驱动测试程序
stm32·单片机·嵌入式硬件
智者知已应修善业2 小时前
【51单片机流水灯中断嵌套,低优先级中断完成后如何返回主程序】2023-10-15
c++·经验分享·笔记·算法·51单片机