学习STC51单片机20(芯片为STC89C52RCRC)

news2025/6/1 12:24:05

每日一言

        生活不会一帆风顺,但你的勇敢能让风浪变成风景。

串口助手的界面就等于是pc端的页面设置的是pc端的波特率等等参数    程序里面的是单片机的波特率等等参数

串口助手是 PC 端软件
串口助手(如 STC-ISP)是运行在 PC 上的工具,用于模拟 PC 的串口通信功能。它的所有界面元素(发送缓冲区、接收缓冲区、波特率设置等)都是为 PC 服务的

发送缓冲区和接收缓冲区属于 PC

    1. 发送缓冲区:PC 上的串口助手将用户输入的数据(如 'a')通过串口线发送给单片机。
    2. 接收缓冲区:PC 通过串口线接收单片机发送的数据(如 "helloworld"),并显示在界面上。

反正串口助手的发送缓冲区就是pc端的发送缓冲区,可以输入东西向单片机进行发送,接收缓冲区就是pc端的接收缓冲区,接收来自单片机的发送的数据

串口通信03_pc发送指令给单片机进行控制LED

这边我们要学习一个知识点R1是SCON寄存器的第0位他有个特性和T1是相对的

虽然他是叫做中断请求标志位,但是我们这边就是说无论你用不用中断,但是我们可以利用这个特性如果单片机接收到了信息,那么就会执行以下判断,就是这个R1和T1的特性永远都会生效的,就是接受到一帧数据10位后就会硬件就会进行置位,然后我们需要软件复位,(具体怎么置位,在哪个位置位自行看手册)

好了就是单片机会轮询的检查是否接收到信息,接收到后将单片机的SBUF里面的数据读取出来,然后进行判断,如果怎么样怎么样执行相应的代码,单片机这边就会执行相应的操作,这个是pc向单片机发送指令的操作

我们这段代码是,pc在发送缓冲区输入a 发送数据那么进入到单片机检查到了接收到的数据检查到了后就软件复位,然后将数据存放到SUBF接收缓冲区,那么将接收缓冲区SUBF里面的数据读取出来放到cmd这个我们自己定义的容器里,判断cmd的值,然后就是执行相应的操作了

串口通信04_pc串口中断控制LED

(这个是多指令的,单指令的话就是按一个o是否是o如果是就LED亮)

这个的话是利用串口的中断来进行检查我们的字符是否匹配开关灯的字符,我们这边用的不是精确匹配,用的是部分匹配,如果需要的话,后期可以自己去学。

解释代码

先初始化中断函数,那么我们这边是串口中断

用的是这个我们回顾一下interrupt 0 是外部中断0 , 1 是定时器0中断 ,2是外部中断1,3是定时器1中断, 4是串口中断 ,5是定时器2中断 , 6是外部中断2 ,7是外部中断3

好了那么我们的串口中断就是interrupt 4

好的那我们中断函数里面怎么写呢,我们的逻辑是因为每一次一个字符传进去这个RI就会中断一次那么我们因为想要电脑端输入open指令让LED亮,那么中断一次就将这个字符(这个字符指的是你在发送缓冲区输入的open那么会被拆分成o p e n,这4个字符也跟subf的特性有关因为只能存放1字节的大小,也就是一个字符了)传入到cmd[12]里面然后让 i++ 所以也要提前定义好i,我们这边让i不要每次都为0(因为我们想要在中断函数里面写),当然也可以定义为全局变量,那么我们在中断函数里面写的话,我们就只需要将它设置为静态函数static ,这样的好处就是满足了i只会在第一个字符进去的时候初始化,后面的字符都不会进行初始化了,就是让i++这个基础上用+后的的i了。

然后后面检测的字符都会先将字符存放到SUBF 然后cmd[i]就会先讲这个SUBF里面的值存放到cmd这个数组里面,然后进行i++,那么下一次的字符就会存放到cmd数组的第二个位置。依此类推,

好的这边有一个函数需要解释一下就是strstr这个是

strstr(cmd, "op") 会在整个 cmd 数组中查找 子字符串 "op"

  • 例如,输入 openoperation 甚至 xxopxx 都会触发 LED 点亮。
  • 这可能导致意外触发,建议改用精确匹配(如比较完整字符串)

虽然这个不是很精确,但是我们懂得原理就好,这边用的是部分匹配方便我们学习

随后其实我们就是去实现这个功能了,我们这个metset是为了将检查到字符相对应的时候,执行部分匹配成功之后将cmd里面都清为空字符串,\0这个就是空字符串的意思

最后这个#define SIZE 12,这个是宏定义,就是为了更好的更改值,只要更改宏定义就好了,所以每当需要更改数组大小的时候更改宏定义里面的数字12就好了

对于这段代码的原理差不多了。。。

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

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

相关文章

链路追踪神器zipkin安装详细教程教程

今天分享下zipkin的详细安装教程,具体代码demo可以参考我上篇文章:Spring Cloud Sleuth与Zipkin深度整合指南:微服务链路追踪实战-CSDN博客 一、Zipkin是什么? Zipkin是由Twitter开源的一款分布式追踪系统(现由OpenZ…

bug: uniCloud 查询数组字段失败

问题根源:使用了支付宝云 官方说:2024年11月之后创建的新的支付宝云空间,数组字段查询强制必须设置 array 类型的索引 布尔类型的查询,强制必须设置 bool 类型的索引。 方案一:找到云服务空间-》云数据库-》对应的表-…

视觉分析开发范例:Puppeteer截图+计算机视觉动态定位

一、选型背景:传统爬虫已无力应对的视觉挑战 在现代互联网环境中,尤其是小红书、抖音、B站等视觉驱动型平台,传统基于 HTML 的爬虫已经难以满足精准数据采集需求: 内容加载由 JS 动态触发,难以直接解析 HTML&#xf…

Linux 基础开发工具的使用

目录 前言 一:下载工具yum 二:文本编辑器vim 1. 命令模式 2. 插入模式 3. 底行模式 三:gcc和g 基本使用格式 常用选项及作用 编译过程示例 四、Linux 项目自动化构建工具 ——make/Makefile 1. make 与 Makefile 的关系 2. Make…

华为云Flexus+DeepSeek征文 | Dify-LLM平台一键部署教程及问题解决指南

作者简介 我是摘星,一名专注于云计算和AI技术的开发者。本次通过华为云MaaS平台体验DeepSeek系列模型,将实际使用经验分享给大家,希望能帮助开发者快速掌握华为云AI服务的核心能力。 目录 1. 前言 2. 准备工作 2.1 注册华为云账号 2.2 确…

哈工大计算机系统2025大作业——Hello的程序人生

计算机系统 大作业 题 目 程序人生-Hello’s P2P 专 业 计算学部 学   号 2023113072 班 级 23L0513 学 生 董国帅 指 导 教 师 史先俊 计算机科学与…

Vue中van-stepper与input值不同步问题及解决方案

一、问题描述 在使用Vant UI的van-stepper步进器组件与原生input输入框绑定同一响应式数据时,出现以下现象: 通过步进器修改值后,页面直接输出{{ count }}和watch监听器均能获取最新值但input输入框显示的数值未同步更新,仍为旧…

react基础技术栈

react基础技术栈 react项目构建react的事件绑定React组件的响应式数据条件渲染和列表循环表单绑定 Props和组件间传值,插槽react中的样式操作 生命周期ref 和 context函数组件和hook高阶组件React性能问题React-route的三个版本react-router使用步骤react-router提供…

Three.js搭建小米SU7三维汽车实战(4)场景搭建

场地搭建 javascript // 导入threejs import * as THREE from "three"; // 导入轨道控制器 import { OrbitControls } from "three/addons/controls/OrbitControls.js"; // 1. 创建场景 const scene new THREE.Scene(); // 2. 创建相机 const camera ne…

Excel 统计某个字符串在指定区域出现的次数

【本文概要】 Excel 统计某个字符串在指定区域出现的次数: 1、Excel 统计一个单元格内的某字符串的出现次数 2、Excel 统计某一列所有单元格内的某字符串的出现次数 3、Excel 统计某一区域所有单元格内的某字符串的出现次数 1、Excel 统计一个单元格内的某字符串的出…

【Linux我做主】进度条小程序深度解析

Linux下C语言进度条程序深度解析 进度条小程序GitHub地址 前言前置知识回车换行(CR/LF)的深度解析历史渊源与技术规范在进度条/倒计时中的应用 缓冲区机制的全面剖析缓冲区引入缓冲类型对比进度条开发中的关键控制 进度条实现以小见大——倒计时倒计时最…

从Homebrew找到openssl.cnf文件并拷贝到Go项目下使用

安装OpenSSL 在 macOS 上下载和安装 OpenSSL 最常见和推荐的方式是使用 Homebrew,这是一个 macOS 缺失的包管理器。 如果您还没有安装 Homebrew,请先安装它。安装 Homebrew 后,安装 OpenSSL 只需要一条命令。 步骤 1:安装 Home…

微信小程序一次性订阅封装

封装代码如下&#xff1a; export async function subscribeMessage(tmplIds: string[]): Promise<ISubscribeMessagePromise> {// 模板ID// 1、获取设置状态const settings (await wx.getSetting({ withSubscriptions: true })).subscriptionsSetting || {}console.log…

安全帽检测算法AI智能分析网关V4守护工地/矿山/工厂等多场景作业安全

一、方案概述​ 在工业生产与建筑施工场景中&#xff0c;安全帽是保障人员安全的重要装备。但传统人工巡检效率低、易疏漏&#xff0c;难以满足现代安全管理需求。AI智能分析网关V4安全帽检测方案&#xff0c;借助人工智能与计算机视觉技术&#xff0c;实现作业现场安全帽佩戴…

Python自动化之selenium语句——打开、关闭浏览器和网页

目录 一、打开谷歌浏览器 1.双击桌面的Pycharm工具 2.新建Python文件&#xff0c;输入文件名 3.新建的Python文件如下 4.安装selenium库 5.导入包 二、打开网页、关闭网页、关闭浏览器 1.导入增加一个时间包 2.使用函数打包之前写的浏览器的配置 3.调用 4.打开百度网…

【数据结构】--二叉树--堆(上)

一、树的概念和结构 概念&#xff1a; 树是一种非线性的数据结构&#xff0c;他是由n(n>0)个有限结点组成一个具有层次关系的集合。其叫做树&#xff0c;是因为他倒过来看就和一棵树差不多&#xff0c;其实际上是根在上&#xff0c;树枝在下的。 树的特点&#xff1a; 1…

多线程(5)——单例模式,阻塞队列

目录 单例模式饿汉模式懒汉模式—单线程版懒汉模式—多线程版&#xff08;经典面试题&#xff09;懒汉模式—多线程版&#xff08;改进&#xff09; 阻塞队列阻塞队列是什么生产者消费者模型标准库中的阻塞队列-BlockingQueue阻塞队列实现 单例模式 单例模式是一种设计模式&am…

视频监控汇聚平台EasyCVR工业与安全监控:防爆摄像机的安全应用与注意事项

石油、化工、煤矿等行业存在易燃易爆气体、粉尘&#xff0c;普通监控设备易因电火花、高温引发爆炸火灾。随着工业规模扩大&#xff0c;安全生产监控需求激增&#xff0c;防爆摄像机成为保障安全的关键。加之国家法规与行业标准对危险环境监控设备要求严格&#xff0c;规范其应…

基于 Redis 实现分布式锁:原理及注意事项

文章目录 基于 Redis 实现分布式锁&#xff1a;原理及注意事项基于 Redis 实现分布式锁的原理Redis 分布式锁的过期时间和锁续期机制如何防止锁被其他 goroutine 删除&#xff1f;Redis 分布式锁存在的单点故障问题&#xff1a;基于 RedLock 的解决方案高并发场景中 Redis 分布…

手机设备多?怎样设置IP保证不关联

在移动互联网时代&#xff0c;多设备运营&#xff08;如电商、游戏工作室、社交媒体矩阵&#xff09;常面临IP关联风险&#xff0c;轻则账号受限&#xff0c;重则封禁。以下提供6种高效设置独立IP的方法&#xff0c;结合技术原理与实操建议&#xff0c;助您打造稳定合规的运营环…