51单片机串口通信
串口发送功能的实现一、配置SCON串行口控制寄存器1.REN:允许/禁止串口接收控制位2.SM00、SM11选择通讯方式一3.TI0、RI0发送接收中断标志位每次发送后必须手动清零二、配置PCON电源控制寄存器SMOD:波特率选择位SMOD1使方式一二三波特率加倍默认为0波特率越低 越稳定、越抗干扰、越不容易出错但速度越慢三、配置定时器串口发送时中断不需要配置只需要配置定时器1并选择波特率串口需要八位自动重装不再是十六位65535因为十六位要每次赋初值会占用时间导致误差串口通信要双八位更精准计数值变为0-255256次计数255后还要加一位才溢出1.在这里我们先对特殊功能寄存器TMOD高四位清零低四位置默认TMOD0x0F再设置高四位GATE0C/~T0M1、M010八位重装模式TMOD|0x202.然后再设置定时器初值和是否倍速波特率这里选倍速也就是PCON | 0x80然后我们这里是八位自动重装模式不需要每次溢出重新赋初值只需要把高低位都设置成我们的初值就好TL10xF4;TH10xF4;波特率计算我们这里初值为0xF4,换算为十进制就是244256-24412也就是每次溢出经过12次计数12个1.085us每次溢出时间12*1.08506944413.020833328溢出率1/每次溢出时间0.07680000003145728MHZ注意我们这里是波特率倍速所以不用除2直接除16就好波特率溢出率/164800.00000196608HZ≈4800HZ是不是几乎没有误差如果是12MHZ晶振就会算出是4807.69MHZ,而且波特率越高误差就会越大3.ET10;禁止定时器中断这里不需要4.TR11:启动定时器1void Uart1_Init(void) //4800bps11.0592MHz { PCON | 0x80; //使能波特率倍速位SMOD SCON 0x50; //8位数据,可变波特率 AUXR 0xBF; //定时器时钟12T模式 AUXR 0xFE; //串口1选择定时器1为波特率发生器 TMOD 0x0F; //设置定时器模式 TMOD | 0x20; //设置定时器模式 TL1 0xF4; //设置定时初始值 TH1 0xF4; //设置定时重载值 ET1 0; //禁止定时器中断 TR1 1; //定时器1开始计时 }当然也可以使用STC-ISP的波特率计算器自动生成初始化代码连配置都省了四、串口发送函数我们直接将数据写入SBUF即可在写入后加上whlie判断检测发送是否完成防止一直发送卡住在发送后手动将发送标志位TI清零//串口发送一个字节数据范围0-255 void UART_SendByte(unsigned char Byte) { SBUFByte; //写入SBUF实现数据发送 while(TI0); //发送结束检测防卡死 TI0; //发送检测位清零 }五、主函数调用当我们需要连续发送信息时在while循环中调用的时候要每次发送后延时否则会由于发送过快发送错误信息比如从66变为99要想控制信息发送速度也可以通过延时函数粗略控制void main() { Uartl Init (); //初始化 while(1) { UART_SendByte (0x66); //串口发送函数 Delay100; //延时防止连续发送过快产生发送乱码 } }程序编译烧录后打开串口选择HEX模式可以看到如果我们选择文本模式那么显示的就会是数字编码后也就是字符原本的样子六、串口发送模块化串口发送可以模块化为.c.h文件方便以后调用记得养成注释的好习惯但是接下来讲的接收中断依赖于串口中断和主函数耦合性较强就没法模块化了串口接收功能的实现一、串口初始化其他都和发送一样只需要改动几个点1.确保串口接收使能位为打开状态SCON的第四位置1也就是让SCON0x50其实我们在发送时也是打开的这里就不用改了2.打开串口中断EA1(启动中断总开关),ES1(打开串口中断)void Uart1_Init(void) //4800bps11.0592MHz { PCON | 0x80; //使能波特率倍速位SMOD SCON 0x50; //8位数据,可变波特率 AUXR 0xBF; //定时器时钟12T模式 AUXR 0xFE; //串口1选择定时器1为波特率发生器 TMOD 0x0F; //设置定时器模式 TMOD | 0x20; //设置定时器模式 TL1 0xF4; //设置定时初始值 TH1 0xF4; //设置定时重载值 ET1 0; //禁止定时器中断 TR1 1; //定时器1开始计时 EA1; ES1; //接收数据需要开启中断 }二、中断函数我们在技术手册查询到中断号小尾巴为interrupt 4那中断函数我们命名为void UART_Routine()interrupt 4函数名可以随便起只要带上空格中断号小尾巴就是中断函数啦主函数空循环即可这样我们就实现了电脑命令控制LED了void UART_Routine() interrupt 4 //中断函数头 { if(RI1) //发送完成进入后续 { P2SBUF; //使用串口写入SBUF的数据控制LED发送需要手动写入SBUF,接收时电脑会直接写入不需要我们操作 UART_SendByte(SBUF); //在中断里将串口收到的数据发出 RI0; //将接收检测位手动置零发送位我们在函数中置零就好啦 } }

相关新闻

一、点亮8个LED流水灯(数组、位移)

一、点亮8个LED流水灯(数组、位移)

文章目录1、点亮8个蓝色LED灯1.1效果图1.2代码块2、实现8个蓝色LED流水灯数组方式2.1效果图2.2代码块3、实现8个蓝色LED流水灯位移方式3.1效果图3.2代码块4、小灯闪烁4.1效果图4.2代码块1、点亮8个蓝色LED灯 1.1效果图 1.2代码块 #include <reg51.h> // 包含头文件 s…

2026/10/12 11:29:26 阅读更多 →
为什么你的AI产品突然被下架?——开源模型商用许可失效的7个隐蔽信号(含GitHub官方政策更新预警)

为什么你的AI产品突然被下架?——开源模型商用许可失效的7个隐蔽信号(含GitHub官方政策更新预警)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;开源模型商用许可解析 开源大语言模型的商用许可并非“开箱即用”的自由通行证&#xff0c;其法律约束力直接决定企业能否合法部署、微调、分发或嵌入模型至商业产品中。当前主流许可协议存在显著差异&#x…

2026/10/4 2:49:13 阅读更多 →
【数据结构与算法 | 第五篇】力扣303,304前缀和数组

【数据结构与算法 | 第五篇】力扣303,304前缀和数组

力扣 303. 区域和检索 - 数组不可变。 用法本质: 就是新创建一个数组,大小多1.然后数组的值是原数组与前面的和.这样用新数组-前面数组就行了. class NumArray {// 前缀和数组private int[] preSum;// 输入一个数组&#xff0c;构造前缀和public NumArray(int[] nums) {// p…

2026/10/12 21:03:27 阅读更多 →

最新新闻

OCR 把字都认出来了,RAG 为什么还答错?给 PDF 解析补上这四类检查

OCR 把字都认出来了,RAG 为什么还答错?给 PDF 解析补上这四类检查

财报里的公司名、年份和金额明明都能搜到&#xff0c;提问“2024 年收入是多少”&#xff0c;模型却一本正经把 2023 年那一列的数值报了出来。 这时候继续死磕 Prompt 往往没用。错误在进入向量库之前就已经注定了&#xff1a;OCR 确实把文字抓全了&#xff0c;却把表格里的二…

2026/10/14 13:34:36 阅读更多 →
ANTLR4语法解析器开发实战与优化技巧

ANTLR4语法解析器开发实战与优化技巧

## 1. 项目概述&#xff1a;ANTLR4初探与实践价值上周在优化一个内部数据解析工具时&#xff0c;我重新翻出了尘封已久的ANTLR4代码库。这个2007年诞生于旧金山大学的语法分析器生成工具&#xff0c;如今已成为工业级语言处理的事实标准。不同于正则表达式这类"小打小闹&q…

2026/10/14 13:34:36 阅读更多 →
ITIL 4落地指南:三步走策略破解实践选择难题

ITIL 4落地指南:三步走策略破解实践选择难题

这两年帮不少团队做过ITIL 4落地相关的咨询和评审&#xff0c;我观察到的一个高频共性问题&#xff1a;很多人不是不知道ITIL 4是什么&#xff0c;而是卡在“从哪儿开始”。34个实践摆在面前&#xff0c;每个看起来都有用&#xff0c;每个又都像无底洞&#xff0c;选少了怕不完…

2026/10/14 13:34:36 阅读更多 →
只做末端清洗治标不治本,企业数据质量该如何落地?

只做末端清洗治标不治本,企业数据质量该如何落地?

走访大量企业的数据治理项目&#xff0c;会发现一个非常普遍的误区&#xff1a;企业发现报表不准、数据混乱之后&#xff0c;第一反应就是采购数据清洗工具&#xff0c;安排数据团队定期跑清洗脚本&#xff0c;在数据中台或者数仓里修正脏数据。短期看&#xff0c;报表干净了、…

2026/10/14 13:34:36 阅读更多 →
计及碳排放的多微网分布式能量管理:ADMM建模与Matlab实现

计及碳排放的多微网分布式能量管理:ADMM建模与Matlab实现

多微电网的分布式能量管理这两年基本是电力系统方向的研究热点&#xff0c;但很多人一上来就被“分布式优化”四个字劝退——总觉得得懂一堆凸优化理论才能动手。这篇博文就是来打破这个门槛的&#xff1a;我会把计及碳排放的多微网电能交互分布式运行策略从问题建模一路拆到Ma…

2026/10/14 13:34:36 阅读更多 →
RevitLookup 2020 编译与加载配置:Revit 二次开发调试工具实战

RevitLookup 2020 编译与加载配置:Revit 二次开发调试工具实战

简介&#xff1a;RevitLookup 2020是一款面向Revit二次开发人员的实用工具&#xff0c;用于快速浏览和检查Revit模型中的元素数据&#xff0c;在API调试和功能验证中非常有用。压缩包共包含161个文件&#xff0c;大小仅1.05MB&#xff0c;既有可直接部署的RevitLookup.addin与d…

2026/10/14 13:33:33 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起&#xff1a;它到底想解决什么问题第一次看到"AnyPS5"这个标题&#xff0c;我脑子里冒出来的第一个念头是&#xff1a;这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述&#xff1a;Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师&#xff0c;我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性&#xff0c;实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景&#xff0c;也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间&#xff0c;确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中&#xff0c;这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →