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

51单片机——串口通信(重点)

1、通信

通信的方式可以分为多种,按照数据传送方式可分为串行通信和并行通信;

按照通信的数据同步方式,可分为异步通信和同步通信;

按照数据的传输方向又可分为单工、半双工和全双工通信

1.1 通信速率

        衡量通信性能的一个非常重要的参数就是通信速率,通常以比特率(Bitrate)来表示。比特率是每秒钟传输二进制代码的位数,单位是:位/秒( bps)

如:每秒钟传送 240 个字符,而每个字符格式包含10位(1个起始位、1个停止位、8个数据位),这时的比特率为:10位×240个/秒=2400bps

        波特率表示每秒钟传输了多少个码元。而码元是通信信号调制的概念,通信中常用时间间隔相同的符号来表示一个二进制数字,这样的信号称为码元。

如:常见的通信传输中,用0V表示数字0,5V 表示数字1,那么一个码元可以表示两种状态0和1,所以一个码元等于一个二进制比特位,此时波特率的大小与比特率一致;如果在通信传输中,有0V、2V、4V以及6V分别表示二进制数00、01、10、11,那么每个码元可以表示四种状态,即两个二进制比特位,所以码元数是二进制比特位数的一半,这个时候的波特率为比特率的一半

由于很多常见的通信中一个码元都是表示两种状态,所以我们常常直接以波特率来表示比特率

1.2 串口通信简介

        串口通信(Serial Communication),是指外设和计算机间通过数据信号线、地线等按位进行传输数据的一种通信方式,属于串行通信方式。串口是一种接口标准,它规定了接口的电气标准,没有规定接口插件电缆以及使用的协议

        串口通信中通常使用的是异步串口通信,即没有时钟线,所以两个设备要通信,必须要保持一致的波特率

1.3 串口内部结构

(1)51单片机均有的5个中断来介绍,其内部结构框图如下所示: 

        RXDTXD对应的是P3.0P3.1口的附加功能,RI(SCON.0)或TI(SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断,中断号4

 (2)串口内部结构图如下所示:

        右边的TXD和RXD为单片机IO口,TXD对应的是P3.1管脚,RXD对应的是P3.0管脚

串口内部结构中有TH1和TL1,所以需要定时器T1

2、串口相关寄存器

2.1 串口控制寄存器 SCON

(1)SM0和SM1为工作方式选择位

(2)SM2:多机通信控制位,主要用于方式2和方式3

        当SM2=1时可以利用收到的RB8来控制是否激活RI(RB8=0时不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)

        当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2,可以实现多机通信。

(3)REN:允许串行接收位。

        由软件置REN=1,则启动串行口接收数据;

        若软件置REN=0,则禁止接收。

(4)TB8:在方式2或方式3中,是发送数据的第9位,可以用软件规定其作用。可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。 在方式0和方式1中,该位未用到。

(5)RB8:在方式2或方式3中,是接收到数据的第9位,作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。

(6)TI:发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请。

(7)RI:接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请 

2.2 电源控制寄存器 PCON

 

SMOD:波特率倍增位。在串口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0

3、计算波特率

波特率的计算公式:

        方式0的波特率=fosc/12

        方式1的波特率=((2^SMOD)/32)*(T1溢出率)

        方式2的波特率=((2^SMOD)/64)*fosc

        方式3的波特率=((2^SMOD)/32)*(T1溢出率)

其中T1溢出率=fosc/{12×[256-(TH1)]}

一般借助51波特率初值计算软件得到一个波特率初值

为什么要计算一个初值?

        在串口通信中,通过波特率软件计算出一个初值,通常是为了配置定时器1所需的波特率

        这个初值对于确保数据的正确传输至关重要,因为它直接影响到定时器的溢出率,进而决定了串口通信的波特率

        初值的作用有:确定波特率、同步数据传输、避免数据丢失或错误

4、串口初始化步骤

①确定T1的工作方式(TMOD寄存器)

②确定串口工作方式(SCON寄存器)

③计算T1的初值(设定波特率),装载TH1、TL1

④启动T1(TCON中的TR1位)

⑤如果使用中断,需开启串口中断控制位(IE寄存器)

eg:设置串口为工作方式1、波特率为9600、波特率加倍、使用中断

void uart_init(u16 baud){  //baud:初值,由波特率计算工具得到
    TMOD|=0X20;  //定时器1的工作方式为2            定时器
    SCON=0x50;  //SCON寄存器的工作方式为1     串口
    PCON=0x80;  //PCON寄存器,波特率加倍       串口
    TH1=baud;  //定时计数器1的初值配置               定时器
    TL1=baud;                                                          定时器
    EA=1;  //打开总中断开关                                    串口                                  
    ES=1;  //打开接收中断                                        串口
    TR1=1;  //打开计算器                                          定时器(寄存器 TCON)
}

        在主函数中调用该函数并传入0XFA值即可,如下: 

uart_init(0xfa);  //定时器1的工作方式为2;晶振频率:11.0592;波特率:9600;SMOD:1 

5、软件设计

要实现的功能是:当串口助手发送数据给单片机,单片机原封不动转发给串口助手显示

#include "reg51.h"
typedef unsigned int u16;
typedef unsigned char u8;
//串口初始化
void uart_init(u16 baud){  //baud:初值,由波特率计算工具得到
    TMOD|=0X20;  //定时器1的工作方式为2
    SCON=0x50;  //SCON寄存器的工作方式为1
    PCON=0x80;  //PCON寄存器,波特率加倍
    TH1=baud;  //定时计数器1的初值配置
    TL1=baud; 
    EA=1;  //打开总中断开关
    ES=1;  //打开接收中断
    TR1=1;  //打开计算器
}
void main(){
    uart_init(0xfa);  //定时器1的工作方式为2;晶振频率:11.0592;波特率:9600;SMOD:1
    while(1){
        
    }
}
void uart() interrupt 4{
    u16 rec_data=0;  //接收数据变量
    RI=0;  //手动置0,清除接收中断的标志位
    rec_data=SBUF;  //SBUF接收完数据
    SBUF=rec_data;  //将总线上的数据再写入SBUF
    while(!TI);  //系统自动置1
    TI=0;  //手动置0
}

结果如下图所示:

相关文章:

51单片机——串口通信(重点)

1、通信 通信的方式可以分为多种,按照数据传送方式可分为串行通信和并行通信; 按照通信的数据同步方式,可分为异步通信和同步通信; 按照数据的传输方向又可分为单工、半双工和全双工通信 1.1 通信速率 衡量通信性能的一个非常…...

Taro+Vue实现图片裁剪组件

cropper-image-taro-vue3 组件库 介绍 cropper-image-taro-vue3 是一个基于 Vue 3 和 Taro 开发的裁剪工具组件,支持图片裁剪、裁剪框拖动、缩放和输出裁剪后的图片。该组件适用于 Vue 3 和 Taro 环境,可以在网页、小程序等平台中使用。 源码 https:…...

PHP民宿酒店预订系统小程序源码

🏡民宿酒店预订系统 基于ThinkPHPuniappuView框架精心构建的多门店民宿酒店预订管理系统,能够迅速为您搭建起专属的、功能全面且操作便捷的民宿酒店预订小程序。 该系统不仅涵盖了预订、退房、WIFI连接、用户反馈、周边信息展示等核心功能,更…...

Hadoop3.x 万字解析,从入门到剖析源码

💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…...

VUE3 常用的组件介绍

Vue 组件简介 Vue 组件是构建 Vue 应用程序的核心部分,组件帮助我们将 UI 分解为独立的、可复用的块,每个组件都有自己的状态和行为。Vue 组件通常由模板、脚本和样式组成。组件的脚本部分包含了各种配置选项,用于定义组件的逻辑和功能。 组…...

deepin-Wine 运行器合并打包器和添加从镜像提取 DLL 的功能

Wine 运行器是一个图形化工具,旨在简化 Wine 环境的管理和使用。它不仅提供了运行和管理 Wine 容器的功能,还增加了打包器和从镜像提取 DLL 的功能。以下是该工具的详细介绍和使用方法。 一、工具概述 Wine 运行器是一个使用 Python3 的 tkinter 构建的图…...

[大模型]本地离线运行openwebui+ollama容器化部署

本地离线运行Openweb-ui ollama容器化部署 说明安装internet操作内网操作问题线程启动错误最终命令总结说明 最近公司有一个在内网部署一个离线大模型的需求,网络是离线状态,服务器有A100GPU,一开始是想折腾开源chatGML4大模型,因为使用过gml3,所以想着部署gml4应该不难。…...

再次梳理ISP的大致流程

前言: 随着智能手机的普及,相机与我们的生活越来越紧密相关。在日常生活中,我们只需要轻轻按下手机上的拍照按钮,就能记录下美好时刻。那么问题来了:从我们指尖按下拍照按钮到一张色彩丰富的照片呈现在我们面前&#x…...

HBuilderX打包ios保姆式教程

1、登录苹果开发者后台并登录已认证开发者账号ID Sign In - Apple 2、创建标识符(App ID)、证书,描述文件 3、首先创建标识符,用于新建App应用 3-1、App的话直接选择第一个App IDs,点击右上角继续 3-2、选择App&#x…...

《解锁鸿蒙系统AI能力,开启智能应用开发新时代》

在当今科技飞速发展的时代,鸿蒙系统以其独特的分布式架构和强大的AI能力,为开发者们带来了前所未有的机遇。本文将深入探讨开发者如何利用鸿蒙系统的AI能力开发更智能的应用,开启智能应用开发的新时代。 鸿蒙系统构筑了15系统级的AI能力&…...

rhcsa练习(3)

1 、创建文件命令练习: ( 1 ) 在 / 目录下创建一个临时目录 test ; mkdir /test ( 2 )在临时目录 test 下创建五个文件,文件名分别为 passwd , group , bashrc &#x…...

科研绘图系列:R语言绘制Y轴截断分组柱状图(y-axis break bar plot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍特点意义加载R包数据下载导入数据数据预处理画图输出总结系统信息介绍 Y轴截断分组柱状图是一种特殊的柱状图,其特点是Y轴的刻度被截断,即在某个范围内省略了部分刻度。这种图表…...

跳出技术陷阱,探索财富自由的多元路径

自古以来,我们常听到这样一句话:“一技在手,吃穿不愁”。这种理念在以往的时代背景下,确实为许多人提供了稳定的生计保障。然而,在信息爆炸、产能过剩的今天,这种固守一技之长的观念正逐渐显露出其不足&…...

qml SpringAnimation详解

1. 概述 SpringAnimation 是 Qt Quick 中用于模拟弹簧效果的动画类。它通过模拟物体在弹簧力作用下的反应,产生一种振荡的动画效果,常用于模拟具有自然回弹、弹性和振动的动态行为。这种动画效果在 UI 中广泛应用,特别是在拖动、拉伸、回弹等…...

中学综合素质笔记3

第一章职业理念 第三节 教师观 考情提示: 单选题材料分析题 学习要求: 理解、 识记、 运用 (一)教师职业角色的转变(单选材料分析) 从教师与学生的关系看——对学生 新课程要求教师应该是学生学习的引…...

uniapp vue2版本如何设置i18n

如何设置i18n在该软件设置过语言的情况下优先选择所设置语言,在没有设置的情况下,获取本系统默认语言就,将系统默认语言设置为当前选择语言。 1、下载依赖: npm install vue-i18n --save 2、创建相关文件(在最外层&…...

【踩坑记录❌】ubuntu 安装 NVIDIA 显卡驱动不要 autoinstall

背景 在 ubuntu 22.04 安装 NVIDIA 显卡驱动参考了 博客 的步骤进行,发现有很多评论也出现了无法联网的情况 后续解决 尝试了网卡驱动下载的各类方法,安装驱动的过程中又缺失内核头、 gcc 编译器等文件。由于没有网络,每次缺失的文件只能从…...

vue3 + ts + element-plus(el-upload + vuedraggable实现上传OSS并排序)

这里创建项目就不多说了 安装element-plus npm install element-plus 安装vuedraggable npm install vuedraggable 安装ali-oss npm install ali-oss 这里是封装一下:在components创建文件夹jc-upload>jc-upload.vue 在封装的过程中遇到了一个问题就是dr…...

SQL开窗函数相关的面试题和答案

基本排序与分组问题 题目:有学生成绩表tb_score,包含字段SNO(学号)、SCLASS(班级)、CHINESE(语文成绩)、ENGLISH(英语成绩)、ARITH(数学成绩&…...

【数据分析(一)】初探 Numpy

目录 前言1. 一维 array 的生成2. 一维 array 的基本操作2.1. 查看属性2.2. 花式索引2.3. 条件筛查2.4. 数据统计 3. n 维 array 的生成4. n 维 array 的基本操作4.1. 查看属性4.2. 查询和切片4.3. 花式索引4.4. 矩阵 前言 Numpy是Python的常用开源数值计算扩展库,用…...

国产化ARM平台-飞腾派开发板硬件与系统

国产化ARM平台-飞腾派开发板硬件与系统 一、飞腾E2000处理器 飞腾腾珑E2000系列包括E2000Q、E2000D、E2000S三个系列,芯片集成飞腾自主研发的高能效和低功耗处理器核,E2000Q集成2个FTC664和2个FTC310处理器核,E2000D集成2个FTC310处理器核&…...

[ LeetCode 75 ] 283 移动零(JavaScript)

283 移动零 题目描述解题思路步骤解析时间和空间复杂度代码实现 题目描述 LeetCode 283 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操…...

前端学习汇总

一、打包工具 1.1、vite vite:vite -- 开发环境 热更新_vite 热更新-CSDN博客 1.2、webpack 常用loader:webpack基础---常用loader_webpack 常用loader-CSDN博客 loader:webpack4和webpack5区别1---loader_webpack4与webpack5处理图片的…...

蓝笔科技 | 超凡妈妈赋能计划-【北大生涯规划师特别企划】

12月27日,“超凡妈妈赋能计划-北大生涯规划师特别企划”在广州正式启动,据了解,本次超凡妈妈赋能计划是由广州蓝笔科技信息有限公司牵头发起并主办,中国关心下一代健康体育基金会作为公益支持单位,北京大学作为项目技术…...

【电路笔记 TMS320C6***DSP】C6748 EDMA3配置笔记 寄存器配置+影子通道寄存器+配置示例

目录 参照资料内存映射寄存器分类影子通道寄存器传输中断PaRAM参数SRC、DSTA_B_CNT、CCNTSRC_DST_BIDXSRC_DST_CIDXOPTopt示例 链接传输LINK_BCNTRLD (LinkAddress/BCountReloadParameter)示例代码示例配置:块传输示例配置:矩阵转置示例配置:…...

2025新春烟花代码(二)HTML5实现孔明灯和烟花效果

效果展示 源代码 <!DOCTYPE html> <html lang"en"> <script>var _hmt _hmt || [];(function () {var hm document.createElement("script");hm.src "https://hm.baidu.com/hm.js?45f95f1bfde85c7777c3d1157e8c2d34";var …...

apollo内置eureka dashboard授权登录

要确保访问Eureka Server时要求输入账户和密码&#xff0c;需要确保以下几点&#xff1a; 确保 eurekaSecurityEnabled 配置为 true&#xff1a;这个配置项控制是否启用Eureka的安全认证。如果它被设置为 false&#xff0c;即使配置了用户名和密码&#xff0c;也不会启用安全认…...

后台管理系统全屏功能实现

后台管理系统中有一个比较常见的功能就是全屏显示&#xff0c;以方便用最大的屏幕查看系统&#xff0c;特别是在小屏模式下。 对于 screenfull 而言&#xff0c;浏览器本身已经提供了对用的 API&#xff0c;点击这里即可查看&#xff0c;这个 API 中&#xff0c;主要提供了两个…...

风电叶片市场竞争激烈:开启绿色能源新篇章的巨大潜力

一、引言 面对全球气候变化的严峻挑战&#xff0c;可再生能源的开发与利用已成为各国共识。风电&#xff0c;作为技术最成熟、最具规模化开发条件的可再生能源之一&#xff0c;正以前所未有的速度发展。而风电叶片&#xff0c;作为风电机组的核心部件&#xff0c;其技术创新与…...

【Unity3D日常开发】Unity3D中适用WEBGL打开Window文件对话框打开/上传文件

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群&#xff1a;398291828小红书小破站 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 Unity3D发布的WEBGL程序是不支持直接的I/O操…...

中文单页面网站模板免费下载/设计网站logo

[Usaco2007 Mar]Ranking the Cows 奶牛排名 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 504 Solved: 343[Submit][Status][Discuss]Description 农夫约翰有N(1≤N≤1000)头奶牛&#xff0c;每一头奶牛都有一个确定的独一无二的正整数产奶率&#xff0e;约翰想要让这些奶牛…...

wordpress显示代码框/seo推广主要做什么的

这篇文章主要为大家详细介绍了SQL Server 使用命令调用SSIS包的简单示例&#xff0c;具有一定的参考价值&#xff0c;可以用来参考一下。感兴趣的小伙伴&#xff0c;下面一起跟随512笔记的小编两巴掌来看看吧&#xff01;具体操作步骤如下&#xff1a;1.首先&#xff0c;当然是…...

北京信息网招聘最新/旺道seo推广有用吗

点击上方“程序IT圈”&#xff0c;选择“置顶公众号”技术文章第一时间送达&#xff01;作者&#xff1a;废物大师兄 cnblogs.com/cjsblog/p/9756978.html1. 前言1.1. 集成方式Spring Boot中集成Elasticsearch有4种方式&#xff1a;REST ClientJestSpring DataSpring Data Elas…...

做ppt模板网站/百度百科入口

http://rcv.kaist.ac.kr/~ail/...

网站广告做的好的企业案例分析/google关键词优化排名

在互联网业务蒸蒸日上的今时今日&#xff0c;系统架构日渐复杂&#xff0c;随着软件产品和工程团队的变革&#xff0c;许多开源的监控工具应运而生&#xff0c;其中有一些相当出名&#xff0c;比如 Zabbix、Nagios 还有 StatsD。也有一些问题被大家不断讨论&#xff0c;例如&am…...

wordpress 按时间排序/微信小程序免费制作平台

开发Android应用过程一般分为三步&#xff1a; 1、创建一个Android工程&#xff1b; 2、在xml布局文件中定义应用所包含的控件&#xff1b; 3、在Java代码中实现业务逻辑。 此文就介绍第一部分&#xff0c;创建一个Android工程&#xff0c;具体步骤如下&#xff1a; 1、打开ecl…...