当前位置: 首页 > web >正文

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

每日一言

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

串口助手的界面就等于是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.xdnf.cn/news/9961.html

相关文章:

  • Webug4.0靶场通关笔记03- 第3关SQL注入之时间盲注(手注法+脚本法 两种方法)
  • 字体查看器
  • C学习-头文件
  • iVX 如何用 VL 中间语言构建程范式闭环?
  • [SC]SystemC语法小结(一)
  • Linux部署python项目为服务,开启自启动
  • 上传图片转成3D VR效果 / 用photo-sphere-viewer实现图片VR效果 / VR效果在项目中落地实践
  • WebBuilder赋能中山欣锠鞋业数字化转型实践
  • Web 系统验证码与登录安全防护全攻略(附实现方案)
  • The CTeX fontset “fandol“ is unavailable in the current mode.
  • 复合机器人:纠偏算法如何重塑工业精度与效率?
  • AET3156AP电源方案 禾纳代理商
  • 1.什么是node.js、npm、vue
  • vue3 各种数据处理
  • Spring 核心知识点补充
  • 文档处理的相关工具
  • MMR搜索和LangChain整合Milvus实战
  • 小白的进阶之路系列之七----人工智能从初步到精通pytorch自动微分优化以及载入和保存模型
  • 高精度、高效率:正面吊箱号识别系统如何实现精准识别
  • 多模态大模型:开启智能决策的新时代
  • TimeoutException问题排查
  • 必会利器:scp 命令
  • Linux程序管理练习题
  • Python中的enumerate函数:优雅地遍历序列索引与元素
  • 一个开源脚本,可自动安装在 AMD Radeon 7900XTX 上运行选定 AI 接口所需的所有内容
  • 【Java Web】速通CSS
  • DeepSeek与AI提示语设计的全面指南
  • 使用大模型预测结节性甲状腺肿的全流程系统技术方案
  • 花哨桌面 V 3.0.0 (火影忍者版)
  • 模型评估指标详解:准确率、召回率、AUC 是什么?