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博客

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

利用Python爬取12306网站车次信息

前言 随着互联网技术的发展,网络爬虫成为了获取公开数据的强大工具之一。对于经常需要查询火车票信息的人来说,能够自己编写一个爬虫程序来自动获取并整理这些信息,无疑是一个非常实用的技能。本文将详细介绍如何使用Python爬取12306网站上的车次信息,包括获取站点对应城市…

React Hooks中use的细节

文档 useState useState如果是以函数作为参数,那要求是一个纯函数,不接受任何参数,同时需要一个任意类型的返回值作为初始值。 useState可以传入任何类型的参数作为初始值,当以一个函数作为参数进行传入的时候需要注意&#xff…

2024 TIP 论文 robust-ref-seg 复现过程

本篇是 2024 年 TIP 论文 Toward Robust Referring Image Segmentation 的复现过程。 特点是对不存在的目标不会进行错误分割,鲁棒性较高,其结果如图: 配置环境 根据论文给出的链接 robust-ref-seg 配置环境。 下载数据集 按照 README 指…

数据结构(初阶6)---二叉树(遍历——递归的艺术)(详解)

二叉树的遍历与练习 一.二叉树的基本遍历形式1.前序遍历(深度优先遍历)2.中序遍历(深度优先遍历)3.后序遍历(深度优先遍历)4.层序遍历!!(广度优先遍历) 二.二叉树的leetcode小练习1.判断平衡二叉树1)正常解法2)优化解法 2.对称二叉…

k8s集群增加nfs-subdir-external-provisioner存储类

文章目录 前言一、版本信息二、本机安装nfs组件包三、下载nfs-subdir-external-provisioner配置文件并进行配置1.下载文件2.修改配置 三、进行部署备注:关于镜像无法拉取问题的处理 前言 手里的一台服务器搭建一个单点的k8s集群,然后在本机上使用nfs-su…

C++ For Hot100

数组&#xff1a;数组是存放在连续内存空间上的相同类型数据的集合。 1. 两数之和 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {vector<int> v;for(int i 0;i<nums.size…

高校宿舍节能用电现状及智慧监管平台构建

0 引言 在节能减排的大背景下&#xff0c;高校通过精细化宿舍用电管理&#xff0c;提升师生的节能节电意识等举措&#xff0c;能够显著提高电能资源的使用效率&#xff0c;并有效预防火灾等安全事故&#xff0c;确保师生的人身安全。因此&#xff0c;当前亟需加强对智慧监管平…

Spring Boot英语知识网站:开发策略

5系统详细实现 5.1 管理员模块的实现 5.1.1 用户信息管理 英语知识应用网站的系统管理员可以对用户信息添加修改删除以及查询操作。具体界面的展示如图5.1所示。 图5.1 用户信息管理界面 5.1.2 在线学习管理 系统管理员可以对在线学习信息进行添加&#xff0c;修改&#xff0…

Jmeter中的前置处理器

5&#xff09;前置处理器 1--JSR223 PreProcessor 功能特点 自定义数据处理&#xff1a;使用脚本语言处理请求数据&#xff0c;实现高度定制化的数据处理和生成。动态数据生成&#xff1a;在请求发送前生成动态数据&#xff0c;如随机数、时间戳等。变量设置&#xff1a;设置…

华为鸿蒙内核成为HarmonyOS NEXT流畅安全新基座

HDC2024华为重磅发布全自研操作系统内核—鸿蒙内核&#xff0c;鸿蒙内核替换Linux内核成为HarmonyOS NEXT稳定流畅新基座。鸿蒙内核具备更弹性、更流畅、更安全三大特征&#xff0c;性能超越Linux内核10.7%。 鸿蒙内核更弹性&#xff1a;元OS架构&#xff0c;性能安全双收益 万…

EG3D: Efficient Geometry-aware 3D Generative Adversarial Networks 学习笔记

1 Contributions 混合显式-隐式网络架构&#xff1a;提出了一种 Tri-plane 的3D表征方法&#xff0c;结合显式体素网格与隐式解码器的优点 速度快&#xff0c;内存效率高&#xff1b; 支持高分辨率生成&#xff0c;保持3D表征的灵活性和表达能力。与纯显式或隐式方法相比&#…

【数据结构OJ】相交链表问题,求相交链表的相交第一个交点

题目如下&#xff08;题目来源力扣&#xff09;&#xff1a; 个人解题思路&#xff1a; 运用双指针&#xff0c;第一次遍历先一起走&#xff0c;当一个走到尾时开始计数&#xff0c;等另一个指针也走到尾时记录下两个指针的路程差&#xff0c;同时比对两个指针指向的地址是否相…

【C语言】指针与数组的例题详解:深入分析与高级用法

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 &#x1f4af;前言&#x1f4af;题目一详细分析与解答代码逐步解析 &#x1f4af;进一步优化和拓展1. 指针与数组的关系2. 指针运算的注意事项3. 常见的错误和陷阱4. 拓展&#xff1a;指针操作的应用场…

【Java】ArrayList与LinkedList详解!!!

目录 一&#x1f31e;、List 1&#x1f345;.什么是List&#xff1f; 2&#x1f345;.List中的常用方法 二&#x1f31e;、ArrayList 1&#x1f34d;.什么是ArrayList? 2&#x1f34d;.ArrayList的实例化 3&#x1f34d;.ArrayList的使用 4&#x1f34d;.ArrayList的遍…

【SQL Server】华中农业大学空间数据库实验报告 实验六 视图

1.实验目的 通过课堂理论学习与实验课的实际操作&#xff0c;充分理解视图的相关概念&#xff0c;作用&#xff0c;以及特点&#xff0c;视图中定义的是对一个或多个基本表的查询语句&#xff0c;其本身并不保存数据&#xff0c;所有的数据都存储在数据库的表中&#xff0c;因…

javaweb-day01-html和css初识

html:超文本标记语言 CSS&#xff1a;层叠样式表 1.html实现新浪新闻页面 1.1 标题排版 效果图&#xff1a; 1.2 标题颜色样式 1.3 标签内颜色样式 1.4设置超链接 1.5 正文排版 1.6 页面布局–盒子 &#xff08;1&#xff09;盒子模型 &#xff08;2&#xff09;页面布局…

【Android】webview常用方法和使用

文章目录 前言一、常见用法二、基础属性webView的常用方法WebViewClient的常用方法WebChromeClient的常用方法WebSettings的相关方法 三、加载流程和事件回调四、webview和JS之间的互相调用总结 五、参考链接 前言 最近项目又用到了webview&#xff0c;在回顾复习一次webview相…

【微服务架构】Kubernetes与Docker在微服务架构中的最佳实践(详尽教程)

文章目录 什么是微服务架构Docker在微服务中的应用Docker基础Docker的核心组件 Docker在微服务中的优势 Kubernetes在微服务中的应用Kubernetes基础Kubernetes的核心组件 Kubernetes在微服务中的优势 Kubernetes与Docker的集成最佳实践容器化微服务服务发现与负载均衡自动化部署…

深入了解JDK动态代理

什么是JDK动态代理 &#xff08;有动态代理&#xff0c;就有静态代理&#xff0c;参见&#xff1a;多线程03--静态代理模式_runnable接口静态代理模式-CSDN博客&#xff09; JDK动态代理是Java提供的一种动态生成代理对象的机制&#xff0c;允许在运行时创建一个实现了指定接口…

C#基础56-60

56.字符数组x中存有任意一串字符&#xff1b;串中的所有小写字母改写成大写字母&#xff0c;如果是大写字母改为小写字母&#xff0c;其他字符不变。最后把已处理的字符串仍重新存入字符数组x中&#xff0c;最后调用函数把结果输出到控制台中。 57.求出100以上1000以内所有个位…