【单片机】【学习日志】51单片机学习日志[Day4、2022.1.12]

2023-10-11 05:59

本文主要是介绍【单片机】【学习日志】51单片机学习日志[Day4、2022.1.12],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一部分_串口

一、基础知识

  • 串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。
  • 单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大的扩展了单片机的应用范围,增强了单片机系统的硬件实力。
  • 51单片机内部自带UART(Universal Asynchronous Receiver Transmitter,通用异步收发器)可实现单片机的串口通信。

第一个 USB转换工具 相当于

第二个 陀螺仪模块,加速度传感器

第三个 蓝牙串口

小贴士:

VGA接口,相比于 串口的接口(两排) 它有三排插、孔。【用于视频传输、电脑外接显示器】

二、硬件电路

1、介绍

  • 简单双向串口通信有 2根通信线 (发送端 TXD 和 接收端 RXD);
    • 发送端 TXD,Transmit eXchange Data;
    • 接收端 RXD,Receive eXchange Data。
  • TXD与RXD要交叉连接;
  • 当只需单向的数据传输时,可以直接 1根通信线;
  • 电平标准不一致时,需要加电平转换芯片

2、 电平标准

  • 电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有如下三种:
    • TTL电平:+5V 表示 1, 0V 表示 0 ;(对地电压)
    • RS232电平:-3~-15V 表示 1, +3~+15V 表示 0;(对地电压) <反逻辑>【距离最多十多米,否则会传输出错】
    • RS485电平:两线压差+2~+6V 表示 1, -2~-6V 表示 0(差分信号)【最多传输一千多米】

三、常见的通信接口的比较

1、比较

I^2CSPI的通信方式都有同步,且都带有 SCL,即时钟线

1.1 相关术语

  • 全双工:通信双方可以在同一时刻互相传输数据;

  • 半双工:通信双方可以互相传输数据,但必须分时复用 1根数据线;

  • 单工:通信只能有一方发送到另一方,不能反向传输;【要线或者不要线,遥控器(单向)发送信号】

  • 异步:通信双方各自约定通信速率;(时间不严格)

  • 同步:通信双方靠 1根时钟线约定通信速率;(时间严格)

  • 总线:连接各个设备的数据传输线路 (类似于一条马路,把路边各住户连接起来,使住户可以相互交流)。

四、串口的参数及时序图

1、概念

  • 波特率:串口通信的速率(发送和接收各数据位的间隔时间),表示每秒钟传送码元符号的个数,是衡量数据传送速率的指标。
    • 比较:比特率:是指每秒传送的比特(bit)数。单位为 bps(Bit Per Second),比特率越高,每秒传送数据就越多。
  • 检验位:用于数据验证;
  • 停止位:用于数据帧间隔。

2、检验位

奇检验(第9位 为检验位)

  • 检验通过

    输入:0000 0011 1 
    接收:0000 0011 1
    

    输入的时候,原本八位中有 2个1 所以第9位检验位配置 1,保持 1 的个数为 奇数

    接收的时候,还是保持着奇数

但是检验也是有问题的

像下列类似的错误是检测不出来的,只能在一定程度上检测数据的正误性,说明其排错率不高

输入:0000 0011 1 
接收:0000 0101 1
  • 检验不通过

    输入:1110 0000 0
    接收:1100 0000 0
    

    输入的时候是奇数

    接收的时候,是偶数,明明采用的是奇检验,却出现了偶数,这就说明在传输出了问题,反馈给系统,让其重发或者是进行其它处理(我们自己定)。

3、串口的通信

顺序:从低到高位发,1位1位的发

五、串口模式图

SBUF(Serial Buffer):串口数据缓存寄存器物理上是两个独立的寄存器,但占用相同的地址

操作时,写入的是发送寄存器操作时,读出的是接收寄存器

1、收发过程分析

串口发送的时候,先把八位的数据写到 SBUF 中,再通过发送控制器 控制 控制门TXD 引脚把数据送出。(发出去之后,系统就会产生 1个TI(Transmit Interrupt),执行中断函数)

xxx = SBUF;//发送的时候,把SBUF赋给别的变量

中间那块是 时钟,控制 波特率

接收的时候,由 RXT接收数据,通过``接收控制器控制 移位寄存器把 数据存到SBUF` 中,需要的时候把它取出来。(接收数据的时候,如果收到1个字节,系统就会产生1 个RI(Receive Interrupt),执行中断函数)

SBUF = XXX;//接收的时候,把接收的数据赋给SBUF

2、定时器的中断

2.1 定时器的中断系统

2.2 串口的中断系统

TIRI 占用同 1个通道

串口发送举例子:

若是发送完成,就会触发中断,然后判断是 TI还是RI , ≥1 只要有其中一个信号就可以使得 ES打开、EA打开、配置ps(但是此处我们同时只会有1个中断,所以可以不用配置 优先级,只配置 ESEA即可)

3、相关寄存器

PCON 电源控制控制寄存器的前两位是和寄存器有关的 SMODSMOD0

IE 中的EAES与串口有关;

第二部分:

一、串口向电脑发送数据&电脑通过串口控制LED

1、串口向电脑发送数据

1.1看手册_串行口初始化配置 寄存器SCON

(1、配置SM0/FE

SM0/FE

  • FE用于检测帧错误,适用于 9位数据格式,我们当前用的是 8位 所以可不不管它。
  • 但是SM0 需要配合 SM1 配置工作模式

所以SM0=0SM1=1 便可工作在模式1(常用,以此为例) 中

(2、SM2 允许模式2或模式3多机通信控制位。我们只用模式1 所以用不到,不用管。

(3、REN(Receive ENable,接收使能)(使能,理解为开关即可)

因为此处是 发送数据,所以可以先 REN=0 关闭开关。(给 1 也行,只要外接(电脑)不给它发,就不会出发)

(4、TB8RB8

暂时用不到,不用管。

TB8=0,RB8=0;

(5、TI

发送完了,TI=1,同时中断中可以判断是 发送 还是接收。发送完了以后,我们必须在软件中将其 置为 0,因为硬件只会置1

TI=0;

(6、RI

因为我们此处是 发送输出,接收就不管它了。置为0

RI=0;

整合起来是:

二进制:0100 0000 十六进制:0x40

SCON=0X40;

1.2 看手册_串行口初始化配置 寄存器SBUF

因为 SBUF接收/发送缓存,初始化的时候不用配置它。

1.3 看手册_串行口初始化配置 寄存器PCON

(1、SMODSMOD0

PCON的寄存器中只有 2位与串口有关。

看图,SMOD=0,不加倍;SMOD=1 加倍。
SMOD0 因为是8位数据格式,不用检测,可以置 0。

(2、IE (Interrupt Enable)

中断开关 ,此时可以不用开启中断,所以可以不配置。

整合起来是:

二进制:1000 0000 十六进制:0x80

PCON=0x80;

1.4 配置定时器自动重装模式

配置定时器1 为8位自动重装

二进制:0010 0000 十六进制:0x20

关于波特率的生成与计算:

(1、先用STC-ISP生成

加倍:为了让时钟不会过慢

(2、波特率的计算

波特率生成的地方,有T1溢出率SMO还有÷16

生成的代码中 SCON=0x50,我自己写的是 SCON=0x40 (我这里是不使能的)

(1)T1溢出率

晶振是 11.0592MHz ,12÷11.0592=1.085

十六进制 0xFA 的十进制是 250 ,我们这个计时器达到256就会溢出,所以这个时候,再走6个数,就会溢出,对应着的是6×1.085=6.51us ,溢出率=1/6.51us=0.153609MHz

(2)SMOD

我们此处设置的是 加倍,即SMOD=1波特率=溢出率÷16=0.153609MHz÷16=9600Hz,是我们设的波特率

也可以参考:

1.5 发送字节函数

发送的过程,我们只需要把数据写到 SBUF 中即可,一写入即可发送出去。(前提是定时器波特率已经都初始化好了)

1.6 调用写完的函数

初始化,再调用

串口向电脑发送数据_执行结果:

(1、发送我们输入的数据

开发板上点击复位 ,就可以看到串口助手上的数据

(2、自动发送递增的十六进制数

#include <REGX52.H>
#include "Delay.h"
#include "UART.h"unsigned char Sec;//定义一个 Sec(秒)void main()
{UART_Init();UART_SendByte(0x11);while(1){UART_SendByte(Sec);Sec++;Delay(1000);}
}

小贴士:

(1)函数模块化的时候,函数名的规范格式:模块名_功能

(2)模块化编程的时候,记得写函数的注释

2、电脑通过串口控制LED

(1、配置 REN

因为我们现在要允许串行接收控制位 ,所以要使REN=1

二进制:0101 0000 十六进制:0x50

接收完成以后,会执行中断函数

(2、配置串口中断

此处与串口有关的只有ESEA

ES=1;
EA=1;
/*** @brief  串口初始化 9600bps@11.0592MHz* @param  无* @retval 无*/
void UART_Init()
{SCON=0x50;PCON |= 0x80;		TMOD &= 0x0F;		//设置定时器模式TMOD |= 0x20;		//设置定时器模式 //此时为模式1TL1 = 0xFA;		//设定定时初值TH1 = 0xFA;		//设定定时器重装值TF0 = 0;		//清除TF0标志TR0 = 1;		//定时器0开始计时TR1 = 1;		//启动定时器1ES=1;EA=1;
}
#include <REGX52.H>
#include "Delay.h"
#include "UART.h"void main()
{UART_Init();UART_SendByte(0x11);while(1){}
}void UART_Routine() interrupt 4
{ if(RI==1) //判别输入与发送{P2=~SBUF;//SBUF在等号右边,说明现在是读入模式UART_SendByte(SBUF);//单片机向电脑发送接收的文件RI=0;}
}

因为发送(Transmit)接收(Receive)都会触发中断,所以if(RI==1)是为了把两者区分开

小贴士:

(1)中断函数最好和主函数放在一起,因为它和主函数的耦合性比较大;

(2)1个其它函数最好不要在中断函数与函数中同时调用。

二、数据显示模式

  • HEX模式/十六进制模式/二进制模式:以原始数据的形式显示;
  • 文本模式/字符模式:以原始数据编码后的形式显示。

在这里插入图片描述

文本模式:

ASCII码:转换成ASCII对应的 字符,输出

HEX模式:

其次:

这篇关于【单片机】【学习日志】51单片机学习日志[Day4、2022.1.12]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/186051

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个