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/7/24 19:43:35 阅读更多 →
为什么你的AI产品突然被下架?——开源模型商用许可失效的7个隐蔽信号(含GitHub官方政策更新预警)

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

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

2026/7/25 20:22:03 阅读更多 →
【数据结构与算法 | 第五篇】力扣303,304前缀和数组

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

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

2026/7/24 23:05:03 阅读更多 →

最新新闻

从0到过审:扣子构建医疗咨询机器人必须绕过的8个合规雷区,92%团队在第3步失败

从0到过审:扣子构建医疗咨询机器人必须绕过的8个合规雷区,92%团队在第3步失败

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;医疗咨询机器人合规性认知的底层逻辑 医疗咨询机器人并非通用聊天工具&#xff0c;其合规性根基深植于“医疗行为”与“信息服务”的法律边界判定之中。当系统输出内容可能影响用户健康决策&#xff08;如症状…

2026/7/25 22:21:48 阅读更多 →
阿里开源Page Agent:前端原生AI助手,用自然语言操控网页元素

阿里开源Page Agent:前端原生AI助手,用自然语言操控网页元素

如果你正在开发一个需要用户频繁点击、填写表单的 Web 应用&#xff0c;或者想为你的 SaaS 产品快速集成一个 AI 助手&#xff0c;那么今天要讨论的这个工具&#xff0c;可能会让你重新思考“自动化”的实现方式。过去&#xff0c;为网页添加自动化或智能交互能力&#xff0c;通…

2026/7/25 22:21:48 阅读更多 →
LZHAM API详解:如何在C/C++项目中集成高性能压缩功能

LZHAM API详解:如何在C/C++项目中集成高性能压缩功能

LZHAM API详解&#xff1a;如何在C/C项目中集成高性能压缩功能 【免费下载链接】lzham_codec Lossless data compression codec with LZMA-like ratios but 1.5x-8x faster decompression speed, C/C 项目地址: https://gitcode.com/gh_mirrors/lz/lzham_codec LZHAM是一…

2026/7/25 22:21:48 阅读更多 →
gh_mirrors/pl/community-resources贡献指南:如何提交你的第一个Figma插件

gh_mirrors/pl/community-resources贡献指南:如何提交你的第一个Figma插件

gh_mirrors/pl/community-resources贡献指南&#xff1a;如何提交你的第一个Figma插件 【免费下载链接】community-resources A collection of open source plugins, widgets, agent skills, and developer resources for Figma products that have been shared on GitHub. 项…

2026/7/25 22:21:48 阅读更多 →
Miden VM vs 其他ZKP方案:为什么STARK虚拟机是Web3隐私的终极选择

Miden VM vs 其他ZKP方案:为什么STARK虚拟机是Web3隐私的终极选择

Miden VM vs 其他ZKP方案&#xff1a;为什么STARK虚拟机是Web3隐私的终极选择 【免费下载链接】miden-vm STARK-based virtual machine 项目地址: https://gitcode.com/gh_mirrors/mi/miden 在Web3隐私技术的激烈竞争中&#xff0c;零知识证明&#xff08;ZKP&#xff0…

2026/7/25 22:21:48 阅读更多 →
飞书OKR+AI协同失效的终极归因(仅限首批内测用户可见的3层嵌套逻辑图谱)

飞书OKR+AI协同失效的终极归因(仅限首批内测用户可见的3层嵌套逻辑图谱)

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;飞书OKRAI协同失效的终极归因&#xff08;仅限首批内测用户可见的3层嵌套逻辑图谱&#xff09; 当飞书OKR系统与内嵌AI助手&#xff08;如“目标智析”模块&#xff09;在首批内测中出现目标对齐率下降47%、关…

2026/7/25 22:20:47 阅读更多 →

日新闻

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制&#xff1a;kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档&#xff0c;但是相关网站浏览体验不好各种广告&#xff0c;各种登录验证&#xff0c;需要很多步骤才能下载文档&#xff0c;该脚本就是为了解决您的…

2026/7/25 0:00:35 阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述&#xff1a;为什么我们要“手撕”string类&#xff1f;在C的学习道路上&#xff0c;尤其是从C语言过渡到C的“初阶”阶段&#xff0c;string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了&#xff0c;、find、substr&#xff0c;几个操作符和函数…

2026/7/25 0:00:35 阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看&#xff0c;“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具&#xff0c;而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源&#xff0c;比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:00:35 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中&#xff0c;我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源&#xff0c;还是配置文件、证书等&#xff0c;都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下&#xff0c;但这…

2026/7/25 5:08:22 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP&#xff08;轻量级目录访问协议&#xff09;作为企业级身份认证的黄金标准&#xff0c;已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时&#xff0c;发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/25 5:13:53 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”&#xff0c;而是以可解释、可审计、可迭代的方式&#xff0c;赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻