当前位置: 首页 > news >正文

51单片机基础 06 串口通信与串口中断

目录

一、串口通信

二、串口协议

三、原理图

四、串口通信配置参数

1、常用的串行口工作方式1

 2、数据发送

3、数据接收

4、波特率计算

5、轮询接收

6、中断接收


一、串口通信

        串口通信是一种常见的数据传输方式,广泛用于计算机与外部设备或嵌入式系统之间的通信。串口通信的特点是逐位传输数据,与并口相比具有以下优势:

  • 传输距离长:适合远距离通信。
  • 占用引脚少:只需两条通信线(发送和接收)。
  • 简单可靠:易于实现和调试。

常见的串口标准

  • RS-232:传统的串口标准,常用于PC和设备之间的通信。
  • RS-485:支持多点通信,适合工业应用。
  • UART(通用异步收发器):嵌入式系统中常用的一种硬件模块,实现异步串口通信。

二、串口协议

串口通信参数

  • 波特率:每秒传输的位数,如9600、115200等。
  • 数据位:每个数据帧的位数,通常为8位。
  • 停止位:用于标识一帧数据的结束,常为1位或2位。
  • 校验位:用于错误检测,可选择无校验、奇校验、偶校验等。

三、原理图

四、串口通信配置参数

中断编号中断名中断源
4串行口中断RI

        可以看到串口接收中断是单片机中断的最低权限位。

中断控制位功能实现
ES串行口中断允许控制位

1:允许串口中断

0:禁止串口中断

        SCON串行控制寄存器。

9FH

9EH

9DH

9CH

9BH

9AH

99H

98H

SM0

SM1

SM2

REN

TB8

RB8

TI

RI

00:同步,波特率固定fosc/12

01:10位异步,波特率可以变

10:11位异步,波特率固定fosc/32\64

11:11位异步,波特率可变

0:双机

1:多机

0:禁止接收

1:允许接受

发送数据第九位

接收数据第九位

发送中断标志

接收中断标志

1、常用的串行口工作方式1

方式1是一帧10位的异步串行通信方式,包括1个起始位(0)8个数据位和一个停止位(1),其帧格式如下:

起始位0

D0

D1

D2

D3

D4

D5

D6

D7

停止位1

 2、数据发送

        当TI=0时,执行“MOV SBUFA”指令后开始发送,由硬件自动加入起始位和停止位,构成一帧数据,然后由TXD端串行输出。发送完后,TXD输出线维持在“1”状态下,并将SCON中的TI置1,表示一帧数据发送完毕

3、数据接收

        RI=0,REN=1时,接收电路以波特率的16倍速度采样RXD引脚,如出现由“1”变“0”跳变,认为有数据正在发送。

        在接收到第9位数据(即停止位)时,必须同时满足以下两个条件:RI=0SM2=0或接收到的停止位为“1”,才把接收到的数据存入SBUF中,停止位送RB8,同时置位RI。若上述条件不满足,接收到的数据不装入SBUF被舍弃。在方式1下,SM2应设定为0。 

4、波特率计算

\frac{2^{^{SMOD}}*f_{OSC}}{32*12*(M-T))}

其中fosc为晶振频率,M为重装载值,T为定时器1的初值,SMOD可选为加倍。

例如fosc=11.0592MHz、9600波特率,如果在定时器1模式2下,M=256,SMOD=0,可以算出

T=253=0XFD

TMOD |= 0x20; // 定时器1设置为模式2(8位自动重载)
TH1 = 0xFD;   // 设置初值为0xFD,波特率9600
TL1 = 0xFD;   // 装载初值
TR1 = 1;      // 启动定时器1
SCON = 0x50;  // 设置串口为模式1,允许接收

5、轮询接收

ES=0;                  //禁止串口中断
while(1)               //死循环,单片机初始化后,将一直运行这个死循环
{//****查询式串口接收程序****if(RI==1)               //如果接收标志位为1,说明有数据接收完毕{                       //RCIF在寄存器被读出后自动清零USARTbuf=SBUF;      //将接收缓冲区内容转至USARTbuf寄存器中RI=0;               //清除接收标志位SBUF=USARTbuf+1;    //将接收到的内容+1后发送出去while(!TI);         //一直等到数据发送完毕}
}

        可以看到在主函数判断RI是否为1,得到获取SBUF的值,如果要发送,则赋值给SBUF即可。

6、中断接收

ES=1;                  //允许串口中断
EA=1;                  //开全局中断
void UART_SER (void) interrupt 4 
{if(RI==1)              //如果接收标志位为1,说明有数据接收完毕{                      //RCIF在寄存器被读出后自动清零USARTbuf=SBUF;     //将接收缓冲区内容转至USARTbuf寄存器中RI=0;              //清除接收标志位SBUF=USARTbuf+1;   //将接收到的内容+1后发送出去while(!TI);        //一直等到数据发送完毕}if(TI) TI=0;           //如果是发送引起的中断,清零
}

        可以看到中断服务函数,不仅会让接收进入中断,发送也会进入中断,其不通过轮询可以大大降低系统的占用。

        同样,中断服务函数不要写太多乱七八糟的代码,越简洁越好。

相关文章:

51单片机基础 06 串口通信与串口中断

目录 一、串口通信 二、串口协议 三、原理图 四、串口通信配置参数 1、常用的串行口工作方式1 2、数据发送 3、数据接收 4、波特率计算 5、轮询接收 6、中断接收 一、串口通信 串口通信是一种常见的数据传输方式,广泛用于计算机与外部设备或嵌入式系统之间…...

Elasticsearch:更好的二进制量化(BBQ)对比乘积量化(PQ)

作者:来自 Elastic Benjamin Trent 为什么我们选择花时间研究更好的二进制量化而不是在 Lucene 和 Elasticsearch 中进行生产量化。 我们一直在逐步使 Elasticsearch 和 Lucene 的向量搜索变得更快、更实惠。我们的主要重点不仅是通过 SIMD 提高搜索速度&#xff0…...

【GNU】gcc -g编译选项 -g0 -g1 -g2 -g3 -gdwarf

1、gcc -g的作用 GCC 的 -g 选项用于在编译时生成调试信息,这些信息会嵌入到生成的目标文件或可执行文件中,主要目的是为了支持调试器(如 gdb)对程序的调试工作。 1.1 生成调试信息 当你在编译代码时使用 -g 选项,GCC…...

MySQL【六】

存储过程 存储过程是一组为了完成特定功能的 SQL 语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。 简单的说存储过程就是具有名字的一段代码。 存储过程的创建 CREATE PROC[ED…...

杰发科技AC7801——ADC定时器触发的简单使用

使用场景 在需要多次采样结果的情况下,比如1s需要10w次的采样结果,可以考虑使用定时器触发采样,定时器设置多少的时间就会多久采样转换一次。 再加上使用dma,采样的结果直接放在dma的数组里面。 实现了自动采样,自动…...

VTK知识学习(8)-坐标系统

1、概述 计算机图形学里常用的坐标系统有4种: 1)、Model坐标系统。定义模型时所采用的坐标系统,通常是局部的笛卡儿坐标系。 2)、World坐标系统。是放置Actor的三维空间坐标系。 Actor(vtkActor类&am…...

IO流部分串讲

一、IO流的概念简析: java将输入与输出比喻为"流",英文:Stream. 就像生活中的"电流","水流"一样,它是以同一个方向顺序移动的过程.只不过这里流动的是字节(2进制数据).所以在IO中有输入流和输出流之分,我们理解他们是连接…...

Excel——宏教程(2)

Excel——宏教程(2) 一)、处理单元格 1、直接赋值与引用 将变量、常量值直接赋给单元格、或将单元格的值直接赋给变量、常量,这是在excel中最简单的单元格赋值及引用方法。 如下例将工作表"Sheet1"A1单元格的值赋给Integer变量I,并将I1的值…...

unity 中 RectTransform 的常用几个属性

RectTransform rectTransform this.GetComponent<RectTransform>(); rectTransform this.transform as RectTransform; Vector3 vector1 rectTransform.position; //自身轴心点相对于锚点的位置&#xff08;编译器显示的pos&#xff09; …...

项目-摄像

树莓派摄像头使用方法 Camera教程 https://www.raspi.cc/index.php?cread&id53&page1 nanopc-t4 ​https://www.raspi.cc/index.php?cread&id53&page1 摄像头型号 Raspberry Pi Camera Rev 1.3 检测故障 dmesg | grep -i mipi piNanoPC-T4:~$ dmesg | …...

摄像机ISP和DSP的区别?

影像处理器是现代数字相机、手机等电子设备中极其重要的一部分&#xff0c;它能够对传感器采集的图像进行多种操作&#xff0c;从而得到更高质量的图像。常见的两种影像处理芯片有ISP&#xff08;Image Signal Processor&#xff09;和DSP&#xff08;Digital Signal Processor…...

Ubuntu24安装配置NDK

1、下载NDK 下载压缩包&#xff0c;下载地址如下&#xff0c;建议下载LTS支持版本。 https://developer.android.google.cn/ndk/downloads?hlcs 2、解压缩 将NDK解压到指定文件夹。如&#xff1a;/opt 或者先解压&#xff0c;再移动到指定目录下。 3、配置环境变量 找到…...

【Next】中间件

概述 Next.js 的 中间件 (Middleware) 是一种在请求完成之前运行的函数&#xff0c;用于对入站请求进行处理和操作。它可以在路由匹配前执行逻辑&#xff0c;用于身份验证、请求重写、重定向、设置响应头等任务。 使用场景 身份验证&#xff1a;在用户访问页面前检查登录状态…...

Vulnhub靶场案例渗透[11]- Momentum2

文章目录 一、靶场搭建1. 靶场描述2. 下载靶机环境3. 靶场搭建 二、渗透靶场1. 确定靶机IP2. 探测靶场开放端口及对应服务3. 扫描网络目录结构4. 代码审计5. 反弹shell6. 提权 一、靶场搭建 1. 靶场描述 - Difficulty : medium - Keywords : curl, bash, code reviewThis wor…...

STM32设计防丢防摔智能行李箱-分享

目录 目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 1.电路图采用Altium Designer进行设计&#xff1a; 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着科技的不断发展&#xff0c;嵌入式系统、物联网技术、智能设备…...

Vue Mixin混入机制

在 Vue.js 中&#xff0c;Mixin&#xff08;混入&#xff09;是一种可复用代码的机制&#xff0c;用于在多个组件之间共享逻辑。通过混入&#xff0c;可以将通用功能提取到一个独立的文件中&#xff0c;然后在组件中引入并使用&#xff0c;而无需重复代码。 基本概念 Mixin 是…...

数据库类型建表

接着上次的数据库笔记&#xff1a; 初始数据库 &#xff08;是博主自己写的&#xff09; 1.数据库类型 1.1数值类型 数据类型大小说明对应JAVA类型BIT[(M)]M指定位数&#xff0c;默认值为1二进制数&#xff0c;M的范围从1—64&#xff0c;存储数值范围从0—2^M-1常用Bool…...

iOS 18 导航栏插入动画会导致背景短暂变白的解决

问题现象 在最新的 iOS 18 系统中,如果我们执行导航栏的插入动画,可能会造成导航栏背景短暂地变为白色: 如上图所示:我们分别向主视图和 Sheet 弹出视图的导航栏插入了消息,并应用了动画效果。可以看到,前者的导航栏背景会在消息插入那一霎那“变白”,而后者则没有任何…...

深度学习之人脸检测

在目标检测领域可以划分为了人脸检测与通用目标检测&#xff0c;往往人脸这方面会有专门的算法&#xff08;包括人脸检测、人脸识别、人脸其他属性的识别等等&#xff09;&#xff0c;并且和通用目标检测&#xff08;识别&#xff09;会有一定的差别&#xff0c;着主要来源于人…...

解决前后端发版本时候,手动清除浏览器缓存

在.html页面中添加标签 后端配置nginx,让index.html不缓存 location /index.html { add_header Cache-Control “no-cache, no-store”; }在vite.config.ts中添加 rollupOpyions: { output: { // 输出编译后的文件名称&#xff1a;【文件名称.时间戳】、【文件名称.版本号.…...

mysql8.4+mysql router读写分离

以下为容器环境内搭建 准备工作: 拉取镜像: 镜像版本mysql8.4container-registry.oracle.com/mysql/community-router8.4 下载mysql_shell mysql-shell-9.0.1-linux-glibc2.17-x86-64bit.tar.gz 下载地址: https://downloads.mysql.com/archives/shell/ 参考 这里对这篇文章…...

鸿蒙NEXT开发-用户通知服务的封装和文件下载通知

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…...

RHCE——系统的延迟任务及定时任务

延迟任务的发起 在系统中我们可以使用 at 命令来发起延迟任务 at 命令执行是调用的是 atd 服务&#xff0c;即使系统最小化安装 atd 也会被安装到系统中 at 任务信息存放在系统中 /var/spool/at 目录中 at 任务的日志文件被存放到 /var/log/cron 中 at 任务执行时如果遇…...

ForEach刷新UI机制

官网地址&#xff1a;ForEach 在ArkUI中&#xff0c;提供了ForEach循环语句&#xff0c;用来初始化一个列表数据&#xff0c;我们知道&#xff0c;当ForEach中的数组发生变化时&#xff0c;会引起UI的刷新&#xff0c;但是究竟如何变化&#xff0c;会引起UI怎样的刷新&#xf…...

机器学习(贝叶斯算法,决策树)

朴素贝叶斯分类 贝叶斯分类理论 假设现有两个数据集&#xff0c;分为两类 我们现在用p1(x,y)表示数据点(x,y)属于类别1(图中红色圆点表示的类别)的概率&#xff0c;用p2(x,y)表示数据点(x,y)属于类别2(图中蓝色三角形表示的类别)的概率&#xff0c;那么对于一个新数据点(x,y)…...

实验十三 生态安全评价

1 背景及目的 生态安全是生态系统完整性和健康性的整体反映&#xff0c;完整健康的生态系统具有调节气候净化污染、涵养水源、保持水土、防风固沙、减轻灾害、保护生物多样性等功能。维护生态安全对于人类生产、生活、健康及可持续发展至关重要。随着城市化进程的不断推进&…...

二级等保要求及设备有哪些?

《网络安全法》规定我国信息系统实际等级保护制度&#xff0c;不同等保等级要求不同&#xff1a; 二级等保&#xff08;指导保护级&#xff09;&#xff1a;等级保护对象受到破坏后&#xff0c;会对公民、法人和其他组织的合法权益产生严重损害&#xff0c;或者对社会秩序和公…...

无人机的动力系统节能——CKESC电调小课堂12

1.优化电机和螺旋桨配置 精准匹配&#xff1a;根据无人机的设计用途和负载要求&#xff0c;精确选择电机和螺旋桨。确保电机的功率、扭矩等参数与螺旋桨的尺寸、螺距等完美匹配。例如&#xff0c;对于轻型航拍无人机&#xff0c;选用功率合适的小尺寸电机搭配高效的小螺旋桨&a…...

人机打怪小游戏(非常人机)

按q攻击 按箭头进行控制 玩家是 怪是* 攻击是^ ​ ​ #include<bits/stdc.h> #include<Windows.h> #include<conio.h> #define fr(i,a,b) for(int ia;i<b;i) #define rd(a,b) rand()%(b-a1)a using namespace std; int x16,y21,dx[4]{-1,0,1,0},dy[4]{0,…...

SpringBoot 集成 Sharding-JDBC(一):数据分片

在深入探讨 Sharding-JDBC 之前&#xff0c;建议读者先了解数据库分库分表的基本概念和应用场景。如果您还没有阅读过相关的内容&#xff0c;可以先阅读我们之前的文章&#xff1a; 关系型数据库海量数据存储策略-CSDN博客 这篇文章将帮助您更好地理解分库分表的基本原理和实现…...

网站建设案例图片/指定关键词排名优化

有时需要读取jpg图像的长和宽&#xff0c;tensorflow提供了很好的支持直接上示例decode_jpeg_data tf.placeholder(dtypetf.string)decode_jpeg tf.image.decode_jpeg(decode_jpeg_data, channels3)image_data tf.gfile.FastGFile("C:/Users/shenwei/Desktop/timg.jpg&…...

济南网站建设jnjy8/长沙优化网站哪家公司好

文章目录Spring Boot1.概念2. SpringBoot项目的创建3. SpringBoot网页版创建4. 启动SpringBootSpring Boot 1.概念 Spring 的诞生是为了简化 Java程序开发&#xff0c;而SpringBoot的诞生就是为了简化Spring程序开发的。也就是SpringBoot就是为了快速搭建Spring项目而诞生的。…...

fastcomet wordpress/高质量软文

对于一些数据量较大的系统&#xff0c;数据库面临的问题除了查询效率低下&#xff0c;还有就是数据入库时间长。特别像报表系统&#xff0c;每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久。因此&#xff0c;优化数据库插入性能是很有意义的。 经过对MySQL Inn…...

邯郸做网站最好的公司/郑州专业seo首选

公司就一个苹果开发者账号,项目接入交付,人员来来往往,很快就将100台设备名额占满. 移除测试设备有下面两种方式: 1.等待新的会员年 续费开发者账号后,苹果会提供一次更新设备列表的机会. 2.向苹果请求更新设备列表的机会 联系苹果:https://developer.apple.com/contact…...

网站集约化建设汇报/手机百度搜索

文章目录前言一、大驼峰法&#xff08;帕斯卡命名法&#xff09;二、小驼峰法三、其他前言 驼峰命名法&#xff0c;是指混合使用大小写字母构成变量和函数名字。在Java开发中&#xff0c;建议使用驼峰命名法&#xff0c;增强代码的识别性和可读性。 一、大驼峰法&#xff08;帕…...

网站不加www/给公司做网站要多少钱

伺服驱动器的工作原理及伺服驱动器的常见接线方法&#xff1a; 伺服驱动器在控制信号的作用下驱动执行电机&#xff0c;因此驱动器是否能正常工作直接影响设备的整体性能。在伺服控制系统中&#xff0c;伺服驱动器相当于大脑&#xff0c;执行电机相当于手脚。而伺服驱动器在伺服…...