10串口通信

2023-05-16

51单片机学习记录10

  • 通信
    • 通信的的基本概念
    • 串口参数及时序图
    • 常用通信接口比较
  • 51单片机串口介绍
    • 串口通信简介
    • 串口内部结构
    • 串口通信相关寄存器
  • 串口通信实验
    • 串口向计算机发送数据
    • 计算机通过串口控制LED

通信

通信的的基本概念

  • 通信的方式
通信方式具体解释
串行通信一条数据线,将数据一位一位地依次传输
并行通信多条数据线,8位数据同时传输
异步通信通信双方各自约定通信速率
同步通信通信双方靠一根时钟线来约定通信速率
单工通信只能有一方发送到另一方,不能反向传输
半双工通信双方可以互相传输数据,但必须分时复用一根数据线
全双工通信双方可以在同一时刻互相传输数据
  • 总线:连接各个设备的数据传输线路,类似于一条马路,把路边各住户连接起来,使住户可以相互交流

串口参数及时序图

  • 通信速率(比特率)衡量通信性能的重要参数
  • 比特率:每秒钟传送二进制数据的位数(单位:位/s即bps=bit per second)
  • 检验位:用于数据验证(九位的最后一位)
  • 停止位:用于数据帧间隔

在这里插入图片描述


常用通信接口比较

在这里插入图片描述
此外还有CAN、USB等


51单片机串口介绍

串口通信简介

  • 串口通信:计算机与外设通过数据信号线、地线,按位进行数据通信的方式,属于串行通信

  • 接口标准:常见接口有RS-232C、RS-232、RS-485等

    常用引脚:TXD、RXD、GND(发送、接收、接地)
    串口通信一定要确保设备之间共地,l即连接GND

  • 连接方式:交叉连接且共地
    在这里插入图片描述

  • 通信协议:RS-232的通信协议遵循96-N-8-1格式

符号含义
96比特率9600bps
N无校验位(校验:排除由外界干扰、降低数据偏差)
8传输数据位的个数,8位1个字节
1代表停止位

串口内部结构

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

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

  • 51单片机的通信接口UART
    只有一个UART,四个工作模式,常用模式1
    详细内容联系下文中串口寄存器来理解

  • 两根通信线连接方法
    在这里插入图片描述TXD与RXD交叉连接
    当只需单向的数据传输时,可以只接一根通信线
    当电平标准不一致时,需要加电平转换芯片
    一定要接地GND

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

电平标准特点表示1表示0
TTL电平对地电压+5V0V
RS232电平更稳定-3 ~ -15V+3 ~ +15V
RS485电平两线压差,差分+2~+6V-2~-6V
  • 内部结构、串口模式图
    将USB电平协议转换为串口的电平协议
    在这里插入图片描述最左端为总线
    定时器控制收、发控制器
    发送给、接收完成后有相应的中断
    发送端TXD接P3_1
    接收端RXD接P3_0
    SBUF:串口数据缓存寄存器
    上下两个SBUF在物理上是两个独立的寄存器,但占用相同的地址,写操作时,写入的是发送寄存器,读操作时,独处的是接收寄存器

串口通信相关寄存器

  • SCON:串口模式控制寄存器(可位寻址,单个赋值
    在这里插入图片描述当PCON.6位=1时,SCON.7用FE(free error)帧错误检测
    当PCON.6位=0时,SCON.7用SM0与SM1一起控制串口通信工作模式
    SM2:与方式2/3有关,多机通信控制位
    REN:为1时允许接收,为0时禁止接收
    TB8:只与方式2/3有关,为第9位数据清零
    RB8:为0时是方式1的接收停止位;方式2/3接收第9位置数据
    TI:发送中断标志位,发送完为1,必须由软件复位
    RI:接收中断标志位,接受完为1,必须由软件复位

四种工作模式

SM0SM1工作方式功能说明
00方式0同步移位
01方式18位,波特率可变
10方式29位,波特率固定
11方式39位,波特率可变
  • PCON:电源控制寄存器(不可位寻址,必须整体赋值
    在这里插入图片描述SMOD:波特率选择位,为1时工作方式1/2/3的波特率加倍;为0时各个工作方式的波特率加倍
    SMOD0:帧错误检测有效控制位,不需要检测可以不配置

  • SBUF:串口数据缓冲寄存器,初始化不需要配置

  • SADEN、SADDR:从机地址控制寄存器(方便多机通信)

  • IE、IPH、IP:与串口中断相关寄存器


串口通信实验

串口向计算机发送数据

  • stc软件中波特率计算器用来得到PCON的赋值
    在这里插入图片描述

串口寄存器、定时器(只能用定时器1)初始化配置

void UART_Init() //9600bps@11.0592MHz
{
	SCON=0x40; //0100 0000
	PCON&=0x80; //波特率不倍速
	
	TMOD &= 0x0F; //清除定时器1模式位
	TMOD |= 0x20; //设定定时器1为8位自动重装方式
	
	TL1 = 0xFD;		//设定定时初值
	TH1 = 0xFD;		//设定定时器重装值
	
	ET1 = 0;		//禁止定时器1中断,只需要溢出就可以得波特率
	TR1 = 1;		//启动定时器1
}

写入程序 Byte要发送的一个字节数据

void UART_SendByte(unsigned char Byte)
{
	SBUF=Byte; //将数据写入串口缓存
	while(TI==0); //检测写入完成
	TI=0; //标志位由软件置零
}

显示数值

void main()
{
	UART_Init();
	while(1)
	{
		UART_SendByte(0x66);
	}
}

串口助手显示时一定要注意选择对应的波特率

在这里插入图片描述

  • 数据显示模式
    ①HEX模式/十六进制模式/二进制模式:以原始数据的形式显示
    ②文本模式/字符模式:以原始数据编码后的形式显示

  • 间隔1s向计算机发送递增数据

改动main函数部分

void main()
{
	UART_Init();
	while(1)
	{
		UART_SendByte(Sec);
		Sec++;
		Delay(100);
	}
}

计算机通过串口控制LED

利用中断系统,当数据发送到计算机时,触发中断,接收数据

  • 需要接受数据,用到SCON.4的REN=1接收位
  • 打开串口的中断EA=1;ES=1;允许触发中断

改动主函数部分并添加中断服务子函数

void main()
{
	UART_Init();		//串口初始化
	while(1)
	{
		
	}
}

void UART_Routine() interrupt 4
{
	if(RI==1)					//如果接收标志位为1,接收到了数据
	{
		P2=SBUF;				//读取数据
		UART_SendByte(SBUF);	//将受到的数据发回串口
		RI=0;					//接收标志位清0
	}
}

注意!!!用串口助手打开串口时,一定要调整相应的波特率!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

10串口通信 的相关文章

  • 51单片机串口通信(UART)

    项目描述 1 串口工作方式为1 8位UART 波特率可变 无校验位 2 通信数据格式为 1位起始位 8位数据位 1位停止位 3 上电后MCU给上位机发送问候语 之后等待上位机的信息 MCU和上位机的通信为收发交替进行 MCU接收到的信息会实
  • TMS320F28377X芯片SCI模块RS485通信,数据末尾被0xFF替换的问题解决

    SCI串口通信 用RS232方式 SCI模块 用如下的 直接这样 就可以发送 void Write SCIC Uint8 pBuf Uint16 len rs232 Uint16 i for i 0 i lt len i while Sci
  • 串口通信----串口接收框接收不到数据

    在进行串口调试时 数据发送没有问题 但是其他串口给该串口发送数据时 接收框始终接收不到数据 也不提示错误 感觉接收函数不起作用 对照之前没有问题的串口程序 发现只有这部分没有添加进去 其他都是一样的 问题应该在这里 添加进去后 正常接收了
  • C51单片机串口工作的四种方式总结

    方式0 同步移位寄存器输入输出方式 1 利用移位寄存器实现串行 并行的转换 功能 2 波特率 fosc 12 3 RXD P3 0 用于串行数据的输入和输出 TXD P3 1 充当输出的移位时钟 4 数据大小 8位 5 方式0发送 串口接口
  • 18.3. TTY 线路设置

    http oss org cn kernel book ldd3 ch18s03 html 18 3 TTY 线路设置 当一个用户要改变一个 tty 设备的线路设置或者获取当前线路设置 他调用一个许多的不同 termios 用户空间库函数或
  • Qt 串口发送0x00

    应用场景 大恒光电的平移台 GCD 040101M 先看看要发什么东西 这是串口监听软件截取的结果 绿色的字 串口协议主要包括三个部分 前面是固定的 后面是key 后面是 0x00 最后面是数据 错误版本1 bool MoveStage w
  • 可靠传输的基本概念

    可靠传输的基本概念 使用差错检错技术 接受方的数据链路层就可以检测出真在传输过程中是否出现误码 这取决于数据链路层向上层提供的服务类型 不可靠传输 仅仅丢弃有误码的帧 其他的什么也不做 可靠传输 想方法实现发送端发送什么 接收端就收到什么
  • STM32串口溢出中断问题

    之前调试程序 遇到了串口溢出中断的问题 导致主程序被卡死 这里总结分享一下经验 希望对读者有用 对于STM32F103系列单片机 使能接收中断后 溢出中断就会自动被使能 那什么时候会发生溢出中断呢 在RXNE 1 的的条件下 也就是上次数据
  • Python实现串口通信(pyserial)

    Python实现串口通信 pyserial pyserial模块封装了对串口的访问 兼容各种平台 安装 pip insatll pyserial 初始化 简单初始化示例 import serial ser serial Serial com
  • 蓝牙mesh组网-JDY-24M初步探索

    操作步骤如下 这款JDY 24M蓝牙功能强大 我主要应用其中mesh组网这个功能 mesh组网简单来说 就是组网的这几个蓝牙是可以互相通信 一一通信是通过蓝牙地址来确定的 一 配置组网 需要用到两根USB转TTL的线 JDY 24M蓝牙2个
  • Android 蓝牙串口通信Demo

    目录 一 前言 二 效果图 三 源码 带注释 1 布局代码 2 Java代码 3 权限声明 四 注意 五 项目源码下载 一 前言 在学校和机电的同学组队准备做一个智能小车去参加比赛 需要我开发一个小车的控制app 所以我开始学习蓝牙串口通信
  • 485通讯与MODBUS的区别与联系

    最近做智能检测的项目 设备 串口之间的通讯比较多 一会儿485 一会儿modbus RTU 有点晕了 这里重新梳理一下RS485 485通讯协议 ModBus通讯协议 Modbus Rtu通讯这几个点的联系和区别 先说RS485吧 RS48
  • LabVIEW串口通信实际操作

    理论基础 LabVIEW串口通信基础知识 读取串口字节 我们新建一个空白 VI 借助串口调试助手和虚拟串口 在 LabVIEW 中编写的一个最简单的例子 写一个基本的读取串口字节的程序 在程序框图中编程如下 注意这里 串口配置放到循环外 不
  • Ubuntu+Python环境做上位机

    最近需要制作程控电阻箱的上位机 使得大学毕业后就不再接触硬件的我无从下手 拿到机器后不知道怎么与其进行通信 Google上的资料也很少 现将我的环境搭建过程记录下来 希望对和我一样的小白有所帮助 软件环境 Ubuntu 16 04 pyth
  • STM32串口配置实验

    STM32 串口简介 串口作为 MCU 的重要外部接口 同时也是软件开发重要的调试手段 其重要性不言而喻 现在基本上所有的 MCU 都会带有串口 STM32 自然也不例外 STM32 的串口资源相当丰富的 功能也相当强劲 ALIENTEK
  • Unity缺少System.IO.Ports

    问题 我需要使用串口相关的类库 但是引用不到 怎么解决的 PlayerSetting 界面把 Api Compatibility Level 切换为 NET 4 x 然后就好了
  • 使用ROS通过串口获取遥控器信号(二)

    使用ROS通过串口获取遥控器信号 二 十 编写串口通信节点 sudo gedit catkin ws src uart communication src commu cpp 加入以下代码 根据实际情况修改自己的代码 注意serial的AP
  • 【Qt串口调试助手】1.8 - 修改Qt应用图标和窗口图标

    修改Qt应用图标和窗口图标 GitHub源码 Qt串口调试助手下载 修改应用图标 首先选择一张喜欢的图片 来作为应用图标 图片格式必须为 ico easyicon net 有很多可供下载的资源 下载好后 将其放入工程目录 之后添加到 Qt的
  • 【Python】PyCharm中调用另一个文件的函数或类

    欢迎来到Python专栏 PyCharm中调用另一个文件的函数或类 o o 嗨 我是小夏与酒 博客主页 小夏与酒的博客 该系列文章专栏 Python学习专栏 文章作者技术和水平有限 如果文中出现错误 希望大家能指正 欢迎大家关注 目录 Py
  • 51单片机的串口通迅

    通信的基本方式分为并行通信和串行通信 并行通信 数据的各位同时在多根数据线上发送或接收 特点 控制简单 传输速度快 由于输线较多 长距离传送时成本高且接收方的各位同时接收存在困难 串行通信 使用一条数据线 将数据一位一位的依次传输 每一位数

随机推荐

  • qemu 虚拟机和宿主机之间传输文件

    实现简单的虚拟机和宿主机之间的文件传输 使用dd创建一个文件 xff0c 作为虚拟机和宿主机之间传输桥梁 dd if 61 dev zero of 61 opt share img bs 61 1M count 61 200格式化share
  • apt update和apt upgrade命令 - 有什么区别?

    在之前的文章中 xff0c 我们查看了APT 命令以及您可以使用包管理器来管理包的各种方法 这是一个总体概述 xff0c 但在本指南中 xff0c 我们暂停并重点关注 2 个命令用法 这些是apt update和apt upgrade命令
  • 48 个 Linux 面试问题和答案

    你在准备 Linux 面试吗 xff1f 我们准备了一些常见的 Linux 面试问题及其答案 如果您是初学者 xff08 具有一定的 Linux 知识或获得认证 xff09 或具有专业的 Linux 管理经验 xff0c 那么下面的问答有助
  • linux服务篇-Xinetd服务

    Xinetd 61 eXtended InterNET services daemon 扩展互联网服务守护进程 61 超级互联网守护进程 61 超级服务 xff0c xinetd是新一代的网络守护进程服务程序 xff0c 又叫超级Inter
  • 内参、外参、畸变参数三种参数与相机的标定方法与相机坐标系的理解

    https blog csdn net yangdashi888 article details 51356385 1 相机参数是三种不同的参数 相机的内参数是六个分别为 xff1a 1 dx 1 dy r u0 v0 f u0 v0为图像
  • C语言中的__FILE__、__LINE__和#line

    原文链接 xff1a http hi baidu com 419836321 blog item fcf5ceec484681cfb31cb1f7 html C语言中的 FILE 用以指示本行语句所在源文件的文件名 xff0c 举例如下 x
  • PX4 SITL MAVROS速度控制-用机身坐标系发布速度

    不改变PX4控制双闭环源码 xff0c 仅依靠mavros现有的速度控制和位置控制话题 xff0c 来实现旋翼圆形轨迹 1 位置控制 xff1a mavros setpoint position local 优点 xff1a 位置准确 xf
  • 用java简单的实现单链表的基本操作

    此代码仅供参考 xff0c 如有疑问欢迎评论 xff1a package com tyxh link 节点类 public class Node protected Node next 指针域 protected int data 数据域
  • 算法:海量日志数据,提取出某日访问百度次数最多的那个IP

    首先是这一天 xff0c 并且是访问百度的日志中的IP取出来 xff0c 逐个写入到一个大文件中 注意到IP是32位的 xff0c 最多有个2 32个IP 同样可以采用映射的方法 xff0c 比如模1000 xff0c 把整个大文件映射为1
  • 使用JUnit测试预期异常

    开发人员常常使用单元测试来验证的一段儿代码的操作 xff0c 很多时候单元测试可以检查抛出预期异常 expected exceptions 的代码 在Java语言中 xff0c JUnit是一套标准的单元测试方案 xff0c 它提供了很多验
  • BlockingQueue深入分析

    1 BlockingQueue 定义的常用方法如下 抛出异常特殊值阻塞超时插入add e offer e put e offer e time unit 移除remove poll take poll time unit 检查element
  • Qt对directshow的封装

    在源码路径中 xff1a qt everywhere opensource src 5 1 1 qtmultimedia src plugins directshow xff0c 有两个文件夹player 和 camera xff0c 1
  • 聚合类新闻客户端产品功能点详情分析

    产品功能点 功能 今日头条 百度新闻 鲜果 ZAKER 媒体订阅 个性化内容推荐 个性化订阅 RSS 视频新闻 评论盖楼 搜索新闻 离线下载 地方新闻 一键分享 收藏 推送 天气 夜间模式 线上活动 主题设置 感兴趣 语音读文章 字体设置
  • 聚合类新闻客户端初体验

    初体验的产品 xff1a 今日头条 ios3 6 百度新闻 ios4 4 0 ZAKER ios4 4 5 鲜果 ios3 8 7 中搜搜悦 ios4 0 1 Flipboard ios2 3 9 1 Flipboard 一款国外很火的ap
  • 聚合类新闻客户端的改进

    zaker和鲜果是最早的聚合类新闻产品 xff0c 前几年发展很快 xff0c 迅速占领了市场 xff0c 但近两年发展变得缓慢 xff0c 而今日头条自发布以来才两年 xff0c 用户量就迅速超过了zaker和鲜果 xff0c 使用起来非
  • 单例模式优缺点

    主要优点 xff1a 1 提供了对唯一实例的受控访问 2 由于在系统内存中只存在一个对象 xff0c 因此可以节约系统资源 xff0c 对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能 3 允许可变数目的实例 主要缺点 xff
  • 适配器模式优缺点

    优点 xff1a 1 将目标类和适配者类解耦 2 增加了类的透明性和复用性 xff0c 将具体的实现封装在适配者类中 xff0c 对于客户端类来说是透明的 xff0c 而且提高了适配者的复用性 3 灵活性和扩展性都非常好 xff0c 符合开
  • Oracle 的 Round函数

    Round函数用法 xff1a 截取数字 格式如下 xff1a ROUND xff08 number decimals xff09 其中 xff1a number 待做截取处理的数值 decimals 指明需保留小数点后面的位数 可选项 x
  • eclipse报错:Failed to load the JNI shared library

    电脑自装系统以来 xff0c 好久没有写java代码了 xff0c 所以一直也没用 eclipse IDE xff0c 今天将eclipse打开 xff0c 报了个问题 xff0c Failed to load the JNI shared
  • 10串口通信

    51单片机学习记录10 通信通信的的基本概念串口参数及时序图常用通信接口比较 51单片机串口介绍串口通信简介串口内部结构串口通信相关寄存器 串口通信实验串口向计算机发送数据计算机通过串口控制LED 通信 通信的的基本概念 通信的方式 通信方