单片机期末复习
前言
作者:小蜗牛向前冲
名言:我可以接受失败,但我不能接受放弃
如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正
目录
一、单片机相关知识点
1、 MCS-5l单片机的堆栈在那个区域、片内ROM区、片外ROM区、片内RAM区、片外RAM区
2、晶振频率和机器周期的计算
3、单片机总线
4、单片机引脚功能
二、单片机综合运用
1、流水灯
2、中断系统、定时器
3、AD\DA和串行口
这里为大家复习了部分期末单片机的知识,单片机的结构和综合运用,不喜勿喷
一、单片机相关知识点
1、 MCS-5l单片机的堆栈在那个区域、片内ROM区、片外ROM区、片内RAM区、片外RAM区
解析:
堆栈区建在07H以上的内部RAM区
2、晶振频率和机器周期的计算
晶振频率:晶振频率是指晶体振荡器(Crystal Oscillator)产生的振荡频率,在电子电路中广泛用于提供精确的时钟信号。
机器周期:是指执行一条基本的机器指令所需要的时间
公式:
T(机器周期) = 12*1/晶振频率
如常见的外接12M晶振:T(时钟周期)=1/12M。
注:时钟周期以时间动作重复的最小周期来度量
3、单片机总线
单片机的总线分为控制总线、地址总线和数据总线等三种。而数据总线用于传送数据,控制总线用于传送控制信号, 地址总线则用于选择存储单元或外设。
三总线的功能:
数据总线(Data Bus):
- 数据总线是用于在CPU、内存、输入/输出(I/O)设备之间传输数据的通道。
- 它决定了CPU与其他硬件组件之间的数据传输宽度,即一次能够传输多少位的数据。
地址总线(Address Bus):
- 址总线用于传递CPU生成的内存地址,指示要读取或写入的存储器位置。
- 地址总线的宽度决定了CPU能够寻址的内存空间的大小。例如,一个8位的地址总线可以寻址 (2^8 = 256) 个内存位置。
控制总线(Control Bus):
- 控制总线用于传递控制信号,这些信号控制着各个硬件组件的操作。
- 控制信号包括时钟信号、读/写控制信号、中断请求、总线请求/总线响应等。时钟信号用于同步整个系统的操作。
4、单片机引脚功能
VCC 和 GND:
- VCC 是电源引脚,连接到正电源。
- GND 是地引脚,连接到地。
XTAL1 和 XTAL2:
- 连接晶振的引脚,用于提供单片机的时钟
RST:
- 复位引脚,用于复位单片机。
ALE(Address Latch Enable):
- 地址锁存使能引脚,用于在地址总线(16位)和数据总线(8位)之间切换。
PSEN(Program Store Enable):
- 程序存储器使能引脚,用于选择外部程序存储器。
EA(External Access):
- 外部访问引脚,用于控制是否从外部程序存储器执行代码。
Port 0(P0):
- 8位的双向I/O端口。
Port 1(P1):
- 8位的双向I/O端口。
Port 3(P3):
- 8位的双向I/O端口。
RXD 和 TXD:
- 串行通信端口引脚,用于串行通信。
二、单片机综合运用
这里的复习主要是考试大题,这里我们主要关心C51单机连接了哪些电路,和程序控制
1、流水灯
用Proteus绘制电路原理图;
电路:
时钟电路
复位电路
p1口和流水灯连接
用Keil编写程序,输出hex文件;
#include<reg51.h>#define uchar unsigned charvoid main()
{uchar arr[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7E};//01111111,10111111,11011111,···11111110实现0的右移int i,j;while(1){for(i=0;i<8;i++){P1=arr[i]; for (j=0;j<10000;j++);//延时}}
}
在这个程序中,数组arr
的每个元素都是一个8位的二进制数。每个位代表P1端口上的一个引脚的状态,从而决定连接到P1端口的LED的亮灭状态。在这里,数组的每个元素都是一个特定的二进制模式,它们之间的不同位的值导致LED灯在流水灯效果中不同的位置亮起。
具体来说,数组arr
中的每个元素可以表示为一个二进制数,其中每个位对应P1端口上的一个引脚。对于arr
数组的定义:
uchar arr[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7E};
这里使用的二进制数都是从最高位到最低位依次递减的,每个元素都是前一个元素右移一位,并在最低位添0。以第一个元素 0xFE
为例,它的二进制表示是 11111110
,表示P1端口上有8个引脚,其中7个引脚是高电平(1),而最低位的引脚是低电平(0)。
下面是每个元素的二进制表示和相应的亮灭状态:
0xFE
->11111110
-> LED在最高位亮。0xFD
->11111101
-> LED在次高位亮。0xFB
->11111011
-> 以此类推,流水灯效果循环。如果给P1端口不同的值,实际上就是通过改变P1端口的输出状态,从而控制连接到P1端口的LED的亮灭状态。每个元素的二进制表示中的每一位都对应一个LED的状态,通过在数组中循环切换不同的元素,可以实现LED在P1端口上的流水灯效果。
2、中断系统、定时器
在了解中断系统时,我们要先了解一下定时器。
定时器
时器是一种特殊的硬件模块,用于在固定的时间间隔内生成定时中断或执行一些计数操作。
计时功能: 定时器可以用于测量时间间隔,从而实现一定的时间延迟或精确的时间测量。
产生定时中断: 定时器可以配置为在计数到特定值时生成中断。这使得程序可以在固定的时间间隔内执行特定的任务,例如定时采样传感器数据、定时更新显示等。
PWM生成: 定时器可以用于生成脉冲宽度调制(PWM)信号,用于控制电机速度、调光LED等。
PWM生成: 定时器可以用于生成脉冲宽度调制(PWM)信号,用于控制电机速度、调光LED等。
下面是一个简单的C51程序示例,演示如何配置和使用定时器:
#include <reg51.h>void initTimer() {// 配置定时器模式为模式1(16位计数器)TMOD = 0x01;// 设置定时器初值,假设要产生1ms的定时TH0 = 0xFC;TL0 = 0x18;// 启用定时器中断ET0 = 1;// 启动定时器TR0 = 1;
}void timerInterrupt() interrupt 1 {// 定时器中断服务程序// 在这里添加定时器中断处理的代码
}void main() {// 初始化定时器initTimer();// 主程序while (1) {// 在这里添加主程序的代码}
}
为了更好的理解上面的程序,我们还需要了解下面的知识:
TMOD是定时器模式寄存器 ,用于配置8051单片机的定时器/计数器工作模式。TMOD寄存器的每个位对应一个定时器/计数器,因为8051单片机可以包含两个独立的定时器/计数器:定时器0(T0)和定时器1(T1)。
TMOD寄存器的位布局如下:
----------------------------------------------------------------
| GATE | C/T | M1 | M0 | GATE | C/T | M1 | M0 |
----------------------------------------------------------------7 6 5 4 3 2 1 0
GATE
: 定时器/计数器的门控位。当GATE位为1时,定时器/计数器在TR寄存器位(定时器运行控制位)为1且外部引脚INTx为高电平时计数。当GATE位为0时,TR位的状态不影响计数。
C/T
: 定时器/计数器模式位。当C/T位为1时,为定时器模式;当C/T位为0时,为计数器模式。
M1
和M0
: 定时器/计数器模式位。这两位一起确定了工作模式,共有四种工作模式(00、01、10、11)。
下面是一些常见的定时器模式配置:
M1=0, M0=0: 13位定时器模式。
M1=0, M0=1: 16位定时器/计数器模式。
M1=1, M0=0: 8位自动重载定时器/计数器模式。
M1=1, M0=1: 2个8位定时器/计数器模式。
上面的程序表示我们现在了模式1
TH0(Timer 0 High Byte)和TL0(Timer 0 Low Byte)是定时器/计数器0的高字节和低字节寄存器。这两个寄存器一起形成了16位的计数器,用于计时或计数操作。
上面我们是产生1ms的定时,这里是怎么产生的呢?
首先,我们需要计算定时器0的初值。定时器0的初值可以通过以下公式来计算:
初值 = 65536 - (定时时间 / 机器周期)
其中,定时时间是你所期望的定时时间,单位为毫秒;机器周期是单片机的时钟周期,可以通过晶振频率来计算,公式为:
机器周期 = 1 / (晶振频率 / 12)
假设你期望的定时时间为1毫秒,晶振频率为12MHz,则计算过程如下:
机器周期 = 1 / (12MHz / 12) = 1μs
初值 = 65536 - (1ms / 1μs) = 65536 - 1000 = 64536
因此,你可以将定时器0的初值设置为64536,即可实现1毫秒的定时。转换为16进制0xFC68,所以,TH0=oxFC和TL0=0x18
中断
当单片机正在执行某程序时,如果突然出现意外情况,它就需要停止当前正在执行的程序,转而去执行处理意外情况的程序(又称中断子程序),执行处理完后又接着执行原来的程序。
中断流程:中断请求、中断响应、中断处理、中断返回
MCS-51共有五个中断源
外部中断 0(INT0):
- 中断源描述: INT0是外部中断0,连接到P3.2引脚。
- 中断触发条件: 当P3.2引脚上的电平由高变为低(下降沿触发)时,INT0中断被触发。
外部中断 1(INT1):
- 中断源描述: INT1是外部中断1,连接到P3.3引脚。
- 中断触发条件: 当P3.3引脚上的电平由高变为低(下降沿触发)时,INT1中断被触发。
定时器/计数器 0 溢出中断(TF0):
- 中断源描述: TF0是定时器/计数器0(T0)的溢出中断。
- 中断触发条件: 当T0溢出时,TF0中断被触发。
定时器/计数器 1 溢出中断(TF1)
- 中断源描述: TF1是定时器/计数器1(T1)的溢出中断。
- 中断触发条件: 当T1溢出时,TF1中断被触发。
串行口中断(RI/TI):
- 中断源描述: RI(接收中断)和 TI(发送中断)是与串行通信相关的中断。
- 中断触发条件: 当串行口接收到数据时(RI),或当串行口发送完数据时(TI),相应的中断被触发。
上面我们用的是定时器/计数器 0 溢出中断(TF0)。
3、AD\DA和串行口
这里的知识点其实是非常重要的,但是这里不做为复习重点,我们了解一下即可。
AD\DA
AD和DA分别代表模数转换(Analog-to-Digital,AD)和数模转换(Digital-to-Analog,DA),是在电子系统中用于将模拟信号和数字信号相互转换的过程。
8051串行口的设置和相关的寄存器:
SCON(串行控制寄存器): 用于设置串行口的工作模式和控制串行通信的各个方面
SCON = 0x50; // 设置串行口为模式 1,启用接收
MOD(定时/计数器模式寄存器): 用于设置定时器模式,因为在串行通信中,通常使用定时器来生成波特率。
TMOD = 0x20; // 设置定时器 1 为模式 2(8 位自动重装定时器)
TH1 和 TL1(定时/计数器1的高字节和低字节寄存器): 用于设置定时器1的初值,以实现正确的波特率。
TH1 = 0xFD; // 根据波特率设置 TH1 的值 TL1 = 0xFD; // 根据波特率设置 TL1 的值
TI 和 RI 位(SCON寄存器中的位): 用于标志发送中断和接收中断。
TI = 0; // 发送中断标志位,初始设为0 RI = 0; // 接收中断标志位,初始设为0
相关文章:
单片机期末复习
前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、单片机…...
springboot虹软人脸识别集成
准备工作 虹软开放平台中创建一个新的应用 虹软开发平台【点我跳转】 开始上代码 基本配置 将下载的jar包放到src同级目录下 <!-- 虹软--><dependency><groupId>com.arcsoft.face</groupId><artifactId>arcsoft-sdk-face</artifactI…...
Element+vue3.0 tabel合并单元格span-method
Elementvue3.0 tabel合并单元格 span-method :span-method"objectSpanMethod"详解: 在 objectSpanMethod 方法中,rowspan 和 colspan 的值通常用来定义单元格的行跨度和列跨度。 一般来说,rowspan 和 colspan 的值应该是大于等于…...
Python学习笔记第七十九天(OpenCV轨迹栏)
Python学习笔记第七十九天 OpenCV轨迹栏cv.createTrackbarcv.getTrackbarPos两者合并运用 后记 OpenCV轨迹栏 cv.getTrackbarPos 和 cv.createTrackbar 是 OpenCV 库中用于创建和获取跟踪条位置的函数。这些函数通常用于在视频处理或图像处理应用程序中创建用户界面࿰…...
uniapp自定义顶部导航并解决打包成apk后getMenuButtonBoundingClientRect方法失效问题
需求:要在app上的顶部导航提示哪里添加一些东西进去,用uniapp自带的肯定不行啊,所以自定义了所有的页面的顶部导航,之后自定义后用手机调试发现 uni.getMenuButtonBoundingClientRect()这个方法的top获取不到....网上找了很多种方…...
C++入门【26-C++ Null 指针】
在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针。 NULL 指针是一个定义在标准库中的值为零的常量。请看下面的程序: 实例 #include <iostream> using…...
Linux第14步_安装FTP服务器
安装“vim编辑器”后,我们紧接着“安装FTP服务器”。 1、在安装前,要检查虚拟机可以上网,否则可能会导致安装失败。 2、在虚拟机界面右击鼠标,弹出下面的对话框 3、点击“打开终端(E)”,得到下面的界面 :…...
Linux截图方法推荐
因为经常会遇到以图为证的情况,而办公设备基本都是linux,所以汇总一下常见的linux截图方式。 1:在 Linux 中系统集成的截图的默认方式 你想要截取整个屏幕?屏幕中的某个区域?某个特定的窗口? 如果只需要获取一张屏幕…...
在Gitee上维护Erpnext源
在Gitee上维护Erpnext源 官方的frappe和erpnext地址: GitHub - frappe/frappe: Low code web framework for real world applications, in Python and Javascript GitHub - frappe/erpnext: Free and Open Source Enterprise Resource Planning (ERP) 1, 仓库地址输入frappe的官…...
2024.1.9 基于 Jedis 通过 Java 客户端连接 Redis 服务器
目录 引言 RESP 协议 Redis 通信过程 实现步骤 步骤一 步骤二 步骤三 步骤四 引言 在 Redis 命令行客户端中手敲命令并不是我们日常开发中的主要形式而更多的时候是使用 Redis 的 API 来实现定制化的 Redis 客户端程序,进而操作 Redis 服务器即使用程序来操…...
软件测试|SQL ORDER BY排序利器使用
简介 在SQL查询语言中,ORDER BY子句是一项重要的功能,它允许我们按照指定的列或表达式对查询结果进行排序。本文将详细介绍SQL ORDER BY子句的用法、常见排序方式以及在实际应用中的应用场景。 ORDER BY子句 SQL是一种用于管理和操作关系型数据库的强…...
苹果手机IOS软件应用IPA砸壳包提取完整教程
我们有很多小伙伴可能想要获取到苹果手机软件的安装包但又不知该如何获取,本文就教你如何获取到IOS软件的IPA砸壳包 首先我们需要准备一台越狱的苹果IOS设备,如果不知如何越狱的可以参考这篇苹果手机越狱教程:https://www.hereitis.cn/artic…...
「 网络安全术语解读 」内容安全策略CSP详解
引言:什么是CSP,它为什么可以防御一些常见的网络攻击,比如XSS攻击,具体原理是什么?以及如何绕过CSP? 1. CSP定义 CSP(Content Security Policy,内容安全策略)是一种网络…...
Docker与微服务实战(基础篇)
Docker与微服务实战(基础篇) 1、Docker简介2、Docker安装步骤1.Centos7及以上的版本2.卸载旧版本3.yum安装gcc相关4.安装需要的软件包5.设置stable镜像仓库【国内aliyun】6.更新yum软件包索引--以后安装更快捷7.安装Docker-Ce8.启动Docker9.测试10.卸载1…...
「实用分享」如何用Telerik UI组件创建可扩展的企业级WPF应用?
Telerik UI for WPF拥有超过100个控件来创建美观、高性能的桌面应用程序,同时还能快速构建企业级办公WPF应用程序。UI for WPF支持MVVM、触摸等,创建的应用程序可靠且结构良好,非常容易维护,其直观的API将无缝地集成Visual Studio…...
【Docker基础三】Docker安装Redis
下载镜像 根据自己需要下载指定版本镜像,所有版本看这:Index of /releases/ (redis.io) 或 https://hub.docker.com/_/redis # 下载指定版本redis镜像 docker pull redis:7.2.0 # 查看镜像是否下载成功 docker images 创建挂载目录 # 宿主机上创建挂…...
【Flink精讲】Flink数据延迟处理
面试题:Flink数据延迟怎么处理? 将迟到数据直接丢弃【默认方案】将迟到数据收集起来另外处理(旁路输出)重新激活已经关闭的窗口并重新计算以修正结果(Lateness) Flink数据延迟处理方案 用一个案例说明三…...
vue项目心得(复盘)
在编写项目过程中,首先是接手一个需要优化的项目,需要查看vue.config.js环境配置地址,确认好测试地址后进行开发,目前在开发过程中,遇到的最多的问题就是关于组件间的, 组件间传值 1、父组件异步传值&…...
Linux——firewalld防火墙(一)
一、Linux防火墙基础 Linux 的防火墙体系主要工作在网络层.针对TCP/P数据包实时过滤和限制.属于典型的包过滤防火墙(或称为网络层防火墙)。Linux系统的防火墙体系基于内核编码实现.具有非常稳定的性能和高效率,也因此获得广泛的应用.在CentOS 7系统中几种…...
JMeter之Windows安装
JMeter之Windows安装 一、安装JDK二、安装JMeter1、下载JMeter2、配置环境变量3、验证JMeter 三、扩展知识1、汉化 一、安装JDK 略 二、安装JMeter 1、下载JMeter 官网地址:https://jmeter.apache.org/download_jmeter.cgi 放到本地目录下 2、配置环境变量 变量…...
用通俗易懂的方式讲解:大模型 RAG 在 LangChain 中的应用实战
Retrieval-Augmented Generation(RAG)是一种强大的技术,能够提高大型语言模型(LLM)的性能,使其能够从外部知识源中检索信息以生成更准确、具有上下文的回答。 本文将详细介绍 RAG 在 LangChain 中的应用&a…...
正则表达式的语法
如果要想灵活的运用正则表达式,必须了解其中各种元素字符的功能,元字符从功能上大致分为: 限定符 选择匹配符 分组组合和反向引用符 特殊字符 字符匹配符 定位符 我们先说一下元字符的转义号 元字符(Metacharacter)-转义号 \\ \\ 符号…...
MyBatis分页插件的实现原理
MyBatis 分页插件的实现原理是通过拦截器(Interceptor)来实现的。拦截器可以在 SQL 执行前后对 SQL 进行拦截和处理。 简单来说,就是通过在查询语句中添加额外的参数和逻辑,以支持分页功能。它的核心思想是将分页参数传递给插件&…...
Winform、WPF如何解决前端卡死问题
在WinForms和WPF中,前端卡死问题通常是由于长时间的计算或阻塞操作导致的。以下是一些解决前端卡死问题的常见方法: 使用异步操作:将长时间的计算或阻塞操作放在后台线程中执行,以避免阻塞UI线程。可以使用Task、async/await等异步…...
python内app自动化测试的局限性,该如何破局?
Python在App自动化测试方面非常流行,尤其对于移动应用(Android和iOS)的测试,可以借助于像Appium、Robot Framework等工具进行跨平台自动化。然而,即使使用Python这样的强大语言,App自动化测试也存在一些局限…...
k8s的node亲和性和pod亲和性和反亲和性 污点 cordon drain
node亲和性和pod亲和性和反亲和性 污点 cordon drain 集群调度: schedule的调度算法 预算策略 过滤出合适的节点 优先策略 选择部署的节点 nodeName:硬匹配,不走调度策略,node01 nodeSelector:根据节点的标签选择,会走调度的算法 只…...
IntelliJ IDEA如何使用固定地址公网远程访问本地Mysql数据库
文章目录 1. 本地连接测试2. Windows安装Cpolar3. 配置Mysql公网地址4. IDEA远程连接Mysql小结 5. 固定连接公网地址6. 固定地址连接测试 IDEA作为Java开发最主力的工具,在开发过程中需要经常用到数据库,如Mysql数据库,但是在IDEA中只能连接本…...
GIT - 清除历史 Commit 瘦身仓库
目录 一.引言 二.仓库清理 ◆ 创建一个船新分支 ◆ 提交最新代码 ◆ 双指针替换分支 三.总结 一.引言 由于项目运行时间较长,分支较多,且分支内包含很多不同的大文件,随着时间的推移,历史 Git 库的容量日渐增发,…...
物联网产品中,终端、网关、协议、PaaS、SaaS之间的关系
在互联网产品中,经常提到的终端、网关、协议、PaaS、SaaS之间,到底有什么关系呢? 一、基本概念 在百度/其他地方搜集的信息中,对于终端、网关、协议、PaaS、SaaS的解释各有不同,整理如下: 终端࿱…...
6款实用的Git可视化管理工具
前言 俗话说得好“工欲善其事,必先利其器”,合理的选择和使用可视化的管理工具可以降低技术入门和使用门槛。我们在团队开发中统一某个开发工具能够降低沟通成本,提高协作效率。今天给大家分享6款实用的Git可视化管理工具。 Git是什么&…...
小说网站有源码了该怎么做/做外贸有哪些网站平台
无论你身在何处,无论你学习什么编程语言,你最后都与数据库打交道。本来世界就相当于一个超级数据库。 在学习java语言的时候,也会涉足由于这个领域的,我在学习java的过程中用的是开源版的mysql. 作为一名 准程序员, 我…...
公司可以做多个网站吗/武汉网络推广seo
1 Numpy数组 在Python中有类似数组功能的数据结构,比如list,但在数据量大时,list的运行速度便不尽如意,Numpy(Numerical Python)提供了真正的数组功能,以及对数据进行快速处理的函数,…...
记事本做网站格式/seo网站排名优化案例
set nocompatible " 关闭 vi 兼容模式 syntax on " 自动语法高亮colorscheme molokai " 设定配色方案set number " 显示行号set cursorline " 突出显示当前行set ruler &…...
openwrt wordpress/如何提高网站排名seo
Linux提供了大量的命令,利用它可以有效地完成大量的工 作,如磁盘操作、文件存取、目录操作、进程管理、文件权限设定等。所以,在Linux系统上工作离不开使用系统提供的命令。要想真正理解Linux系统, 就必须从Linux命令学起…...
宁夏网站开发公司/seo关键词优化策略
解析oracle的rownum 对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀。举例说…...
网站生成静态页面工具/爱站小工具
lambda表达式是C11中引入的一项新技术,利用lambda表达式可以编写内嵌的匿名函数,用以替换独立函数或者函数对象,并且使代码更可读。但是从本质上来讲,lambda表达式只是一种语法糖,因为所有其能完成的工作都可以用其它稍…...