(学习日记)2023.4.10

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


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


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

2023.4.10

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

一、51:串口通信

  1. 设置串口初始化,根据板子的参数更改设置
    (学习日记)2023.4.10_第1张图片
    由于直接设4800误差太大,2400误差为0.16,所以可以用2400翻倍得到4800

(学习日记)2023.4.10_第2张图片

(学习日记)2023.4.10_第3张图片

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

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

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

其中,PCON打开B7:控制SMOD翻倍
(学习日记)2023.4.10_第4张图片
(学习日记)2023.4.10_第5张图片
SCON设为 0x50:控制数据位数,并允许接收
(学习日记)2023.4.10_第6张图片
TMOD 高四位先置0,然后将定时器的M11:打开定时器1,并设置定时器1的模式
(学习日记)2023.4.10_第7张图片
(学习日记)2023.4.10_第8张图片

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

(学习日记)2023.4.10_第9张图片

SBUF
(学习日记)2023.4.10_第10张图片
TI:发送控制器
TI1时,说明正在发送;当TI0时,说明发送完成;
TI需要软件置0,所以最后加上 TI=0;

  1. (拓展)编写 串口发送数据串函数
#include 

/*
发送字符串
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端接收数据如图所示:
    (学习日记)2023.4.10_第11张图片
    而程序如下所示,很明显系统出现了一些错误,只能重复的输出第一个字符。
UART_SendString("bobobobobo");
  1. 解决问题
    经过排查,终于发现了问题源自 全局中断
    (学习日记)2023.4.10_第12张图片
在初始化程序中,将:
EA = 1;               // 全局中断开启
改为
EA = 0;               // 全局中断关闭
即可避免上述问题

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

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

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

(学习日记)2023.4.10_第13张图片

你可能感兴趣的:(学习日记,学习,单片机,嵌入式硬件)