【51单片机】串口通信(发送与接收)
文章目录
- 前言
- 串口通信简介
- 串口通信的原理
- 串口通信的作用
- 串口编程的一些概念
- 仿真图
- 如何使用串口
- 初始化串口
- 串口模式
- 波特率配置
- 发送与接收
- 发送
- 接收
- 示例代码
- 总结
前言
在嵌入式系统的开发中,串口通信是一种常见且重要的通信方式。它以其简单、稳定的特性在各种应用场景中得到了广泛的使用。本文将介绍51单片机中的串口通信,包括其定义、作用以及在实际应用中的重要性。
串口通信简介
串口通信,顾名思义,是一种串行通信方式,即数据是一位一位地顺序传输的。这与并行通信形成鲜明对比,后者是多位数据同时传输。在51单片机中,串口通信是通过特定的寄存器和引脚来实现的,如SCON寄存器用于设置串口模式,P3.0和P3.1引脚分别用于接收和发送数据。
串口通信的原理
首先,我们需要理解串口是一种串行通信方式,也就是说,数据是一位一位地按顺序传输的。这就像是你在一条单轨铁路上,一辆辆火车依次通过。
当我们要发送数据时,数据会被分解成一个个的二进制位(0或1),然后这些位会一个接一个地通过串口发送出去。这就像是你有一堆火车要发送,你会把它们一个接一个地放到铁轨上,让它们依次出发。
而当我们要接收数据时,串口会一位一位地读取传入的数据,然后把这些位组合起来,形成完整的数据。这就像是你在铁轨的另一端,一辆辆火车依次到达,你会把它们按顺序接收下来,然后组成一列完整的火车。
在这个过程中,还有一些重要的概念,比如波特率。波特率决定了数据传输的速度,也就是说,每秒钟可以传输多少位的数据。这就像是你的火车的速度,速度越快,每秒钟就能运送更多的火车。
总的来说,串口通信就是这样一种一位一位地发送和接收数据的方式,它简单、稳定,被广泛应用在各种电子设备中。
串口通信的作用
串口通信在51单片机中有着广泛的应用。首先,它可以用于单片机与外部设备的通信,如传感器、执行器等。通过串口,单片机可以接收外部设备的数据,或向外部设备发送控制命令。其次,串口通信也可以用于单片机与计算机的通信,这在开发和调试阶段尤其重要。通过串口,开发者可以直接从计算机向单片机发送指令,或从单片机读取运行状态,极大地方便了开发和调试工作。
串口编程的一些概念
-
波特率:波特率是串口通信中的一个重要概念,它决定了数据传输的速度,单位是bps(比特每秒)。就像火车的速度,波特率越高,数据传输的速度就越快。
-
数据位:数据位决定了每次传输的数据的大小。常见的数据位有5位、6位、7位和8位。就像火车的车厢数量,数据位越多,每次可以传输的数据就越多。
-
停止位:停止位用于标记数据传输的结束,常见的停止位有1位和2位。就像火车站,停止位告诉接收端一列火车(也就是一个数据字节)已经到站。
-
校验位:校验位用于检测数据在传输过程中是否出错。就像火车的检票员,校验位会检查数据是否正确。
仿真图
我们在下面找到Virtual Terminal
,他的RXD连接到P3.1,他的TXD连接到P3.0即可
如何使用串口
初始化串口
初始化串口代码如下:
void UartInit() //9600bps@11.0592MHz
{PCON &= 0x7F; //设置波特率不倍速SCON = 0x50; //设置为8位数据,可变波特率TMOD &= 0x0F; //清除定时器1模式位TMOD |= 0x20; //设定定时器1为8位自动重装方式TL1 = 0xFD; //设定定时初值TH1 = 0xFD; //设定定时器重装值TR1 = 1; //启动定时器1ET1 = 0; //禁止定时器1中断EA=1; //开启总中断ES=1; //开启串口中断
}
串口模式
51单片机的SCON(Serial Control Register)是串行口控制寄存器,用于控制串行通信的方式选择、接收和发送,指示串口的状态。SCON既可以字节寻址,也可以位寻址,其字节地址为98H,地址位为98H~9FH。
SCON的各个位的功能如下:
- RI:接收中断标志位,数据接收结束时,标志位会自动置1,需要通过程序将其置0。
- TI:发送中断标志位,数据发送结束时,标志位会自动置1,需要通过程序将其置0。
- RB8:存放发送数据的第9位。
- TB8:存放接收数据的第9位。
- REN:串行接收允许位,用于控制数据接收的允许和禁止,为1时允许接收,为0时禁止接收。
- SM2:多机控制位。
- SM1,SM0:串行工作方式。
波特率配置
TH1和TL1是定时器1的两个寄存器,分别用于存储定时器的高8位和低8位。在51单片机中,定时器1可以被配置为波特率发生器,用于生成串口通信的波特率。
当我们设置 TH1 = 0xFD
和 TL1 = 0xFD
时,实际上是在设置定时器1的溢出时间,从而决定了串口通信的波特率。这里的 0xFD
是256减去所需的计数值,因为定时器是在计数值达到256时溢出的。
例如,如果我们想要设置波特率为9600,晶振频率为11.0592MHz,那么我们可以使用以下公式来计算所需的计数值:
计数值 = 晶振频率 32 × 波特率 计数值 = \frac{晶振频率}{32 \times 波特率} 计数值=32×波特率晶振频率
将11.0592MHz和9600代入公式,我们可以得到计数值大约为3。然后我们用256减去这个计数值,得到253,对应的十六进制数就是FD。所以我们设置 TH1 = 0xFD
和 TL1 = 0xFD
。
发送与接收
发送
我们可以通过把数据给SBUF
寄存器,他就会给我们发送出去,我们可以通过他来实现发送函数
发送函数代码如下:
void Uartsend(unsigned char byte) //定义一个函数,用于发送一个字节的数据
{SBUF = byte; //将要发送的数据(byte)写入到发送缓冲区(SBUF)while(TI == 0); //等待数据发送完成,发送完成后,硬件会将TI置1TI = 0; //数据发送完成后,通过软件将TI清零
}
接收
接收,我们使用中断来接收,接收到的数据存储在SBUF
寄存器里面
串口的接收在函数后面加interrupt 4
即可,表示这个接收中断使用他
void UART_ISR() interrupt 4 //定义一个中断服务程序,用于处理串口中断,中断号为4
{if(RI==1) //如果接收中断标志位RI为1,表示接收到数据{Uartsend(SBUF); //调用Uartsend函数,将接收到的数据(存储在SBUF中)发送出去RI=0; //数据发送完成后,通过软件将接收中断标志位RI清零}
}
示例代码
#include <REGX52.H>
void UartInit() //9600bps@11.0592MHz
{PCON &= 0x7F; //??????SCON = 0x50; //8???,?????TMOD &= 0x0F; //?????1???TMOD |= 0x20; //?????1?8???????TL1 = 0xFD; //??????TH1 = 0xFD; //???????? TR1 = 1; //?????1ET1 = 0; //?????1??EA=1; //????? ES=1; //??????
}
void Uartsend(unsigned char byte)//??
{SBUF=byte;//??????????SBUF//??????????TI=1;?????????while(TI==0);TI=0;//????
}
void UART_ISR() interrupt 4//??????
{if(RI==1)//????{Uartsend(SBUF);//????????????RI=0;//????}
}
int main()
{UartInit();while(1){Uartsend(0x00);}
}
总结
总的来说,串口通信在51单片机中扮演着重要的角色。它以其简单、稳定的特性,为单片机提供了与外部世界交流的桥梁。无论是在硬件控制,还是在软件开发和调试中,串口通信都是不可或缺的一部分。因此,深入理解和熟练掌握串口通信,对于每一个嵌入式开发者来说,都是非常重要的。希望本文能帮助你对51单片机的串口通信有更深入的理解。
相关文章:

【51单片机】串口通信(发送与接收)
文章目录 前言串口通信简介串口通信的原理串口通信的作用串口编程的一些概念仿真图如何使用串口初始化串口串口模式波特率配置 发送与接收发送接收 示例代码 总结 前言 在嵌入式系统的开发中,串口通信是一种常见且重要的通信方式。它以其简单、稳定的特性在各种应用…...
【AI研发工具包】sklearn教程(Scikit-learn)
目录 1. 引言 2. 安装sklearn 3. 导入sklearn 4. 加载数据集 5. 数据预处理 6. 训练模型 7. 评估模型 8. 保存和加载模型 9. 自定义数据 10. 深入sklearn 11. 注意事项 1. 引言 Scikit-learn(简称sklearn)是Python中一个非常流行的机器学习库…...

数位DP——AcWing 1081. 度的数量
数位DP 定义 数位DP是一种动态规划技巧,特别适用于处理与数字的位操作相关的问题,如数字序列的计数、数字的生成等问题。它通过将问题分解为对每一位数字的独立考虑,从而简化问题复杂度,实现高效求解。 数位DP的核心思想是将原…...

2024下半年必追国漫片单,谁将问鼎巅峰?
随着2024年上半年的落幕,国漫市场再度迎来了百花齐放的盛况。从经典续作到全新IP,从玄幻到科幻,每一部作品都以其独特的魅力吸引着观众的目光。本期为大家盘点下半年值得一看的国漫佳作,大胆预测,谁将成为这场神仙打架…...

信息发布小程序h5 uniapp thinkphp
纯手工uniapp thinkphp 全开源打造 信息发布小程序 一、概述 信息发布小程序是一种基于微信平台的小程序应用,旨在为用户提供便捷的信息发布与展示服务。用户可以通过该小程序快速发布各类信息,如招聘、寻物、公告等,同时也可以浏览和搜索…...

Windows定时任务执行脚本
场景:由于网络波动原因导致云数据库没连接上,从而导致某个流程引擎链接不上数据库从而导致该流程引擎服务挂了,网络恢复后 数据库链接正常,但是该引擎服务还是中止状态。 解决方案:在Windows中新建一个定时任务&#…...

优维“统一开放平台”:开放、开发、集成、客制化
基于丰富完善的产品体系,优维重磅推出了统一开放平台。这款由优维自主设计与研发,集数据开发、能力开放、能力集成、客制化为一体的统一开放平台,具备应用市场、应用开发、连接能力、采控平台、API集市、开发者工具等功能模块,可为…...

ChatGPT新纪元:揭秘GPT-4o的多模态能力
GPT-4o登场 探索ChatGPT的多模态创新 今日凌晨,OpenAI向全球宣布了AI发展的新篇章——GPT-4o,每次OpenAI发布重大更新时,尽管令人兴奋,但也不免使众多初创公司的梦想破灭。 GPT-4o的命名中的“o”象征着“omni”——全能的代表。…...

泰勒斯威夫特2022年纽约大学毕业典礼演讲:NYU‘s 2022 Commencement Speaker Taylor Swift
NYU’s 2022 Commencement Speaker Taylor Swift Link: https://www.youtube.com/watch?vOBG50aoUwlI Singer, songwriter, producer, and director Taylor Swift received a Doctor of Fine Arts, honoris causa, at the Commencement for the Class of 2022 and delivered …...
(四)SvelteKit教程:调用外部 API 获取数据
(四)SvelteKit教程:调用 API 我们先按照如下的方式来构建api服务: step 1:npm i json-serverstep 2:在根目录下新建 db.json 文件,内部写入如下内容:{"users": [{"id": 1,"name…...

数据结构-分析期末选择题考点(排序)
何似清歌倚桃李 一炉沈水醉红灯 契子 ✨ 上一期给大家提供了大概会考的题型给老铁们复习的大致思路 这一期还会是一样,我将整理一下排序的题型以及解题方法给你们 由于时间还很多,我就慢慢总结吧,一天一章的样子,明天总结串、后天…...

Python:探索高效、智能的指纹识别技术(简单易懂)
目录 概括 导入库 函数一 参数: 函数二 函数三 主函数 运行结果 src: model_base 7.bmp 编辑 总结 概括 指纹识别是一种基于人体生物特征的身份验证技术。它通过捕捉和分析手指上的独特纹路和细节特征,实现高准确度的身份识别。…...

『SD』AI绘画,不会写提示词怎么办?
提示词 有没有想过,为什么你用 SD 生成的猫是长这样的。 而其他人可以生成这样的猫。 虽然生成的都是猫,但猫与猫之间还是有差距的。 如果你的提示词只是“cat”,那大概率就会出现本文第一张图的那个效果。而如果你加上一些形容词ÿ…...

搭建大型分布式服务(四十二)SpringBoot 无代码侵入实现多Kafka数据源整合插件发布
系列文章目录 文章目录 系列文章目录前言MultiKafkaStarter [V2.2]一、功能特性二、快速开始(生产端)三、快速开始(消费端)四、其它特性五、变更记录六、参考文章 前言 在分布式服务的架构演进中,消息队列作为核心组件…...
Python 学习路线及技巧
一、学习路线 1. 基础阶段 ● 学习 Python 的语法基础,如变量、数据类型、运算符、控制流等。 ● 掌握常用的 Python 标准库,如 os、sys、re、datetime 等。 ● 通过编写简单的程序来巩固基础,如计算器、字符串处理等。 2. 进阶阶段 ● 深入…...

计算机网络知识整理笔记
目录 1.对网络协议的分层? 2.TCP/IP和UDP之间的区别? 3.建立TCP连接的三次握手? 4.断开TCP连接的四次挥手? 5.TCP协议如何保证可靠性传输? 6.什么是TCP的拥塞控制? 7.什么是HTTP协议? 8…...
练习 String翻转 注册处理 字符串统计
p493 将字符串中指定部分进行翻转 package chapter;public class reverse {public static void main(String[] args) {String str "abcdef";str reverseMethod(str,0,3);System.out.println(str);}public static String reverseMethod(String str, int start, in…...

linux的常用系统维护命令
1.ps显示某个时间点的程序运行情况 -a :显示所有用户的进程 -u :显示用户名和启动时间 -x :显示 没有控制终端的进程 -e :显示所有进程,包括没有控制终端的进程 -l :长格式显示 -w :宽…...
java:aocache 0.4.0 缓存控制机制
aoocache发布第一个版本0.1.0时,没有考虑到使用aocache的项目对方法缓存的控制需求。 场景 给同事做培训时,同事提到这个需求,他希望能够有方法主动去清理指定方法的缓存: 他的数据是由其他服务启动时提供的,他的方法…...

试析C#编程语言的特点及功能
行步骤,而不必创建新方法。其声明方法是在实例化委托基础上,加一对花括号以代表执行范围,再加一个分号终止语句。 2.3.3 工作原理 C#编译器在“匿名”委托时会自动把执行代码转换成惟一命名类里的惟一命名函数。再对存储代码块的委托进行设…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...

学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
Bean 作用域有哪些?如何答出技术深度?
导语: Spring 面试绕不开 Bean 的作用域问题,这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开,结合典型面试题及实战场景,帮你厘清重点,打破模板式回答,…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...