【51单片机】程序实验13.串口通信

主要参考学习资料:B站【普中官方】51单片机手把手教学视频

开发资料下载链接:http://www.prechin.cn/gongsixinwen/208.html

前置知识:C语言

单片机套装:普中STC51单片机开发板A4标准版套餐7

目录

  • 通信的基本概念
    • 串行通信与并行通信
      • 串行通信
      • 并行通信
    • 异步通信与同步通信
      • 异步通信
      • 同步通信
    • 单工、半双工与全双工通信
    • 通信速率
  • 51单片机串口介绍
    • 串口通信简介
      • 接口标准
      • 通信协议
      • 串口内部结构
    • 串口相关寄存器
      • 串口控制寄存器SCON
      • 电源控制寄存器PCON
    • 串口工作方式
      • 方式0
      • 方式1
      • 方式2和方式3
    • 串口的使用方法
      • 波特率计算
      • 串口初始化步骤
  • 硬件设计
  • 实验13 串口通信

通信的基本概念

串行通信与并行通信

串行通信

使用一条数据线,8位顺次传送,适用于远距离传输,数据处理较复杂。

并行通信

使用多条数据线,8位同时传送,数据处理简单,传输速度快,成本高。

异步通信与同步通信

异步通信

发送设备和接收设备使用各自的时钟,要求两者时钟尽量但不严格一致。

相邻字符帧间隙任意,相邻位间隙相等。

同步通信

发送设备时钟控制接收设备使两者时钟同步。

相邻字符帧不留间隙,相邻位间隙相等。

外同步:两条线分别传输数据信号和时钟信号。

自同步:一条线传输数据和时钟的叠加信号。0先低后高,1先高后低。

单工、半双工与全双工通信

单工通信(广播):数据只按一个方向传输,不能反向传输。

半双工通信(对讲机):数据可以按两个方向传输,但只能分时进行。

全双工通信(电话):数据可以同时按两个方向传输。

通信速率

比特率(bps):每秒钟传输二进制代码的位数。

波特率(Baud):每秒钟传输的码元数。

码元:承载信息量的基本信号单位。通常一个码元表示两种状态0和1,此时波特率=比特率。

51单片机串口介绍

串口通信简介

串口通信指外设和计算机之间以数据信号线和地线按照位进行数据传输的通信方式。

接口标准

串口(串行接口)是一种接口标准,规定了接口的物理标准,没有规定电缆和使用协议。

接口根据针脚数量不同分为DB25和DB9:

带孔的为母头,带针的为公头,两者管脚从同一方向看顺序相反,连接时一一对应:

RS-232C标准接口主要引脚定义

(插针序号括号外为DB25脚位,括号内为DB9脚位)

插针序号信号名称功能信号方向
1PGND保护接地
2(3)TXD发送数据(串行输出)DTE→DCE
3(2)RXD接收数据(串行输入)DTE←DCE
4(7)RTS请求发送DTE→DCE
5(8)CTS允许发送DTE←DCE
6(6)DSRDCE就绪(数据建立就绪)DTE←DCE
7(5)SGND信号接地
8(1)DCD载波检测DTE←DCE
20(4)DTRDTE就绪(数据终端准备就绪)DTE→DCE
22(9)RI振铃指示DTE←DCE

其中串口通信常用的为2/3/5脚(DB9)。

RS-232C电平规定逻辑1为-3V到-15V,逻辑0为3V到15V。51单片机需要通过MAX232芯片将RS232电平与TTL电平进行转换。

通信协议

RS232的通信协议通常遵循96-N-8-1格式:9600bps-无校验位-8位传输数据位-使用1为停止位

校验位:解决串口通信因外部干扰导致的传输偏差问题,分为奇校验、偶校验和无校验(零校验)。

停止位:数据包的起始位由逻辑电平0表示,而停止位可以是0.5/1/1.5/2。

串口内部结构

TXD/RXD:单片机的串口管脚,TXD对应P3.1,RXD对应P3.0。

SBUF:串口数据缓存寄存器,存储发送和接受的数据。

TH1/TL1:定时器1的功能,采用方式2工作,用于产生波特率。

SMOD:特殊寄存器,控制T1溢出率的分频,进而控制T1/R1的采样频率。置零时先二分频再十六分频,置一时直接十六分频。

TI/R1:发送/接收控制器,数据发送/接收完成时产生发送/接收中断。

串口相关寄存器

串口控制寄存器SCON

76543210
字节地址:98HSM0SM1SM2RENTB8RB8TIRI
SM0SM1方式说明波特率( f o s c f_{\mathrm{osc}} fosc为外部晶振频率)
000移位寄存器 f o s c / 12 f_{\mathrm{osc}}/12 fosc/12
01110位异步收发器(8位数据)可变
10211位异步收发器(9位数据) f o s c / 64 f_{\mathrm{osc}}/64 fosc/64 f o s c / 12 f_{\mathrm{osc}}/12 fosc/12
11311位异步收发器(9位数据)可变

SM2和RB8用于方式2和方式3中多级通信(一台主机通过一条总线向多个设备发送数据)下数据的选择性接收。

SM2控制RB8是否激活。当SM2=0,RB8不激活;当SM2=1,RB8激活。

RB8在激活状态下控制RI是否激活。当RB8=0,收到信息即丢弃;当RB8=1,收到信息存储进SBUF。RB8在非激活状态下,收到信息均可以存储进SBUF。

REN是允许接收位,置一时启动串行口接收数据,置零时禁止接收,通常置一。

TB8和RB8工作在方式2和方式3用来发送数据的第9位,可用于奇偶校验位或多级通信中地址帧和数据帧的标志位。

TI/R1是发送/接收中断标志位,在方式0当串行发送/接收第8位数据结束时或在其他方式串行发送/接收停止位时置一发送中断请求,需要软件清零取消中断申请等待下一次中断。

电源控制寄存器PCON

76543210
字节地址:97HSMOD

PCON只用到最高位,用于控制波特率的分频。

串口工作方式

方式0

方式0数据由RXD(P3.0)输入或输出,移位脉冲由TXD输出,发送和接收均为8位数据,低位在前高位在后,波特率为 f o s c / 12 f_{\mathrm{osc}}/12 fosc/12

输出(图中线条高低表示对应的高低电平)

输入

方式1

方式1是10位数据的异步通信口,其中起始位为低电平,停止位为高电平。TXD为数据发送引脚,RXD为数据接收引脚。

输出

发送开始时,存储在输出寄存器中的数据帧以起始位为首从左向右移入TXD引脚并输出,同时输出寄存器左边的空缺补零。当停止位移至输出寄存器右端时,左边其余位全为0,检测电路检测到该条件使控制电路进行最后一次移位,并将TI置一。

输入

位采样脉冲为波特率,由TH1和TL1提供,控制对RXD的电平采样。采样接收到下降沿时起始位有效,开始接收一帧数据,数据帧以起始位为首从右向左移入移位寄存器。起始位移至移位寄存器左端时,控制电路进行最后一次移位。当RI=0且SM2=0时,移位寄存器将接收到9位数据的前8位存储进SBUF,第9位进入RB8并将RI置一。

方式2和方式3

方式2和方式3与方式1的不同在于数据帧为11位,多出一位RB8/TB8。其数据帧的接收和发送过程与方式1类似,区别在于在接收数据时,进入RB8的信号从停止位变为了数据位的第9位,可以控制多级通信中信息的选择性发送和接收(当RI=0且SM2=0时)。

输出(过程与方式1类似)

输入

串口的使用方法

波特率计算

方式0: f o s c / 12 f_{\mathrm{osc}}/12 fosc/12

方式2: ( 2 S M O D / 64 ) ⋅ f o s c (2^{\mathrm{SMOD}}/64)\cdot f_{\mathrm{osc}} (2SMOD/64)fosc

方式1/3: ( 2 S M O D / 32 ) ⋅ T 1 溢出率 (2^{\mathrm{SMOD}}/32)\cdot\mathrm{T1}溢出率 (2SMOD/32)T1溢出率

2 S M O D 2^{\mathrm{SMOD}} 2SMOD的意义是当SMOD=0/1,进行/不进行二分频。

T 1 溢出率 = f o s c / [ 12 × ( 256 − T H 1 ) ] \mathrm{T1}溢出率=f_{\mathrm{osc}}/[12\times(256-\mathrm{TH1})] T1溢出率=fosc/[12×(256TH1)]

其中 12 / f o s c 12/f_{\mathrm{osc}} 12/fosc是一个机器周期, 256 − T H 1 256-\mathrm{TH1} 256TH1为定时器在自动重载模式下溢出一次所需的机器周期数(参见外部中断实验中定时器中断部分),两者相乘取倒数得到溢出率。

串口初始化步骤

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

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

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

④启动T1(TCON中的TR1位);

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

//串口初始化函数
void uart_init(u8 baud)
{//设置定时器工作方式2,或运算不干扰其他位TMOD |= 0X20;//设置串口工作方式1SCON = 0X50;//不采用二分频PCON = 0X80;//定时器初值设置TH1 = baud;TL1 = baud;//打开接收中断ES = 1;//打开总中断EA = 1;//打开定时器TR1 = 1;
}

硬件设计

该电路未采用MAX232电平转换芯片,而是USB转TTL的CH340G转换芯片,现今笔记本电脑大多没有RS232接口,因此通过USB串口互转实现串口通信。其原理与下载电路相同,单片机程序烧录的过程实质上也是串口通信。

实验13 串口通信

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

使用波特率计算器获取十六进制初值:

#include "reg52.h"typedef unsigned char u8;
typedef unsigned int u16;
//串口初始化函数
void uart_init(u8 baud)
{TMOD |= 0X20;SCON = 0X50;PCON = 0X80;TH1 = baud;TL1 = baud;ES = 1;EA = 1;TR1 = 1;
}void main()
{//串口初始化uart_init(0XFA);while(1){}
}
//处理接收中断(RI=1)的服务函数,串口中断代号为4
void uart() interrupt 4
{//定义接收数据的变量u8 rec_data = 0;//将接收控制器置零RI = 0;//读取SBUF接收的数据rec_data = SBUF;//将数据写入SBUF进行发送SBUF = rec_data;//等待发送中断(TI=1)while(!TI);//将发送控制器置零TI = 0;
}

先烧录程序,然后打开串口助手软件:

连接开发板,检查端口号是否匹配,波特率设为实验所用波特率,在串口设置中检验校验方式,最后打开串口。

输入数据后发送,上方窗口最新行显示接收到的数据:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/72457.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文阅读笔记:ArcFace: Additive Angular Margin Loss for Deep Face Recognition

论文阅读笔记:ArcFace: Additive Angular Margin Loss for Deep Face Recognition 1 背景2 创新点3 方法4 模块4.1 Softmax4.2 权重归一化4.3 乘性角度间隔4.4 特征归一化4.5 加性余弦间隔4.6 加性角度间隔4.7 二值化情况下的比较4.8 目标Logit分析 5 效果5.1 消融实…

代码随想录算法训练营 | 图论 | DFS

98. 所有可达路径// DFS #include <bits/stdc.h> using namespace std;vector<vector<int>> result; vector<int> path;void dfs(const vector<list<int>> &graph, int i, int target) {if (i target) {result.push_back(path);retu…

GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks

GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks KDD22 推荐指数&#xff1a;#paper/⭐⭐#​ 动机 本文探讨了图神经网络&#xff08;GNN&#xff09;在迁移学习中“预训练-微调”框架的局限性及改进方向。现有方法通过预训练&#xff08…

迷你世界脚本方块接口:Block

方块接口&#xff1a;Block 彼得兔 更新时间: 2024-08-27 11:04:56 具体函数名及描述如下&#xff1a; 序号 函数名 函数描述 1 isSolidBlock(...) 是否是固体方块 2 isLiquidBlock(...) 是否是液体方块 3 isAirBlock(...) 是否是气体方块 4 getBl…

Windows下git疑难:有文件无法被跟踪

Windows下git疑难&#xff1a;有文件无法被跟踪 最近在写一个c# WinFrom程序&#xff0c; 奇怪的是&#xff0c;frmMain.cs这个文件一直无法被跟踪 研究了很久&#xff0c; 参考这一篇 https://blog.csdn.net/m0_37315653/article/details/83064810 git rm --cached ./ -r 之…

Live2d官方项目运行

Live2d官方项目运行 1-参考网址 教程网址&#xff1a;https://blog.csdn.net/qq_39123467/article/details/131735085live2d官方地址&#xff1a;https://live2d.com/cubism-sdk/download/ 2-上手实践 1&#xff09;先打开官方项目-全部路径打开2&#xff09;cd /CubismSdkFo…

BUU43 [BJDCTF2020]The mystery of ip 1

前置知识&#xff1a; X - Forwarded - For注入 X - Forwarded - For&#xff08;XFF&#xff09;是一个 HTTP 头字段&#xff0c;用于记录客户端的真实 IP 地址。当客户端请求经过代理服务器时&#xff0c;代理服务器会将客户端的 IP 地址添加到 X - Forwarded - For 头中。…

张岳教授:语言模型推理与泛化研究 | ICLR 2025 特邀报告与团队专场

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; AITIME 01 ICLR 2025预讲会特邀报告 AITIME 02 ICLR 2025预讲会西湖大学张岳老师实验室专场 01 AI生成文本的自动化检测 Glimpse: Enabling White-Box Methods to Use Proprietary Models for Zero-Shot LLM-Ge…

MySQL SQL 优化专题

MySQL SQL 优化专题 1. 插入数据优化 -- 普通插入&#xff08;不推荐&#xff09; INSERT INTO tb_user VALUES(1,tom); INSERT INTO tb_user VALUES(2,cat); INSERT INTO tb_user VALUES(3,jerry);-- 优化方案1&#xff1a;批量插入&#xff08;推荐&#xff0c;不建议超过1…

【AI深度学习基础】NumPy完全指南进阶篇:核心功能与工程实践(含完整代码)

NumPy系列文章 入门篇进阶篇终极篇 一、引言 在掌握NumPy基础操作后&#xff0c;开发者常面临真实工程场景中的三大挑战&#xff1a;如何优雅地处理高维数据交互&#xff1f;如何在大规模计算中实现内存与性能的平衡&#xff1f;怎样与深度学习框架实现高效协同&#xff1f;…

Python学习第十八天之深度学习之Tensorboard

Tensorboard 1.TensorBoard详解2.安装3.使用4.图像数据格式的一些理解 后续会陆续在词博客上更新Tensorboard相关知识 1.TensorBoard详解 TensorBoard是一个可视化的模块&#xff0c;该模块功能强大&#xff0c;可用于深度学习网络模型训练查看模型结构和训练效果&#xff08;…

【GraphQL API 漏洞简介】

GraphQL API 漏洞简介 一、漏洞原理与分类二、漏洞检测方法三、典型利用方式四、工具推荐防御建议 GraphQL API 因其灵活性和高效性被广泛应用&#xff0c;但也因设计和实现缺陷存在多种安全风险。以下从漏洞原理、检测方法及利用方式三个维度进行详细分析&#xff1a; 一、漏洞…

Windows逆向工程入门之MASM数据结构使用

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 第一章&#xff1a;MASM数据定义体系精要 1.1 基础数据类型全景 1.1.1 整型数据规范 1.1.2 浮点数据编码 1.2 复合数据结构 1.2.1 多维数组定义 1.2.2 复杂结构体 第二章&#xf…

筑牢安全防线:工商业场所燃气泄漏防护新方案

燃气安全是企业经营不可逾越的生命线。在餐饮后厨、化工车间、酒店锅炉房等场所&#xff0c;可燃气体一旦泄漏&#xff0c;极易引发严重事故。如何实现精准监测、快速响应&#xff0c;成为工业及商业领域安全管理的核心诉求。旭华智能深耕安全监测领域&#xff0c;推出的工业及…

本地部署大数据集群前置准备

1. 设置VMware网段 虚拟网络编辑器——更改设置——选择VMnet8——子网改成192.168.88.0——NAT设置——网关设置为192.168.88.2 2. 下载CentOS操作系统 下载CentOS 7.6(1810)版本 3. 在VMware中安装CentOS操作系统 创建新的虚拟机——典型——安装光盘映像文件——输入账…

【蓝桥杯单片机】第十二届省赛

一、真题 二、模块构建 1.编写初始化函数(init.c) void Cls_Peripheral(void); 关闭led led对应的锁存器由Y4C控制关闭蜂鸣器和继电器 由Y5C控制 2.编写LED函数&#xff08;led.c&#xff09; void Led_Disp(unsigned char ucLed); 将ucLed取反的值赋给P0 开启锁存器…

PyCharm接入本地部署DeepSeek 实现AI编程!【支持windows与linux】

今天尝试在pycharm上接入了本地部署的deepseek&#xff0c;实现了AI编程&#xff0c;体验还是很棒的。下面详细叙述整个安装过程。 本次搭建的框架组合是 DeepSeek-r1:1.5b/7b Pycharm专业版或者社区版 Proxy AI&#xff08;CodeGPT&#xff09; 首先了解不同版本的deepsee…

CSS 系列之:grid 布局

基本概念 <template><div class"parent"><div class"box">p1-1</div><div class"box">p1-2</div><div class"box">p1-3</div></div><div class"parent"><…

数学软件Matlab下载|支持Win+Mac网盘资源分享

如大家所了解的&#xff0c;Matlab与Maple、Mathematica并称为三大数学软件。Matlab应用广泛&#xff0c;常被用于数据分析、无线通信、深度学习、图像处理与计算机视觉、信号处理、量化金融与风险管理、机器人&#xff0c;控制系统等领域。 Matlab将数值分析、矩阵计算、科学…

水仙花数(华为OD)

题目描述 所谓水仙花数&#xff0c;是指一个n位的正整数&#xff0c;其各位数字的n次方和等于该数本身。 例如153是水仙花数&#xff0c;153是一个3位数&#xff0c;并且153 13 53 33。 输入描述 第一行输入一个整数n&#xff0c;表示一个n位的正整数。n在3到7之间&#x…