蓝桥杯备战——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;
}相关文章:
蓝桥杯备战——6.串口通讯
1.分析原理图 由上图我们可以看到串口1通过CH340接到了USB口上,通过串口1我们就能跟电脑进行数据交互。 另外需要注意的是STC15F是有两组高速串口的,而且可以切换端口。 2.配置串口 由于比赛时间紧,我们最好不要去现场查寄存器手册&#x…...
Redis为什么速度快:数据结构、存储及IO网络原理总结
Redis,作为内存数据结构存储的佼佼者,其高性能表现一直备受赞誉。那么,Redis究竟是如何实现这一点的呢?接下来,我们将更深入地探讨其背后的关键技术,并提供进一步的优化策略。 一、内存存储与数据结构设计…...
OSI七层模型 | TCP/IP模型 | 网络和操作系统的联系 | 网络通信的宏观流程
文章目录 1.OSI七层模型2.TCP/IP五层(或四层)模型3.网络通信的宏观流程3.1.同网段通信3.2.跨网段通信 1.OSI七层模型 在计算机通信诞生之初,不同的厂商都生产自己的设备,都有自己的网络通讯标准,导致了不同厂家之间各种协议不兼容࿰…...
Java集合总览
1.总览 Java中的集合分List、Set、Queue、Map 4种类型。 List:大多数实现元素可以为null,可重复,底层是数组或链表的结构,支持动态扩容 Set:大多数实现元素可以为null但只能是1个,不能重复, …...
C# 设置一个定时器函数
C#中,创建设置一个定时器,能够定时中断执行特定操作,可以用于发送心跳、正计时和倒计时等。 本文对C#的定时器简单封装一下,哎,以方便定时器的创建。 定义 using Timer System.Timers.Timer;class SetTimer {Timer …...
第十四届蓝桥杯省赛pythonB组题。 管道
5407. 管道 - AcWing题库 有一根长度为 len的横向的管道,该管道按照单位长度分为 len 段,每一段的中央有一个可开关的阀门和一个检测水流的传感器。 一开始管道是空的,位于 Li 的阀门会在 Si 时刻打开,并不断让水流入管道。…...
淘宝扭蛋机小程序:新时代的互动营销与娱乐体验
随着科技的快速发展,小程序已经成为人们日常生活中不可或缺的一部分。在众多的小程序中,淘宝扭蛋机小程序以其独特的互动性和趣味性,吸引了大量用户。本文将深入探讨淘宝扭蛋机小程序的特色、用户体验以及未来发展。 一、淘宝扭蛋机小程序的…...
深度强化学习(王树森)笔记02
深度强化学习(DRL) 本文是学习笔记,如有侵权,请联系删除。本文在ChatGPT辅助下完成。 参考链接 Deep Reinforcement Learning官方链接:https://github.com/wangshusen/DRL 源代码链接:https://github.c…...
【分布式技术专题】「分布式技术架构」 探索Tomcat技术架构设计模式的奥秘(Server和Service组件原理分析)
探索Tomcat技术架构设计模式的奥秘 Tomcat系统架构分析Tomcat 整体结构Tomcat总体结构图以 Service 作为“婚姻”1) Service 接口方法列表 2) StandardService 的类结构图方法列表 3) StandardService. SetContainer4) StandardService. addConnector 以 Server 为“居”1) Ser…...
常用的gpt-4 prompt words收集8
本文介绍我最近收集的一些好用的chatgpt-4的prompts,如果你也有好用的提示词可以互相交流一下。 1. I ran into some trouble on my way to work. 迟到原因 2. In my heart, the most delicious coffee is the Hawaii Dirty from Manner. Only the Nong series a…...
【GitHub项目推荐--开源2D 游戏引擎】【转载】
microStudio 是一个可在浏览器中运行的游戏引擎,它拥有一套精美、设计精良、全面的工具,可以非常轻松地帮助你创建 2D 游戏。 你可以在浏览器中访问 microStudio.dev 开始搭建你的游戏,当然你可以克隆现有项目或创建新游戏并开始编码&#x…...
鸿蒙APP的应用场景
鸿蒙APP可以用于多种场合和设备类型,这是鸿蒙系统的分布式能力和多终端适配的优势。以下是一些鸿蒙APP的应用场景,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.智能手机和平板电脑&am…...
goland课程管理(6)
项目目录结构如下图所示: core包下面: class.go package coreimport "github.com/gin-gonic/gin"func Class1(ctx *gin.Context) {}course.go package coreimport (. "cookie/database". "cookie/model""fmt"…...
04.Elasticsearch应用(四)
Elasticsearch应用(四) 1.什么是索引 索引是文档的容器,是一类文档的结合索引是一个逻辑命名空间,它映射到一个或多个主分片,并且可以具有零个或多个副本分片索引中数据分散在Shard上索引的Mapping定义文档字段的类型…...
Python之数据可视化(地图)
目录 一 基础地图应用 二 全国疫情图 一 数据准备 二 数据处理 二 湖北省疫情图 一 数据准备 二 数据处理 一 基础地图应用 导入map地图对象 from pyecharts.charts import Map map Map() 写入数据 data [("北京市",100),("上海市"…...
etcd技术解析:构建高可用分布式系统的利器
1. 引言 随着云原生技术的兴起,分布式系统的构建变得愈发重要。etcd作为一个高可用的分布式键值存储系统,在这个领域发挥着至关重要的作用。本文将深入探讨etcd的技术细节,以及如何利用它构建高可用的分布式系统。 2. etcd简介 etcd是一个开…...
Pillow图像处理:从零开始的奇妙之旅
图像处理,就像是一场神奇的冒险,让我们的照片变得更有趣、更生动。而在这个冒险的旅途中,Pillow就如同一位魔法师,为我们开启了无尽的可能性。无论你是刚刚踏入图像处理领域的小白,还是已经略有基础的程序员࿰…...
设计一个LRU(最近最少使用)缓存
约束和假设 我们正在缓存什么? 我们正在缓存Web Query的结果我们可以假设输入是有效的,还是需要对其验证? 假设输入是有效的我们可以假设它适应内存吗? 对 编码实现 class Node(object):def __init__(self, results):self.res…...
shell 循环语句
一、命令补充 1. echo 命令 echo -n 表示不换行输出 echo -e 表示输出转义符 常用的转义符有: 选项作用\r光标移至行首,并且不换行\s当前shell的名称,如bash\t插入Tab键,制表符\n输出换行\f换行,但光标仍停留在…...
C++(1) 命名空间
文章目录 C1. C 概述2.C 相对于 C 语言的增强2.1C 第一行代码2.2 C 补充 bool 类型2.3 作用域运算符2.4 命名空间 namespace2.4.1 命名空间基本内容和开放性2.4.2 多个命名空间操作2.4.3 命名空间函数定义和实现分离2.4.4 匿名命名空间2.4.5 命名空间别名 C 1. C 概述 C 之父…...
揭秘抖音批量采集神器:从技术内核到实战突破
揭秘抖音批量采集神器:从技术内核到实战突破 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 在数字内容创作与研究的浪潮中,抖音作为全球最大的短视频平台,其丰富的内容资…...
基于双向DC - DC变换器(DAB)的储能系统控制仿真
Matlab/Simulink仿真模型,基于双向DC-DC变换器(双有源桥变换器DAB)的储能系统控制仿真模型,采用电压电流双PI闭环控制策略,单移相控制,在母线电压受到外界干扰的情况下,通过控制电池的充电和放电…...
LazyVim终极指南:5分钟打造高效Neovim开发环境
LazyVim终极指南:5分钟打造高效Neovim开发环境 【免费下载链接】LazyVim Neovim懒人配置。 项目地址: https://gitcode.com/GitHub_Trending/la/LazyVim LazyVim是一个基于💤 lazy.nvim的Neovim懒人配置方案,专为希望快速搭建专业开发…...
从零手写感知机到MindSpore实战:一份完整的鸢尾花分类作业避坑指南
从零手写感知机到MindSpore实战:一份完整的鸢尾花分类作业避坑指南 鸢尾花分类是机器学习入门的经典案例,但对于初学者来说,从理论推导到框架实战往往充满挑战。本文将带你完整走通这条学习路径:先手写感知机理解算法本质…...
从智能电池到服务器风扇:手把手解析SMBus的15种通信协议与应用实例
从智能电池到服务器风扇:手把手解析SMBus的15种通信协议与应用实例 当你在笔记本电脑上看到剩余电量精确到1%时,或是服务器机柜里的风扇根据温度自动调节转速时,背后都有一个低调的"通信专家"在默默工作——它就是SMBus࿰…...
华为交换机Eth-Trunk配置实战:手工与LACP模式全解析(附排错指南)
华为交换机Eth-Trunk深度配置指南:从手工模式到LACP模式的技术实践 在企业网络架构中,带宽瓶颈和单点故障一直是困扰网络工程师的两大难题。记得去年参与某金融数据中心改造时,核心交换机之间的千兆链路在业务高峰时段频繁出现拥塞告警&#…...
别再只写学生管理系统了!这个C++飞机订票项目能给你的简历加分(含GitHub源码)
用C飞机订票系统项目点亮你的技术简历 在众多求职者中脱颖而出并非易事,尤其是当大多数候选人都拥有相似的学历背景和技能清单时。作为一名C开发者,你是否厌倦了在简历上反复列出"学生管理系统"这类基础项目?让我们聊聊如何通过一…...
Flink状态后端选型指南:从Memory到RocksDB的5个实战避坑建议
Flink状态后端选型指南:从Memory到RocksDB的5个实战避坑建议 当你在深夜收到Flink作业崩溃的告警,打开日志发现是OOM(内存溢出)导致的失败,而第二天业务方还在等着实时报表数据——这种场景对中高级Flink开发者来说并不…...
6个维度教你选择Mac Mouse Fix的最佳部署渠道
6个维度教你选择Mac Mouse Fix的最佳部署渠道 【免费下载链接】mac-mouse-fix Mac Mouse Fix - A simple way to make your mouse better. 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 副标题:开发者、普通用户与企业用户的技术选型指南…...
2026年网文作者生存指南:实测7款AI码字工具,解决“吃设定”与“AI味”的终极防坑指南
写了十二年网文,从早期的起点玄幻、贴吧同人,一路熬到现在番茄的免费飞读模式,算是把网文圈的潮起潮落看了个遍。 最近这两年,个人作者真的很难受。很多工作室直接用大模型批量扫榜,搞得卷字数已经没意义了,…...
