2025蓝桥杯(单片机)备赛--扩展外设之UART1的原理与应用(十二)

一、串口1的实现原理

        a.查看STC15F2K60S2数据手册:

        29ab8197dfda4b41941ab025ef5b56dc.png

        串口一在590页,此款单片机有两个串口。

串口1相关寄存器:

67015b00ae504fe58a96af107f61b694.png

SCON:串行控制寄存器(可位寻址)

c64efa6176ac428a822c996fba6ef430.png

85eafdfd81f846ca9b658b2b275daf39.png

4215d99c0971485191f3fe3d60e3a772.png

b9e67d26c30445898a520538116e2607.png

4c2088ec56cf4045b5421aef1b1c0fc4.png

SCON寄存器说明:

                需要PCON寄存器的SMOD0/PCON.6为0,使SM0和SM1一起指定工作模式,这里选择工作模式1,REN位置1,允许接受,

TI, R1 在中断里面 调用。    

        SCON=0X50;    0101 0000

    PCON寄存器:

464fcca55a764c1bbd38d89d6766ff91.png

PCON寄存器说明:

            SMOD无论0还是1,串口1波特率 都加倍,SMOD0必须为0,才可选择工作模式。所以PCON=0x00(默认也是0X00);

    SBUF数据缓冲寄存器:

855620bf340c4c2c84e11d66e02844bd.png

说明:实际上两个缓冲器,一个是度寄存器,一个是写寄存器。把要发送的数据写到SBUF里面,从SBUF立马接收数据,SBUF大小为1个字节。

AUXR辅助寄存器:

ef53d4c8eef74e899e0f9bd3b95f5b10.png

a189819a6fb540d0aa0e7d2d5d18482c.png

AUXR寄存器说明:控制串口1的速度都为1T,采用定时器1作为串口1的波特率发生器。

dafa01c5fb7d48e69ac947a2c62e6129.png

由于还用到了定时器1,所以还要 配置 定时器1的工作模式,工作模式为16位自动重装模式,设置定时器1初始值,禁止定时器1中断,开启定时器1.

57095c4520a4448cab98f9e3a768115a.png

//定时器1配置代码
{TMOD&=0X0F;TL1=0;TH1=0;ET1=0;TR1=1; 
}

ca041fc9f1284627ad40d7d7353b866f.png

28dff7d913fb4af4a594cf0560018c5a.png

串口1中断配置:

f795c2c6d4cb4afaaa356c6f87364711.png

1d3f6f7ee3f5455588aebec3f46e98cd.png

18a3a181f9e84681b673df4ee69c7914.png

fe66be9b020345aea36db63b9ce806ce.png

说明:可知其中断标志位为ES,可以位寻址,所以可以直接给ES赋值,我们需要开启,ES=1;EA=1;

2  串口1初始化代码:

void Uart1_Init(void)    //4800bps@12.000MHz
{SCON = 0x50;    //8位数据,可变波特率AUXR |= 0x40;    //定时器时钟1T模式AUXR &= 0xFE;    //串口1选择定时器1为波特率发生器TMOD &= 0x0F;    //设置定时器模式TL1 = 0x8F;     //设置定时初始值TH1 = 0xFD;    //设置定时初始值ET1 = 0;    //禁止定时器中断TR1 = 1;    //定时器1开始计时//记得开启中断ES=1;EA=1;
}

串口中断函数:

7483fc81271440d59d486e6a86709659.png

可知 中断号为4

串口1中断代码:

void UART1_Routine(void) interrupt 4
{if(RI){//接受定长字符RI=0;rx_clear_cnt=0;rx_buf[rx_long++] = SBUF;if(rx_long==3){rx_long=0;rx_flag=1;}//接受不定长字符RI=0;rx_clear_cnt=0;rx_buf[rx_long++]=SBUF;if(rx_buf=='\n'){rx_long=0;rx_flag=1;}}if(TI){TI=0;busy=0;//发送忙标志位   }
}

串口1发送函数:

void SendByte(u8 byte)
{while(busy);busy=1;//申请忙碌,进入保护,防止干扰SBUF=byte;
}
void SendString(u8* str)
{while(*str){SendByte(*str++);}
}

定时清除串口接收内容:

void  RXClear_Process(void){rx_clear_cnt++;if(rx_clear_cnt>=50){ rx_cleat_cnt=0;rx_long=0;memset(rx_buf,'\0',sizeof(rx_buf);}}

2025蓝桥杯(单片机)备赛--扩展外设之超声波测距原理与应用(十一)-CSDN博客

2025蓝桥杯(单片机)备赛--扩展外设之DS1302的使用(九)_ds1302引脚图及功能-CSDN博客

2025蓝桥杯(单片机)备赛--扩展外设之I2C的重要应用--PCF8591(八)-CSDN博客

2025蓝桥杯(单片机)备赛--扩展外设之I2C的重要应用--AT24C02(七)-CSDN博客

2025蓝桥杯(单片机)备赛--扩展外设控制之DS18B20(六)-CSDN博客

2025蓝桥杯(单片机)备赛--基本外设控制之共阳数码管(四)-CSDN博客

2025蓝桥杯(单片机)备赛--基本外设控制之继电器和蜂鸣器(三)-CSDN博客

2025蓝桥杯(单片机)备赛--基本外设控制之LED(二)_2024蓝桥杯单片机资料-CSDN博客

2025蓝桥杯(单片机)备赛--基本框架搭建(一)_蓝桥杯单片机大赛-CSDN博客

 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redmi 12c 刷机

刷机历程 一个多月前网购了redmi 12c这款手机, 价格只有550,用来搞机再适合不过了, 拆快递后就开始倒腾,网上有人说需要等7天才能解锁,我绑定了账号过了几天又忍不住倒腾,最后发现这块手机不用等7天解锁成功了,开始我为了获取root权限, 刷入了很火的magisk,但是某一天仍然发现/…

五种创建k8s的configMap的方式及configmap使用

configmap介绍 Kubernetes 提供了 ConfigMap 来管理应用配置数据,将配置信息从容器镜像中解耦,使应用更灵活、可移植。 1、基于一个目录来创建ConfigMap ​ 你可以使用 kubectl create configmap 基于同一目录中的多个文件创建 ConfigMap。 当你基于目…

【机器学习chp7】SVM

参考1,笔记 SVM笔记.pdf 参考2:王木头视频 什么是SVM,如何理解软间隔?什么是合叶损失函数、铰链损失函数?SVM与感知机横向对比,挖掘机器学习本质_哔哩哔哩_bilibili 目录 一、SVM模型 二、构建决策函…

TailwindCss 总结

目录 一、简介 二、盒子模型相关 三、将样式类写到一个类里面apply 四、一款TailWind CSS的UI库 一、简介 官方文档:Width - TailwindCSS中文文档 | TailwindCSS中文网 Tailwind CSS 的工作原理是扫描所有 HTML 文件、JavaScript 组件以及任何 模板中的 CSS 类…

数据结构 (6)栈的应用举例

1. 递归调用 递归函数在执行时,会将每一层的函数调用信息(包括局部变量、参数和返回地址)存储在栈中。当递归函数返回时,这些信息会从栈中弹出,以便恢复之前的执行状态。栈的后进先出(LIFO)特性…

Qt界面篇:QMessageBox高级用法

1、演示效果 2、用法注意 2.1 设置图标 用于显示实际图标的pixmap取决于当前的GUI样式。也可以通过设置icon pixmap属性为图标设置自定义pixmap。 QMessageBox::Icon icon(

警钟长鸣,防微杜渐,遨游防爆手机如何护航安全生产?

近年来,携非防爆手机进入危险作业区引发爆炸的新闻屡见报端。2019年山西某化工公司火灾,2018年延安某煤业瓦斯爆炸,均因工人未用防爆手机产生静电打火引发。涉爆行业领域企业量大面广,相当一部分企业作业场所人员密集,…

【VRChat 全身动捕】VIVE 手柄改 tracker 定位器教程,低成本光学动捕解决方案(持续更新中2024.11.26)

更新 0.0.1(2024/11/26): 1.解决了内建蓝牙无法识别、“steamVR 蓝牙不可用” 的解决方案 2.解决了 tracker 虽然建立了连接但是在 steamVR 界面上看不到的问题 3.解决了 VIVE 基站1.0 无法被蓝牙识别 && 无法被 steamVR 搜索到 &…

大数据面试SQL题-笔记02【查询、连接、聚合函数】

大数据面试SQL题复习思路一网打尽!(文档见评论区)_哔哩哔哩_bilibiliHive SQL 大厂必考常用窗口函数及相关面试题 大数据面试SQL题-笔记01【运算符、条件查询、语法顺序、表连接】大数据面试SQL题-笔记02【查询、连接、聚合函数】​​​​​​​ 目录 01、查询 01…

Kubeadm 安装 Kubernetes 高可用集群 v1.30.0

1、修改主机名(各个节点) hostnamectl set-hostname xxx2、hosts 文件加入主机名(全部节点) cat /etc/hosts 192.168.88.5 master1 192.168.88.6 master2 192.168.88.7 master3 192.168.88.8 node13、关闭防火墙(全部…

网上蛋糕售卖店管理系(Java+SpringBoot+MySQL)

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装网上蛋糕售卖店管理系统软件来发挥其高效地信息处理的作用…

Ubuntu安装不同版本的opencv,并任意切换使用

参考: opencv笔记:ubuntu安装opencv以及多版本共存 | 高深远的博客 https://zhuanlan.zhihu.com/p/604658181 安装不同版本opencv及共存、切换并验证。_pkg-config opencv --modversion-CSDN博客 Ubuntu下多版本OpenCV共存和切换_ubuntu20如同时安装o…

自由学习记录(25)

只要有修改,子表就不用元表的参数了,用自己的参数(只不过和元表里的那个同名) 子表用__index“继承”了父表的值,此时子表仍然是空表 一定是创建这样一个同名的变量在原本空空的子表里, 传参要传具体的变…

1- 9 C 语言面向对象

面向对象的基本特性:封装,继承,多态 1.0 面向过程概念 当我们在编写程序时,通常采用以下步骤: 1. 将问题的解法分解成若干步骤 2. 使用函数分别实现这些步骤 3. 依次调用这些函数 这种编程风格的被称作 面向过程…

路面泥泞,坑洼,裂缝,路面损坏,马路牙检测 YOLO标记资源整理

数据集介绍 可识别常见的路面泥泞,坑洼,裂缝,路面损坏,马路牙等多种路面状况。 数据集分割 训练集89% 2052图片 validation集8% 186图片 test集3% 78图片 预处理 自动定向: 已应用 自动调…

Jmeter中的测试片段和非测试原件

1)测试片段 1--测试片段 功能特点 重用性:将常用的测试元素组合成一个测试片段,便于在多个线程组中重用。模块化:提高测试计划的模块化程度,使测试计划更易于管理和维护。灵活性:可以通过模块控制器灵活地…

Cocos编辑器

1、下载 下载地址:https://www.cocos.com/creator-download 2、编辑器界面介绍 官方链接:https://docs.cocos.com/creator/3.8/manual/zh/editor/ 3、项目结构 官方链接:https://docs.cocos.com/creator/3.8/manual/zh/getting-started/…

JAVA题目笔记(二十)Stream流综合练习+方法引用

一、数据过滤 import java.util.*; import java.util.stream.Collectors;public class Co {public static void main(String[] args) {List<Integer> listnew ArrayList<>();Collections.addAll(list,1,2,3,4,5,6,7,8,9,10);List<Integer> newlist list.str…

计算机操作系统——进程控制(Linux)

进程控制 进程创建fork&#xff08;&#xff09;函数fork() 的基本功能fork() 的基本语法fork() 的工作原理fork() 的典型使用示例fork() 的常见问题fork() 和 exec() 结合使用总结 进程终止与$进程终止的本质进程终止的情况正常退出&#xff08;Exit&#xff09;由于信号终止非…

摄像头原始数据读取——V4L2(mmap模式,V4L2_MEMORY_MMAP)

摄像头原始数据读取——V4L2(mmap模式,V4L2_MEMORY_MMAP) 内存映射模式&#xff0c;是将设备在内核态申请的用于存储视频数据的物理内存映射到用户空间&#xff0c;使得用户应用程序可以直接访问和操作设备数据物理内存&#xff0c;避免了数据的拷贝。因此采集速度较快&#x…