51单片机串行通信原理

2023-05-16

51单片机串行通信原理

  • 计算机通信
    • 串行通信
      • 异步通信
      • 同步通信
      • 数据传送速率
      • 传输方向
  • 单片机串行口
    • 串行口特殊功能寄存器
      • 串行口控制寄存器SCON
      • 电源控制寄存器PCON
    • 波特率的设定与计算
  • PC与多个单片机通信
  • 串口如何使用

计算机通信

计算机通信:计算机与外部设备或计算机之间的信息交换。基本的通信方式有两种。

  1. 并行通信:将传送数据字节的各位用多条数据线同时进行传送。优点:控制简单,传输速度快。缺点:由于传输线较多,长距离传送成本高且接收方的各位同时接受困难。
  2. 串行通信:所传送的数据各位按顺序一位一位地发送或接收。优点:传输线少,成本低。缺点:控制复杂。

串行通信

异步通信

通信的发送与接收设备使用自己的时钟控制数据的发送和接收过程(两个时钟尽可能一致)。
数据或字符是一帧一帧地传送的。先用一个起始位0表示字符的开始,然后是8位数据,规定低位在前,高位在后。其后是奇偶校验位,此位通过对数据奇偶性的检查,可用于判别字符传送的正确性(可省略)。最后是停止位,用以表示字符的结束。

同步通信

发送方时钟对接收方时钟的完全控制,保持位同步关系也保持字符同步关系。

数据传送速率

波特率: 每秒钟传送二进制代码的位数
单位:位/秒,bps
传输距离随传输速率增加而减少。
调制解调器:由于距离太远时,要先采用调制器把数字信号转换位模拟信号,并加以放大在传送。在接收时,在用解调器把模拟信号转换成数字信号在送入计算机接口。

传输方向

单工:数据传输仅能沿一个方向
半双工:数据传输可以沿两个方向,但要分时进行。
全双工:数据可以同时进行双向输出


单片机串行口

内部硬件结构:两个物理上独立的接受、发送缓冲器SBUF。发送缓冲器只能写入不能读出。接收缓冲器只能读出不能写入。

串行口特殊功能寄存器

串行口控制寄存器SCON

符号字节地址位名称位名称位名称位名称位名称位名称位名称位名称复位值
SCON98HSM0/FESM1SM2RENTB8RB8TIRI0000 0000
  1. RI:接收中断标志位。在方式0时,接收完第8位数据时,RI由硬件自动置1。在其他方式中,串行接收到停止位时,该位置1。RI=1,表示一帧数据接收完毕,并申请中断,要求CPU从接收SBUF取走数据。RI必须用软件清0。
  2. TI:发送中断标志位。。在方式0时,发送完第8位数据时,TI由硬件自动置1。在其他方式中,串行发送停止位的开始时,该位置1。TI=1,表示一帧数据发送完毕,并申请中断,在 CPU响应中断后,在中断服务程序中向SBUF写入要发送的下一帧数据。TI必须用软件清0。
  3. RB8:接收的第9位数据。在方式1时,若SM2=0,RB8接收到的停止位。在方式0中。不使用RB8.
  4. TB8:发送的第9位数据。其值由软件置1或清0。在双机串行通信时,一般作为奇偶校验位使用;在多级串行通信中用来表示主机发送的是地址帧还是数据帧,TB9=1为地址帧,TB8=0为数据帧。在方式0和方式1中,不使用TB8。
  5. REN:允许串行接受位。由软件置1或清0。REN=1,允许串行口接收数据;REN=0,禁止串行口接收数据。
  6. SM2:多机通信控制位。在方式2和方式3时进行。如果SM2=1,则只有当接收到的第九位数据(REB)为1时,才使RI置1,产生中断请求,并将接收到的前8位数据送入SBUF,当接收到的第九位数据位0时,则将接收到的前8位数据丢弃;如果SM2=0,则将前8位数据送入SBUF中,并使RI置1。
  7. SM0/SM1:方式选择位
SM0SM1工作方式功能说明波特率
00方式08位同步移位寄存器常用于扩展I/O口fosc/12
01方式110位URAT8位数据、起始位、结束位可变(由定时器控制)
10方式211位URAT8位数据、起始位0、结束位1和奇偶校验位fosc/32或fosc/64
11方式311位URAT8位数据、起始位0、结束位1和奇偶校验位可变(由定时器控制)

fosc=晶振的频率。
URAT=异步通信寄存器


电源控制寄存器PCON

符号字节地址位名称位名称位名称位名称位名称位名称位名称位名称复位值
PCON87HSMODSMOD0POFGF1GF0PDIDL0xx1 0000

仅SMOD、SMOD0两位与串口有关

  1. SMOD0:帧错位检测有效控制位。当SMOD0=1时,SCON寄存器中的SM0/FE位用于FE(帧错误检测)功能。当SMOD0=0时,SCON寄存器中的SM0/FE位用于SM0功能。
  2. SMOD:波特率选择位。(波特率倍增位):在方式2时,SMOD=1要比SMOD=0时的波特率加倍。

波特率的设定与计算

  1. 方式0
    波 特 率 = f o s c 12 波特率=\frac{f_{osc}}{12} =12fosc
  2. 方式2
    波 特 率 = 2 S M O D 64 × f o s c 波特率=\frac{2^{SMOD} }{64} \times{f_{osc }} =642SMOD×fosc
    串行口工作在方式2时,波特率仅与SMOD位的值有关。
  3. 方式1和方式三
    波 特 率 = 2 S M O D 32 × 定 时 器 T 1 的 溢 出 率 波特率=\frac{2^{SMOD} }{32} \times{定时器T1的溢出率} =322SMOD×T1
    T1常设置为方式2定时,即8位重装入方式,并且不允许T1中断。可以避免软件重装初值带来的定时误差。
    定 时 器 1 的 溢 出 率 = 1 溢 出 周 期 = 1 ( 256 − X ) × T c y = f o s c 12 × ( 256 − X ) 定时器1的溢出率=\frac{1 }{溢出周期}=\frac{1}{(256-X)\times{T_{cy}}}=\frac{f_{osc}}{12\times{(256-X)}} 1=1=(256X)×Tcy1=12×(256X)fosc
    式中Tcy为系统机器周期;X为初值

PC与多个单片机通信

  1. 采用RS-232标准总线通信
  2. 采用RS-422标准总线通信

串口如何使用

串行口工作之前,应对其初始化

  1. 确定T1的工作方式(TMOD);
  2. 计算T1的初值,装载TH1,TL1;
  3. 启动T1(TCON中的TR1位)
  4. 确定串行口控制(SCON)
    中断设置(IE,IP寄存器)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

51单片机串行通信原理 的相关文章

  • C语言 转换10进制为16进制

    实际上就是除16取余然后将其本身除以16 xff0c 得到的这一个数将它转换为具体的16进制数字的过程 xff0c 当然最后还要注意前面的字符位置的添加 span class token comment 进制之间互相转换 xff1a 将十进
  • TCP协议是如何保证传输可靠性的

    TCP确保传输可靠性的方式 校验和序列号 确认应答超时重传连接管理流量控制 xff08 滑动窗口控制 xff09 拥塞控制 校验和 xff1a TCP校验和是一个端到端的校验和 xff0c 由发送端计算 xff0c 然后由接收端验证 其目的
  • TCP的三次握手与四次挥手详解

    文章目录 TCP 协议简述TCP包首部TCP 三次握手建立连接TCP 四次挥手关闭连接常见面试题 xff1a TCP 协议简述 TCP 提供面向有连接的通信传输 xff0c 面向有连接是指在传送数据之前必须先建立连接 xff0c 数据传送完
  • IP数据报格式及分片与重组

    IP数据报 在 TCP IP 协议中 xff0c 使用 IP 协议传输数据的包被称为 IP 数据报 xff08 也叫数据包或数据报文 xff09 xff0c 每个数据包都包含 IP 协议规定的内容 IP协议提供不可靠无连接的数据报传输服务
  • mysql锁机制

    MySQL的锁机制 文章目录 MySQL的锁机制1 行锁2 表锁3 页锁4 乐观锁和悲观锁4 1悲观锁4 2乐观锁5 1InnoDB锁的特性 首先对mysql锁进行划分 xff1a 按照锁的粒度划分 xff1a 行锁 表锁 页锁按照锁的使用
  • uboot开发流程

    uboot其实就是一段比较复杂的单片机代码用来作为引导程序 xff0c 它的主要任务是初始化硬件设备 xff0c 将系统的软硬件环境带到一个合适的状态 xff0c 再将内核从一种存储介质读入到内存中 xff0c 然后跳到内核的入口点去运行
  • java的几种IO

    Java IO方式大体上可以分为三类 xff0c 基于不同的io模型可以简单分为同步阻塞的BIO 同步非阻塞的NIO和异步非阻塞的AIO IO又主要可以分为文件IO和网络IO 针对Java的网络IO模型 xff0c 可以看网络IO模型 xf
  • 哈希冲突和一致性哈希

    文章目录 哈希冲突处理哈希冲突1 开放地址法2 再散列法3 链地址法4 建立一个公共溢出区 一致性哈希普通 hash算法普通 hash 算法的缺陷 一致性哈希算法一致性 hash 算法的优点hash 环的倾斜与虚拟节点 哈希冲突 哈希函数又
  • Redis IO多路复用理解

    IO多路复用在Redis中的应用 Redis 服务器是一个事件驱动程序 xff0c 服务器处理的事件分为时间事件和文件事件两类 文件事件 xff1a Redis主进程中 xff0c 主要处理客户端的连接请求与相应 时间事件 xff1a fo
  • 分布式理论CAP,BASE

    什么是CAP理论 xff1f CAP理论指的是一个分布式系统最多只能同时满足一致性 xff08 Consistency xff09 可用性 xff08 Availability xff09 和分区容错性 xff08 Partition to
  • javaEE接收request参数以及输出结果到html页面

    1 引入需要的类 这里需要注意 xff0c servlet类不是jre自带的 xff0c 需要自己添加 添加相关类主要有以下两种方式 xff1a 下载servlet api jar xff08 tomcat自带 xff09 然后添加到cla
  • 西门子博途数据块(DB块)快速导入导出

    有些人可能会想用查表法计算CRC校验码 查表法效率和速度都很高 但是空间换时间 让你用几秒钟时间 把一张完整的表存入博途里 就算了你单身20年的手速估计也完成不了 想要几秒钟完成也不是不可以 就是导入别人的源文件 拿来主义当然块 继续上图
  • opencv4.0学习笔记

    目录 课程来源 xff1a 哔哩哔哩大学 第一节课 显示第一张图片 环境配置了一个早上 xff0c 到10 48分配置完毕 xff0c 有点难受 还好最后显示出第一张图片 include span class token operator
  • 程序人生

    http zhan renren com itonline from 61 template amp checked 61 true
  • 传感器的使用(一)-火焰传感器

    火焰传感器的介绍 1 工作电压 xff1a DC 3 3V 5V 2 灵敏度可调 xff08 可调电位器 xff09 3 工作温度 xff1a xff0d 10 xff0b 50 4 设有固定螺铨孔 xff0c 方便安装 5 探测角度 60
  • 传感器的使用(二)-温湿度传感器DHT11(HAL库实现)

    温湿度传感器的介绍 DHT11技术性能特征 工作电压范围 xff1a 3 3V 5 5V 工作电流 xff1a 平均0 5mA 输出 xff1a 单总线数字信号 测量范围 xff1a 湿度20 90 xff05 RH xff0c 温度0 5
  • Makefile详解及使用

    内容来自大丙老师的blog Makefile简介 linux环境下 xff0c 当用户编译文件过多的时候 xff0c 使用makefile可以帮助模块化编译文件 xff0c makefile是一个脚本文件 xff0c 根据规则 xff0c
  • QT绘制实时动态曲线——qcustomplot使用(二)

    在QT绘制实时动态曲线 qcustomplot使用 xff08 一 xff09 中 xff0c 介绍使用官方的demo实现动态实时曲线 官方代码移植 针对动态显示数据项目要求 xff0c 移植官方代码demo 开启绘图的函数 span cl
  • QT的多种功能使用记录

    设置控件的边角为圆角 xff1a border top left radius 设置左上角圆角 border top right radius 设置右上角圆角 border bottom left radius 设置左下角圆角 border
  • MYSQL之视图的使用

    视图的使用 使用视图的好处 1 简化select的字段 xff0c 方便管理 2 可以针对不同用户 xff0c 对视图进行不同的查看 也就是说可以做权限管理 3 视图的语法 CREATE VIEW MYTEST AS select 列车号

随机推荐

  • 模糊PID之matlab模糊控制器配置

    前言 使用模糊PID时 xff0c 需要对工具库进行配置 xff0c 模糊PID是由2个输入个3个输出组成 xff0c 输出是E和Ec xff0c 输出是Kp Ki和Kd 打开matlab后 xff0c 需要配置 MATLAB模糊配置 1
  • java url后面带sessionid_url中jsessionid的理解

    1 这是一个保险措施 因为Session默认是需要Cookie支持的 但有些客户浏览器是关闭Cookie的 这个时候就需要在URL中指定服务器上的session标识 也就是5F4771183629C9834F8382E23BE13C4C 用
  • stm32简介+gpio的C语言封装

  • 一些post请求和get请求的调用例子

    目录 post请求 1 http请求 无请求参数 请求包格式为application json 请求包包含若干字段 get请求 1 http请求 响应类型application zip 请求结果为下载一个zip的压缩文件 解压下载的压缩包
  • 80个Python经典资料(教程+源码+工具)汇总——下载目录

    大家好 xff0c 51CTO下载中心根据资料的热度和好评度收集了80个Python资料 xff0c 分享给Python开发的同学 内容包括1个Python专题 66个学习资料 7套Python源码和6个相关软件 附件较多 xff0c 无法
  • Jetson Xavier NX使用yolov5+deepsort实现CSI摄像头的目标跟踪

    文章目录 安装过程运行效果用python代码来打开CSI摄像头实现CSI摄像头目标跟踪报错 AttributeError 39 NoneType 39 object has no attribute 39 shape 39 运行效果 参考文
  • 机械周期、时钟周期、脉冲、晶振频率之间的关系

    机械周期 时钟周期 脉冲 晶振频率之间的关系 晶振频率与脉冲的关系时钟周期与脉冲的关系机械周期与时钟周期的关系 整理下学到的机械周期 时钟周期 脉冲 晶振频率之间的关系 晶振频率与脉冲的关系
  • 51单片机的串行接口介绍

    51单片机的串行接口介绍 串行口结构设置工作方式 xff08 串行口控制寄存器SCON xff09 设置波特率 51单片机内部集成1 2个可编程通用异步串行通信接口 xff08 即UART xff09 xff0c 采用全双工制式 该通信接口
  • IIC通信总线寻址

    IIC的使用 IIC总线简介IIC通信时序IIC总线寻址 IIC总线简介 1 IIC总线是一种由PHILIPS公司开发的两线式串行总线 2 IIC在硬件上是时钟总线SCL和数据总线SDA两条线构成 3 器件连接到总线都是SCL连到一起 xf
  • 通过PCF8591读取电压值(AD转换)

    通过PCF8591读取电压值 xff08 AD转换 xff09 A D的主要指标常用A D器件 PCF8591PCF8591的控制字节 A D的主要指标 1 ADC的位数 xff1a n位ADC代表 xff0c 2的n次方个刻度 2 基准源
  • STM32的光敏传感器

    STM32的光敏传感器 简介硬件连接计算公式程序 简介 1 照射光敏二极管的光强不同 xff0c 通过光敏二极管的电流大小就不同 xff0c 所以可以通过检测电流大小 xff0c 达到检测光强的目的 利用这个电流变化 xff0c 我们串接一
  • MPU6050寄存器介绍

    MPU6050寄存器介绍 MPU6050寄存器介绍电源管理寄存器1 xff08 0X6B xff09 陀螺仪配置寄存器 xff08 0X1B xff09 加速度传感器配置寄存器 xff08 0X1C xff09 FIFO使能寄存器 xff0
  • (10)查看RGB摄像头和深度摄像头

    查看RGB摄像头和深度摄像头 RGB摄像头深度摄像头 1 小车开机 xff0c 连接wifi xff0c 远程登录 登录密码 xff1a dongguan ssh wheeltec 64 192 168 0 100 2 挂载 挂载密码 xf
  • (11)色块跟踪

    色块跟踪 一 查看色块追踪的文件位置 xff1a 在ros simple follower文件下的simple followe的Launch文件 二 可调整识别色块的阈值 xff0c 追踪过程中最大速度 xff0c 中距值 xff0c PI
  • (6)ROS与STM32之间的联系

    ROS与STM32之间的联系 简介两者之间的关系两者之间的通信ROS如何在代码层面去接收stm32发送过来的数据1 整体框架2 机器人底盘类3 构造函数4 主函数5 循环功能函数6 析构函数 简介 1 如何实现ROS与stm32之间的通信
  • keil 局部变量不能查看值,显示为not in scope

    关于编译器的优化 xff0c 参考网上的8051系列的说明如下 xff1a xfeff xfeff 0级优化 xff1a 1 常数折叠 xff1a 只要有可能 xff0c 编译器就执行将表达式化为常数数字的计算 xff0c 其中包括运行地址
  • 算法——均方根检波

    均方根检波 1 均方根检波技术2 高精度采样技术3 STM32的ADC4 程序工程文件 1 均方根检波技术 1 均值检波电路通常采用电容充放电电路作为平均值电路 2 由于输出为整流平均值 xff0c 要求电容充放电时间常数相等 3 电容充放
  • 二.LVGL学习——(lv_obj基础对象)

    二 LVGL学习 xff08 lv obj基础对象 xff09 1 介绍2 对象的工作机制3 对象的创建与删除4 Screen 屏幕对象5 实例代码 xff08 1 xff09 6 实例代码 xff08 2 xff09 1 介绍 LVGL是
  • 三.LVGL学习——(Buttons styles)

    三 LVGL学习 xff08 Buttons styles xff09 1 按钮对象样式 2 程序 定义三个lv style t变量 static lv style t style btn 按钮1按下前的样式变量 static lv sty
  • 51单片机串行通信原理

    51单片机串行通信原理 计算机通信串行通信异步通信同步通信数据传送速率传输方向 单片机串行口串行口特殊功能寄存器串行口控制寄存器SCON电源控制寄存器PCON 波特率的设定与计算 PC与多个单片机通信串口如何使用 计算机通信 计算机通信 x