(学习日记)2023.4.10

news/2024/12/13 16:43:03/

写在前面:
由于时间的不足与学习的碎片化,写博客变得有些奢侈。
但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。
既然如此
不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录,记录笔者认为最通俗、最有帮助的资料,并尽量总结几句话指明本质,以便于日后搜索起来更加容易。


标题的结构如下:“类型”:“知识点”——“简短的解释”
部分内容由于保密协议无法上传。


点击此处进入学习日记的总目录

2023.4.10

  • 一、51:串口通信
  • 二、51:串口发送出现低时延相同十六进制数字
  • 三、51:串口发送中文汉字

一、51:串口通信

  1. 设置串口初始化,根据板子的参数更改设置
    在这里插入图片描述
    由于直接设4800误差太大,2400误差为0.16,所以可以用2400翻倍得到4800

在这里插入图片描述

在这里插入图片描述

(PS:由于个人的板子问题,4800总是出现乱码,所以下文实际使用的为9600

此时,初始化的函数如下:

#define FOSC 12000000L     // 系统频率为12MHz
#define BAUD 9600          // 波特率为9600
void UartInit(void)		
{PCON |= 0x80;         // SMOD = 1,波特率加倍SCON = 0x50;          // 8位数据位,允许接收,模式1TMOD &= 0x0F;         // 定时器1模式设为8位自动重载TMOD |= 0x20;TH1 = TL1 = -(FOSC/12/16/BAUD); // 定时器1初始值 (等同用0xFF-(FOSC/12/16/BAUD))TR1 = 1;              // 启动定时器1ES = 1;               // 开启串口中断EA = 0;               // 全局中断关闭
}

其中,PCON打开B7:控制SMOD翻倍
在这里插入图片描述
在这里插入图片描述
SCON设为 0x50:控制数据位数,并允许接收
在这里插入图片描述
TMOD 高四位先置0,然后将定时器的M11:打开定时器1,并设置定时器1的模式
在这里插入图片描述
在这里插入图片描述

  1. 编写 串口发送数据函数
/*
发送数字
Byte:发送内容
*/
void UART_SendByte(unsigned char Byte)
{SBUF = Byte;                    // 将数据放入发送缓冲区while(!TI);                    // 等待发送完成TI = 0;                        // 清除发送完成标志位
}

在这里插入图片描述

SBUF
在这里插入图片描述
TI:发送控制器
TI1时,说明正在发送;当TI0时,说明发送完成;
TI需要软件置0,所以最后加上 TI=0;

  1. (拓展)编写 串口发送数据串函数
#include <string.h>/*
发送字符串
String[]:字符串内容
*/
void UART_SendString(unsigned char *str)
{unsigned char i = 0;for (i = 0; i < strlen(str); i++)UART_SendByte(str[i]);UART_SendByte('\n');
}

二、51:串口发送出现低时延相同十六进制数字

  1. PC端接收数据如图所示:
    在这里插入图片描述
    而程序如下所示,很明显系统出现了一些错误,只能重复的输出第一个字符。
UART_SendString("bobobobobo");
  1. 解决问题
    经过排查,终于发现了问题源自 全局中断
    在这里插入图片描述
在初始化程序中,将:
EA = 1;               // 全局中断开启
改为
EA = 0;               // 全局中断关闭
即可避免上述问题

三、51:串口发送中文汉字

只需要将汉字放到 UART_SendString()函数中即可,如:

UART_SendString("啵啵啵,中午吃什么呢"); 

在这里插入图片描述


http://www.ppmy.cn/news/39765.html

相关文章

麻了,代码改成多线程,服务直接挂了

前言 很多时候&#xff0c;我们为了提升接口的性能&#xff0c;会把之前单线程同步执行的代码&#xff0c;改成多线程异步执行。 比如&#xff1a;查询用户信息接口&#xff0c;需要返回用户基本信息、积分信息、成长值信息&#xff0c;而用户、积分和成长值&#xff0c;需要…

Coremail AI技术发展前生今世

2023年3月15日凌晨&#xff0c;OpenAI发布大型多模态模型GPT-4&#xff0c;正式宣告AI迈入新的“黄金时代”。作为邮件安全厂商&#xff0c;Coremail不禁思索&#xff0c;在当今科技高速发展的节点上&#xff0c;如何将此类大型多模态模型落地至具体的邮件安全防护&#xff1f;…

es查询三种方式,Elasticsearch查询速度为什么这么快

Elasticsearch查询速度为什么这么快&#xff1f; es查询三种方式

第1章 微服务架构简介

*什么是微服务架构:微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务之间采用轻量级的通信机制互相协作(通常是基于HTTP协议的RESTful API)。每个服务都围绕…

二叉树(OJ)

单值二叉树&#xff08;力扣&#xff09; ---------------------------------------------------哆啦A梦的任意门------------------------------------------------------- 我们来看一下题目的具体要求&#xff1a; 既然我们都学了二叉树了&#xff0c;我们就应该学会如何去…

35--Django-项目实战-全栈开发-基于django+drf+vue+elementUI企业级项目开发流程-封装日志、全局异常、封装Response对象

数据库配置: 数据库配置,使用环境变量存储敏感信息 windows为例,添加环境变量: 在settings.py配置: password = os.environ.get(DB_PASSWORD, 111) # ‘111’表示默认值模块相关: 1 导入模块的路径,需要从环境变量下开始导入 2 执行脚本(s2)所在路径,自动加入到环境…

被吐槽 GitHub仓 库太大,直接 600M 瘦身到 6M,这下舒服了

大家好&#xff0c;我是小富&#xff5e; 前言 忙里偷闲学习了点技术写了点demo代码&#xff0c;打算提交到我那 2000Star 的Github仓库上&#xff0c;居然发现有5个Issues&#xff0c;最近的一条日期已经是2022/8/1了&#xff0c;以前我还真没留意过这些&#xff0c;我这人懒…

VS Code中搭建C语言开发环境

搭建C语言开发环境可以分为以下几个步骤&#xff1a; 安装VS code编辑器安装C/C扩展安装C语言编译器 下面将对每个步骤进行详细说明&#xff1a; 1. 安装VS code编辑器&#xff1a; 访问 https://code.visualstudio.com/&#xff0c;选择合适的安装包下载并安装VS code编辑器…