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

news/2025/3/5 11:31:07/

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

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

前置知识:C语言

单片机套装:普中STC单片机>51单片机开发板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.ppmy.cn/news/1576804.html

相关文章

游戏引擎学习第134天

仓库:https://gitee.com/mrxiao_com/2d_game_3 回顾 到目前为止,由于我们专注于古代游戏的开发,我们还没有深入思考资源应该如何存储以及在最终版本中如何高效管理。因此,在完成游戏的基本框架之前,我们必须先决定如何存储这些资…

使用300M带宽是否可以流畅地玩原神

本文来自腾讯元宝 ps:搬家了,需要装个路由器打游戏。 根据搜索结果,300M的网络带宽完全可以满足《原神》的流畅游玩需求。以下是具体分析及优化建议: 一、带宽需求与300M网络的适配性 ​带宽要求较低​ 《原神》作为一款开放世界…

stable-diffusion-webui 加载模型文件

背景 stable-diffusion-webui 安装完毕后,默认的模型生成的效果图并不理想,可以根据具体需求加载指定的模型文件。国内 modelscope 下载速度较快,以该站为例进行介绍 操作步骤 找到指定的模型文件 在 https://modelscope.cn/models 中查找…

ArcGIS操作:13 生成最小外接矩阵

应用情景:筛选出屋面是否能放下12*60m的长方形,作为起降场候选点(一个不规则的形状内,判断是否能放下指定长宽的长方形) 1、面积初步筛选 Area ≥ 720 ㎡ 面积计算见 2、打开 ArcToolbox → Data Management Tools …

centos和ubunt下安装redis

1,判断环境是否有gcc gcc --version 如果未安装则执行 yum install -y gcc tcl 2,安装包下载 cd /usr/local mkdir redis wget https://download.redis.io/releases/redis-4.0.11.tar.gz tar -xvf redis-4.0.11.tar.gz cd redis-4.0.11.tar.gz 编译 mak…

excel的宏是什么

Excel的宏(Macro)是指一组自动执行任务的指令,通常是VBA(Visual Basic for Applications) 代码,用于自动化Excel中的重复性操作。例如,可以用宏来批量处理数据、生成报表、格式化单元格、执行计…

python 百度翻译API接口封装与应用

简介 本文介绍了一个优化的百度翻译API封装实现,提供了一个简单、可靠且功能丰富的翻译接口。该实现包含错误处理、请求频率限制、自动重试等特性,适合在生产环境中使用。 特性 模块化设计:使用类封装,方便维护和扩展完善的错误…

《基于HarmonyOS NEXT API 12+,搭建新闻创作智能写作引擎》

在信息爆炸的时代,新闻行业对于内容生产的效率和质量有着极高的要求。AI技术的发展为新闻创作带来了新的变革契机,借助AI智能写作助手,新闻工作者可以快速生成新闻稿件的初稿,大大提高创作效率。本文将基于HarmonyOS NEXT API 12及…