蓝桥杯备战——6.串口通讯

1.分析原理图

在这里插入图片描述
由上图我们可以看到串口1通过CH340接到了USB口上,通过串口1我们就能跟电脑进行数据交互。
在这里插入图片描述
另外需要注意的是STC15F是有两组高速串口的,而且可以切换端口。

2.配置串口

由于比赛时间紧,我们最好不要去现场查寄存器手册,去计算波特率。建议直接使用STC-ISP烧录软件里面的小工具去配置就行。例如我这是使用定时器2用作串口1的波特率发生器,波特率9600。需要注意的是如果你想要使能串口1中断,需要加上 ES = 1;EA = 1;
在这里插入图片描述
如果你使能了串口中断,下面就是串口中断函数的写法:

/*----------------------------
UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4
{if(RI) RI = 0;   //清除RI位if (TI){TI = 0;  		//清除TI位busy = 0;  //清忙标志}
}

3.封装串口收发函数

串口收发函数其实也不需要我们自己现场去写,在STC-ISP烧录软件里面有示例,复制出来稍作修改就行。
在这里插入图片描述
下面是我修改过后的代码

#include "uart.h"bit busy;void UartInit(void)		//9600bps@12.000MHz
{SCON = 0x50;		//8位数据,可变波特率AUXR |= 0x01;		//串口1选择定时器2为波特率发生器AUXR &= 0xFB;		//定时器时钟12T模式T2L = 0xE6;			//设置定时初始值T2H = 0xFF;			//设置定时初始值AUXR |= 0x10;		//定时器2开始计时ES = 1;         //使能串口1中断EA = 1;
}/*----------------------------
UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4
{if(RI) RI = 0;   //清除RI位if (TI){TI = 0;  		//清除TI位busy = 0;  //清忙标志}
}/*----------------------------
发送串口数据
----------------------------*/
void SendData(u8 dat)
{while (busy);               //等待前面的数据发送完成busy = 1;SBUF = dat;                 //写数据到UART数据寄存器
}/*----------------------------
发送字符串
----------------------------*/
void SendString(char *s)
{while (*s)                  //检测字符串结束标志{SendData(*s++);         //发送当前字符}
}

4.使用printf函数

C51也是可以通过串口重定向,就能直接使用printf()函数往串口发送格式化数据,具体操作如下:

/*-----------------------------
串口重定向
-------------------------------*/
char putchar(char c)
{SendData(c);return c;
}

然后就能直接使用printf()函数了,示例:按键按下后将获取到的温度数据通过串口发送到电脑
在这里插入图片描述
在这里插入图片描述
需要注意的是如果提示printf函数未定义,请引入头文件stdio.h 如果还是提示没有定义,请自行往stdio.h头文件里面添加如下代码:
在这里插入图片描述

5.完整封装库

#include "uart.h"bit busy;void UartInit(void)		//9600bps@12.000MHz
{SCON = 0x50;		//8位数据,可变波特率AUXR |= 0x01;		//串口1选择定时器2为波特率发生器AUXR &= 0xFB;		//定时器时钟12T模式T2L = 0xE6;			//设置定时初始值T2H = 0xFF;			//设置定时初始值AUXR |= 0x10;		//定时器2开始计时ES = 1;         //使能串口1中断EA = 1;
}/*----------------------------
UART 中断服务程序
-----------------------------*/
void Uart() interrupt 4
{if(RI) RI = 0;   //清除RI位if (TI){TI = 0;  	//清除TI位busy = 0;  	//清忙标志}
}/*----------------------------
发送串口数据
----------------------------*/
void SendData(u8 dat)
{while (busy); //等待前面的数据发送完成busy = 1;SBUF = dat;  //写数据到UART数据寄存器
}/*----------------------------
发送字符串
----------------------------*/
void SendString(char *s)
{while (*s)  //检测字符串结束标志{SendData(*s++); //发送当前字符}
}/*-----------------------------
串口重定向
-------------------------------*/
char putchar(char c)
{SendData(c);return c;
}

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

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

相关文章

【搞懂设计模式】享元模式:共享节约,皆大欢喜!

什么是享元模式? 巧记:共享节约,皆大欢喜。 总结:享元模式是一种结构型设计模式,它通过共享技术有效地支持大量细粒度的对象。想象一个大家庭的餐桌,一顿饭需要的碗筷,如果每个人都自己带一套…

暴力破解

暴力破解工具使用汇总 1.查看密码加密方式 在线网站:https://cmd5.com/ http://www.158566.com/ https://encode.chahuo.com/kali:hash-identifier2.hydra 用于各种服务的账号密码爆破:FTP/Mysql/SSH/RDP...常用参数 -l name 指定破解登录…

MAX27——处理max模型导出Zbrush中,无UV,或者UV炸开,反向等问题。

现在很多小伙伴要做数字人的时候会用到zbrush拓补高模。制作法线。有些人喜欢在zbrush中去做封套。也有喜欢直接用max做低模,做好的uv导入到Zbrush中,直接把高模法线,烘焙到低模UV的。这里主要讲解以下max导出到zbrush中,UV炸开&a…

SQL注入:报错注入

SQL注入系列文章:初识SQL注入-CSDN博客 SQL注入:联合查询的三个绕过技巧-CSDN博客 目录 什么是报错注入? 报错注入常用的3个函数 UpdateXML ExtractValue Floor rand(随机数) floor(向上取整&…

大模型日报-20240126

「think step by step」还不够,让模型「think more steps」更有用 https://mp.weixin.qq.com/s/3mdDYQI0WYgIpctyK6q2PA 如今,大型语言模型(LLM)及其高级提示策略的出现,标志着对语言模型的研究取得了重大进展&#x…

JavaScript 生成器(Generator)、高级 iteration用法详解

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ 目录 ✨ 前言 ✨ 正文 一、生成器(Generator) 什么是生成器 生成器函数 nex…

Unity 代理模式(实例详解)

文章目录 实例1:资源加载代理(Asset Loading Proxy)实例2:网络请求代理(Network Request Proxy)实例3:性能优化代理(Performance Optimization Proxy)实例4:权…

Docker容器部署OpenCV,打造高效可移植的计算机视觉开发环境

推荐 海鲸AI-ChatGPT4.0国内站点:https://www.atalk-ai.com 前言 在计算机视觉领域,快速部署和测试算法是研究和开发的关键。OpenCV作为一个强大的开源计算机视觉库,广泛应用于各种图像处理和视频分析任务。然而,配置OpenCV环境可…

光纤接口类型

光纤接口 网络设备基础知识 文章目录 光纤接口前言一、光纤接口二、光纤接口的优缺点总结前言 不同的接口类型适用于不同的光纤传输系统和应用需求。在选择光纤设备时,需要根据实际需求和系统要求选择适当的光纤接口类型。 一、光纤接口

计算机基础之微处理器简介

微处理器 微处理器定义 微型计算机的CPU也被称为微处理器,是将运算器、控制器和高速缓存集成在一起的超大规模集成电路芯片,是计算机的核心部件。能完成取指令、执行指令,以及与外界存储器和逻辑部件交换信息等操作。 微处理器发展 CPU从…

[C++]使用纯opencv部署yolov8旋转框目标检测

【官方框架地址】 https://github.com/ultralytics/ultralytics 【算法介绍】 YOLOv8是一种先进的对象检测算法,它通过单个神经网络实现了快速的物体检测。其中,旋转框检测是YOLOv8的一项重要特性,它可以有效地检测出不同方向和角度的物体。…

安全小记-ngnix负载均衡

目录 一.配置ngnix环境二.nginx负载均衡 一.配置ngnix环境 本次实验使用的是centos7,首先默认yum源已经配置好,没有配置好的自行访问阿里云镜像站 https://developer.aliyun.com/mirror/ 接着进行安装工作 1.首先创建Nginx的目录并进入: mkdir /soft &…

【七、centos要停止维护了,我选择Almalinux】

搜索镜像 https://developer.aliyun.com/mirror/?serviceTypemirror&tag%E7%B3%BB%E7%BB%9F&keywordalmalinux dvd是有界面操作的,minimal是最小化只有命里行 镜像下载地址 安装和centos基本一样的,操作命令也是一样的,有需要我…

openlayers+vue实现缓冲区

文章目录 前言一、准备二、初始化地图1、创建一个地图容器2、引入必须的类库3、地图初始化4、给地图增加底图 三、创建缓冲区1、引入需要的工具类库2、绘制方法 四、完整代码总结 前言 缓冲区是地理空间目标的一种影响范围或服务范围,是对选中的一组或一类地图要素(点、线或面…

C++面试:散列表

目录 1. 散列表的基本概念 散列表的定义 散列函数 哈希冲突 2. 处理冲突的方法 链地址法(Separate Chaining) 开放地址法 再散列 3. 散列表的性能分析 1. 平均查找长度(ASL) 2. 负载因子(Load Factor&#…

【Linux】-cp模型

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

IS-IS:04 DIS

IS-IS 协议只支持两种网络类型,即广播网络和点到点网络。与 OSPF 协议相同, IS-IS 协议在广播网络中会将网络视为一个伪节点 ( Pesudonde,简称 PSN),并选举出一台DIS (Designated IS&#xff09…

ASP.NET Core 7 Web 使用Session

ASP.NET Core 好像不能像20年前那样直接使用Session函数,我使用如下方法 1、在NuGet安装以下2个包 2、在Program.cs注册 //注册Session builder.Services.AddSession(options > {options.IdleTimeout TimeSpan.FromMinutes(60);options.Cookie.HttpOnly fals…

CAN相关寄存器

1. CAN_ MCR:CAN主控制寄存器。主要负责CAN工作模式的配置。 CAN_BTR:位时序寄存器。用来设置分频/TBs1/TBs2/Tsw等参数,设置测试模式。 CAN_(T/R)IxR:标识符寄存器。存放(待发送/接收)的报文ID、扩展ID、IDE位及RTR…

如何快速搭建实用的爬虫管理平台

目录 一、前言 二、选择合适的爬虫框架 三、搭建数据库 步骤1 步骤2 步骤3 四、搭建Web服务器 步骤1 步骤2 步骤3 步骤4 五、管理爬虫 六、总结 一、前言 爬虫是互联网数据采集的关键工具,但是随着数据量的增加和需求的多样化,手动运行和管…