day07 51单片机-串口通信

news2024/12/24 2:19:52

51 单片机-串口通信

1 串口通信

1.1 需求描述

本案例讲解如何通过串口和PC以9600波特率,无校验位、1停止位通信。最终实现PC向单片机发送字符串,单片机回复PC。本案例中采用串口1通信。

1.2 硬件设计

1.2.1 串口工作原理

串口是将数据按照比特逐一发送的通信接口。在串口通信中,最重要的参数是波特率。在单片机中,波特率等于1s内传输的比特数。

串口通信中,要将波特率调整为9600,要求1秒钟内刚好发送9600个时钟信号,需要一个9600Hz的时钟源。单片机使用串口通信时,必须占用定时器1作为时钟源。定时器1每溢出1次,发送一个时钟信号。只要让它每秒钟溢出9600次即可。

串口通信需要占用定时器1,同时需要设置一些基本参数。

​ 串口工作模式设置为1(8位UART,波特率可变)。

​ 波特率要设置为9600。

在这里插入图片描述

1.1.2 串口具体设置

具体参数设置方式,需要配置串口通信,初始化流程如下:

在这里插入图片描述

1)SCON

在这里插入图片描述

​ SM0、SM1:本案例中采用 0、1工作方式。

在这里插入图片描述

​ SM2:在方式1时,如果SM2位为1,则只有在接收到有效的停止位时才置位中断请求标志位RI为1,如果SM2为0,则无论是否接收到有效的停止位都可以置位RI。官方推荐模式1,SM2应设置为0。

​ REN:允许/禁止串行接收控制位。由软件置位REN,即REN=1为允许串行接收状态,可启动串行接收器RxD,开始接收信息。软件复位REN,即REN=0,则禁止接收。

​ TI:发送中断请求标志位。在方式0,当串行发送数据第8位结束时,由内部硬件自动置位,即TI=1,向主机请求中断,响应中断后必须用软件复位,即TI=0。在其他方式中,则在停止位开始发送时由内部硬件置位,必须用软件复位。

​ RI:接收中断请求标志位。在方式0,当串行接收到第8位结束时,由内部硬件自动置位RI=1,向主机请求中断,响应中断后必须用软件复位,即RI=0。在其他方式中串行接收到停止位的中间时刻由内部硬件置位,即RI=1,必须由软件复位即RI=0。

从以上内容中可以看出,我们应该进行如下设置:

SM0 SM1 SM2 REN TB8 B8 TI RI
0 1 0 1 0 0 0 0

2)PCON

在这里插入图片描述

​ SMOD:波特率选择位。当用软件置位SMOD,即SMOD=1,则使串行通信方式1、2、3的波特率加倍;SMOD=0,则各工作方式的波特率加倍。复位时SMOD=0。

PCON的主要作用是波特率选择。

#define FOSC     11059200 // 晶振频率
#define NT       12 // 单片机的工作周期为12T

#define T2TEMP    256 - (FOSC / NT / 32 / BAUD_RATE)

3)SBUF

在这里插入图片描述

SBUF是串行口缓冲寄存器,地址为99H,实际上是2个缓冲器,发送SBUF和接收SBUF。写SBUF的操作完成待发送数据的加载,读SBUF的操作可获得已接收到的数据。STC89C5xRC.H中已有如下声明。

sfr SBUF = 0x99;

对该变量赋值即可写入发送SBUF寄存器,读取该变量即可读取接收SBUF寄存器。

4)定时器1相关变量

在这里插入图片描述

目前为止我们已经可以通过设置TH1的值来设置串口波特率。TH1这个变量属于定时器1,也就是说当串口工作时,定时器1要被占用。关于定时器1的寄存器如下:

TL1/TH1:定时器相关变量:

在这里插入图片描述

其中关于定时器0的相关变量解释:

变量 作用
TF1 定时器T1溢出标志。T1被允许计数以后,从初值开始加1技术。当最高位产生溢出时由硬件置“1”TF1,向CPU请求中断,一直保持到CPU响应中断时,才由硬件清“0”TF1。这一位的置位和清零都可以由硬件控制,不需要软件控制。
TR1 定时器1运行开关,置1开启定时器0,置0关闭定时器0
GATE 计数器模式外部输入控制(定时器模式必须置为0)
C/T(——) 置0表示定时器模式,1表示计数器模式
M1、M0(低4bit) M1=1,M0=0表示8位自动重载定时器,当溢出时将TL1存放的值自动重装入TH1.
TL1 定时器1低8位寄存器
TH1 定时器1高8位寄存器

综上所述,最终串口的初始化代码如下:

//波特率
#define BAUD_RATE 9600
//定时器初始值
#define T2TEMP    256 - (FOSC / NT / 32 / BAUD_RATE)

void Dri_UART_Init()
{
    // 设置串口工作模式
    SM0 = 0;
    SM1 = 1;
    SM2 = 0;
    REN = 1;

    //接受和发送完成标识
    //TI 1 :已经有数据
    //TI 0 :无数据数据
    //RI 1 :数据正在接收
    //RI 0 :无数据在接收
    TI  = 1

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

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

相关文章

视频教程下载:ChatGPT驱动的SEO、网络营销、生产力提升

用户遇到的一个常见问题是在ChatGPT对话过程中难以保持清晰的目的和专注。这可能导致互动无效和浪费时间。这门课程将教给各种创意人士——艺术家、制造者、博主、讲师和内容创作者——如何制定理想的提示配方,从而产生更有成效的对话和更高的回报。 这是一门关于如…

《R语言与农业数据统计分析及建模》学习——数据框的向量化操作

1、向量化操作的概念和有时 向量化操作是指对整个数据结构进行一次性操作,而不需要使用显式的循环结构(即同时处理整个数据框的元素,而不需要使用for循环逐个处理每个元素)。优势如下: 代码简洁:不需要编写…

3.Docker常用镜像命令和容器命令详解

文章目录 1、Docker镜像命令1.1 获取镜像1.2 查看镜像1.2.1、images命令列出镜像1.2.2、tag命令添加镜像标签1.2.3、inspect命令查看详细信息1.2.4、history命令查看镜像历史 1.3 搜索镜像1.4 删除和清理镜像1.4.1、使用标签删除镜像1.4.2、清理镜像 1.5 创建镜像1.5.1、基于已…

node.js如何实现留言板功能?

一、实现效果如下: 20240422_160404 二、前提配置: 配置:需要安装并且导入underscore模板引擎 安装:在控制台输入npm install underscore -save 文件目录配置: 1》在文件里建一个data文件夹,此文件夹下…

SLS 查询新范式:使用 SPL 对日志进行交互式探索

作者:无哲 引言 在构建现代数据和业务系统的过程中,可观测性已经变得至关重要,日志服务(SLS)为 Log/Trace/Metric 数据提供了大规模、低成本、高性能的一站式平台服务,并提供数据采集、加工、投递、分析、…

【PhpStorm的环境配置与应用的简单介绍】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

AWD线下攻防万字最完整战术(记第一届“长城杯”半决赛战术)

目录 准备阶段 1.登录比赛平台(获取资产) 查看账号账号修改 服务器SSH口令mysqlWEB服务口令(后台密码)数据库后台管理员密码 账号用户检查 2.dump源码(方便应急响应恢复靶机) 网站源码备份 压缩文件解压文件备份到服务器本地上传…

探索大型语言模型(LLM)在人类性格个性评估(MBTI)中的前景与应用

1.概述 大型语言模型(LLM)如ChatGPT在各个领域的应用确实越来越广泛,它们利用庞大的数据集进行训练,以模拟人类的语言理解和生成能力。这些模型在提供信息、解答问题、辅助决策等方面表现出了强大的能力,但它们并不具…

Docker pull镜像名称 把本地镜像推送到远程详解

Docker pull镜像名称 把本地镜像推送到远程详解: Docker 镜像 仓库 容器介绍 以及镜像仓库详解 下载一个alpine的镜像演示,alpine是一个比较小的的linux镜像。 docker pull alpinedocker tag d4ff818577bc docker.io/itying/alpine:v1.0.1docker tag d4…

Macs Fan Control Pro for Mac:全面优化Mac风扇控制软件

Macs Fan Control Pro for Mac是一款专为苹果电脑用户设计的风扇控制软件,旨在通过精确的风扇速度调节,全面优化Mac的散热性能,确保系统始终运行在最佳状态。 Macs Fan Control Pro for Mac中文版下载 该软件具备实时监控功能,能够…

ESP32与SD卡交互实现:文件读写实战与初始化详解及引脚定义

本代码实现ESP32与SD卡的交互,包括定义SPI引脚、创建自定义SPI类实例、编写WriteFile与ReadFile函数进行文件读写。setup函数初始化串口、SPI、SD卡,向“/test.txt”写入“myfirstmessage”,读取并打印其内容。loop函数留空待扩展。 1. 需要…

区块链安全应用-------压力测试

基于已有的链进行测试(build_chain默认建的链 四个节 点): 第一步:搭链 1. 安装依赖 在ubuntu操作系统中,操作步骤如下: sudo apt install -y openssl curl 2. 创建操作目录, 下载安装脚本 ## 创建操作…

HDFS分布式文件存储系统

1-1 HDFS的存储机制 按块(block)存储 hdfs在对文件数据进行存储时,默认是按照128M(包含)大小进行文件数据拆分,将不同拆分的块数据存储在不同datanode服务器上 拆分后的块数据会被分别存储在不同的服务器上 副本机制 为了保证hdfs…

标题Selenium IDE 常见错误笔记

Selenium IDE 常见错误笔记 错误1:Failed:Exceeded waiting time for new window to appear 2000ms 这个错误通常出现在第一次运行时,有两个原因: Firefox阻止了弹出式窗口,在浏览器设置里允许这个操作即可。 有些网站设置了反…

轻松上手,无缝对接:详述如何接入企讯通空号检测接口API

企讯通空号检测接口API作为一款高效、精准的手机号码状态检测工具,能够帮助企业及开发者快速识别手机号码的有效性,优化通讯资源,提升营销效果。本篇文章将带领您一步步了解如何轻松、无缝地对接企讯通空号检测接口API,让您的业务…

HIVE无法启动问题

​ 启动不了hive 一直在加载中! 问题:当我们打开电脑 想要学习hive时 我们却发现 它一直卡在启动页面 true一直后没有信息或者报错 原因:我们在之前学习时 在配置hdfs的高可用时(High Availability 简称HA) 高可用…

stm32HAL_GPIO输入

学会使用 GPIO 采集 KEY 的数据信息,这种信息采集技术在生活中常见于对大自 然环境的各种信息的采集。比如环境温度,湿度等等。我们这里以 key 为入门设 备。 一,什么是信息采集 比如环境温度,湿度等等。我们需要把这些温度&am…

Spire.PDF for .NET【文档操作】演示:更改 PDF 版本

在某些平台上上传或提交 PDF 文件时,您有时会面临平台需要特定版本的 PDF 文件的困境。如果您的PDF文件无法满足要求,则需要将其转换为不同版本以实现兼容性。本文将演示如何使用Spire.PDF for .NET以编程方式在不同版本之间转换 PDF。 Spire.PDF for .…

探秘数据库中间件:ProxySQL与MaxScale的优势与劣势

欢迎来到我的博客,代码的世界里,每一行都是一个故事 探秘数据库中间件:ProxySQL与MaxScale的优势与劣势 前言功能对比负载均衡故障转移查询路由使用场景和业务需求下的选择建议 性能对比响应速度并发连接数不同负载条件下的性能表现 高可用性…

R语言绘制动态网络图Network教程WGCNA

今天分享的笔记是使用NetworkD3对WGCNA的共表达网络进行可视化,创建交互式动态网络图,展示基因之间的相互关系,可以用于转录组或者其他调控网络展示。 加权基因共表达网络分析 (WGCNA, Weighted correlation network analysis)是用来描述不同…