51单片机的内核架构组成 介绍

对于51单片机相信很多电子信息或者相关专业的朋友应该都不会感觉陌生,很多专业在大学课程中开设的单片机课程就是使用的51单片机进行授课和学习的。51单片机的内容相较于其他高性能复杂的单片机来说,架构相对简单一些,寄存器也少很多,作为新手入门学习是很有好处的,不用一上来就啃很复杂的东西,有助于培养学习的兴趣和达到快速入门的作用。

以前学校学习常见的单片机:

也许很多朋友都有接触过不少的单片机,甚至从事相关开发工作的朋友使用单片机的频率还是相当的高的。但是如果要问你一个问题:什么是单片机?你能回答的出来吗?这点我估计很多就算是从事了很多年单片机开发工作的朋友也未必能说出一个完整的结论。

在我看来,对于什么是单片机的一种说法:单片机就是在一块集成电路芯片上集合了微处理器单元、存储器、I/O电路接口以及其他的多种外设功能电路模块的微型计算机。它可以进行逻辑运算处理,也可以接收外部信号和发送信号给外部设备,是一种集合运算逻辑功能和输入输出控制的集成电路芯片。

那单片机内部的架构又由什么组成呢?都包括些什么呢?

对于这个问题我打算还是以51单片机进行分析,方便了解。其他复杂的单片机内容就更加多了,对于新手和初学者也不友好,我们主要是先理解基本框架和一些通用性的东西,以后遇到其他的复杂单片机也能快速的理解。

下面是某芯片厂商设计的51单片机的架构框图:

从上图中可以看到,这个51单片机的架构中包含了几大组成部分:

1)程序计数器 —— Program counter
2)堆栈寄存器 —— stack Register
3)指令寄存器 —— Instruction Register
4)指令译码器 —— Instruction decoder
5)算术逻辑单元 —— ALU
6)工作寄存器 —— Work Register
7)状态寄存器 —— Status Register
8)程序存储器 —— Flash Program Memory
9)数据存储器 —— SRAM Data memory

上面提及的几大组成部分的作用如下:

1、程序计数器 —— Program counter

程序计数器在cpu中是非常重要的,它记录着cpu要执行的指令的指针。简单的说就是程序计数器中存放的是下一条将要被执行的指令的地址。

当cpu复位的时候,程序计数器会回到指令最开始的位置(比如地址0的位置),然后会从程序存储器中取指令,将指令存取到指令寄存器中,然后程序存储器会自动加1指向下一条指令,不断地循环往复,从而让cpu井然有序的执行着指令。

注意:一般一条指令的执行都会分为几个阶段:取指、译码、执行。有些指令还会包括数据的读取、缓存等操作。

2、堆栈寄存器 —— stack Register

堆栈寄存器是用于记录程序返回的指令指针的。当程序中调用一个函数的时候,程序计数器会把指令指针推送到堆栈寄存器中(俗称入栈push),然后cpu会根据指令指针所指的指令进行执行。在函数被执行完之后,堆栈寄存器又会将指令指针再送回到程序计数器以继续原来的程序处理流程。

简单的来说,堆栈寄存器中记录着程序被调用的入口地址,在程序调用结束之后将指令指针再交还程序计数器,从而能够让cpu能够继续往下执行下一个指令。

3、指令寄存器 —— Instruction Register

指令寄存器中存放的是当前正在被执行的指令的指针。

当cpu要执行一条指令的时候,会先由程序计数器取出一条指令,再将这条指令的指针放到指令寄存器中,cpu便得到了需要去执行的指令的地址,从而开始指令的执行。

注意:除了指令寄存器之外还有一个指令寄存器IP,这个IP寄存器和指令寄存器可是不同的哦,指令寄存器存放的是被执行指令的地址,而指令寄存器IP存放的是下一个将要去获取的指令的内存地址。两者的关系是:cpu会从指令寄存器IP中获取需要执行的指令放置到指令寄存器中,然后指令寄存器IP自动会加1指向下一条指令。

4、指令译码器 —— Instruction decoder

cpu想要执行一条指令就必须知道这条指令想要干什么,要执行什么样的操作,要完成指令的解析就需要指令译码器。

一条指令是由操作码地址码组成的,操作码表示指令的操作性质,决定指令执行什么样的操作;地址码是执行操作码时的操作对象的地址。

5、算术逻辑单元 —— ALU

算术逻辑单元是cpu中的核心部分,它是中央处理的执行单元,是专门执行算术和逻辑运行的数字电路,cpu能进行各种各样的逻辑和运算操作依靠的就是ALU算术逻辑单元。

在cpu中大部分的指令都是由ALU执行的,ALU从寄存器中获取到数据,将经过处理的数据存入到ALU的输出寄存器中,再由其他的部件完成在寄存器与内存中数据交互,多个控制单元协作配合让ALU知道该执行什么的操作,最终达到期望的控制目的。

绝大多数的ALU都可以实现整数算术运算、位逻辑运算、移位操作等,在一些高级的cpu中还会包含很多的浮点运算单元,可以实现浮点数的快速处理运算,如FPU单元、DSP等。

6、工作寄存器 —— Work Register

工作寄存器用来缓存数据寄存器的数据和立即数。在cpu中一般都会设置工作寄存器组,运算中产生的结果直接放在寄存器中,而不是放回到内存中,可以极大地提高cpu的执行速度。

因为我们知道,在程序中定义的变量是放在内存中的,也可以把变量定义成寄存器类型的变量,寄存器的访问速度是比内存要快的。

如下,定义一个普通的变量和寄存器变量:

char var_1;
register char var_2;

7、状态寄存器 —— Status Register

状态寄存器在单片机中可以说是非常常见的了,它是cpu中非常重要不可或缺的一部分。

状态寄存器一般用于存放各种状态信息,一般包括:

1)暂存当前指令执行结果的状态信息,比如进位信息、位溢出、运算结果标志、奇偶标志等;
2)存放控制信息,常见的比如中断标志位、数据发送完成标志位、数据接收完成标志位等;

8、程序存储器 —— Flash Program Memory

程序存储器在单片机中主要用于指令的存储。

我们编写好的代码通过编译器的编译之后,会通过烧录工具烧录到单片机中被执行。而保存这些我们编写好的程序代码就是通过程序存储器,一般而言烧录到程序存储器的代码都是只读的。

为什么我们的代码在烧录到单片机之后,即使断电再重启依然可以执行断电之前的代码逻辑,就是因为代码被保存在了程序存储器中,在下次重新上电启动的时候,cpu还是可以从程序存储器中将指令读回RAM中由指令译码器分析译码并执行。

目前常见的单片机的程序存储器主要有:

1)内部Flash:一般的单片机都会内置flash存储器,代码直接烧录到flash中;
2)外部存储器:有些单片机内有内置的flash,而是采用外部的存储器,比如EPROM、NAND_FLASH、emmc、SD卡等等的

9、数据存储器 —— SRAM Data memory

单片机内部中的数据存储器一般指的是随机存储器,成为RAM,主要用于存储程序运行过程中的全局变量以及中间变量。它可以随时读写,访问速度也快,一般作为操作系统或者程序运行过程中的数据临时存储的媒介,而且可以和cpu直接交换数据。

但是RAM是掉电就会丢失的,不能作为数据长久保存的媒介,想要数据能被长久保存就必要写入到掉电能保存的存储器中。

联想一下我们使用的电脑便知,RAM指的是电脑的内存条中的存储空间,ROM指的是机械硬盘、固态硬盘、U盘之类的存储设备。

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

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

相关文章

vite脚手架,配置动态生成路由,添加不同的layout以及meta配置

实现效果,配置了layout和对应的路由的meta 我想每个模块添加对应的layout,下边演示一层layout及对应的路由 约束规则: 每个模块下,添加对应的 layout.vue 文件 每个文件夹下的 index.vue 是要渲染的页面路由 每个渲染的页面路由对…

Kafka-快速实战

Kafka介绍 ChatGPT对于Apache Kafka的介绍: Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发并于2011年开源。它主要用于解决大规模数据的实时流式处理和数据管道问题。 Kafka是一个分布式的发布-订阅消息系统,可以快速地处理高吞吐…

案例课4——智齿客服

1.公司介绍 智齿科技,一体化客户联络中心解决方案提供商。提供基于「客户联络中心」场景的一体化解决方案,包括公域私域、营销服务、软件BPO的三维一体化。 智齿科技不断整合前沿的人工智能及大数据技术,已构建形成呼叫中心、机器人「在线语音…

46. 全排列

全排列 描述 : 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 题目 : LeetCode 46.全排列 : 46. 全排列 分析 : 这里给个非常好的视频 : LeetCode力扣 46. 全排列Permutations_哔哩哔哩_bilibili 解析: class S…

双水平呼吸机算法怎么写?(其实是记录自己写呼吸的心得)

双水平正压呼吸机是什么? 市面上的双水平呼吸机,就是包含有双水平模式的呼吸机,其中一般也会包含单水平模式。其中正压的意思,就是抬高呼吸的压力基线,使吸气顺畅一些。 呼吸机硬件参考 不能给太详细,就给…

机械中常用的一些术语

目录 一、OEMSOP:SOP编写指南 WI(标准作业指导书):标准作业程序 (SOP):SOP和WI的区别:一、PFC、FMEA、PCP、WIPPAP、PSW: 一、OEM 1.OEM: 原始设备制造商OEM(Original Equipment Manufacturer)…

从零开始的C++(二十一)

C11 1.列表初始化: //允许以下代码正确运行int a[]{1,2,3};//效果与int a[]{1,2,3}一致 即允许省略等于号。同时,允许用花括号对所有自定义类型和内置类型进行初始化,而非以前花括号只能对数组进行初始化。利用花括号对自定义类型初始化时…

数据结构和算法-单链表

数据结构和算法-单链表 1. 链表介绍 链表是有序的列表,但是它在内存中是存储如下 图1 单链表示意图 小结: 链表是以节点的方式存储每个节点包含data域,next域,指向下一个节点。如图:发现链表的各个节点不一定是连续存储。比如地…

C语言函数详解

# 函数的概念 对于函数,我想大家应该并不陌生,在数学中就存在函数的概念,比如:一次函数 ykxb ,k和b都是常数,给⼀个任意的x,就能得到⼀个y值。 在C语言中也有函数的概念,函数也被称为…

unity 模型生成PNG图片并导出(可以任意控制方向和大小,本文提供三种方案)

提示:文章有错误的地方,还望诸位大神不吝指教! 文章目录 前言一、插件RuntimePreviewGenerator(方案一)二、unity 官方提供的接口(方案二)三、方法三,可以处理单个模型,也…

STM32基于USB串口通信应用开发

✅作者简介:热爱科研的嵌入式开发者,修心和技术同步精进, 代码获取、问题探讨及文章转载可私信。 ☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。 🍎获取更多嵌入式资料可点击链接进群领取,谢谢支持!…

git自动更新功能

确认权限 因为一般Linux系统网页用的www 或 www-data用户和用户组,所以要实现自动来去,首先要在www用户权限下生成ssh密钥,不然没有权限,其次就是,要把用root用户拉去的代码,批量改成www用户 1. 给www权限 vi /etc/sudoers www ALL=(ALL) NOPASSWD:/bin/chow…

整体式雨水收集pp模块可根据需求承重可达30到60吨每平方米

整体式雨水收集pp模块的承重能力主要取决于其设计和制造工艺,以及所使用的材料。一般来说,模块的尺寸越大,承重能力也越大。同时,模块的设计和制造工艺也会影响其承重能力。 在设计和制造整体式雨水收集pp模块时,需要…

unity 2d 入门 飞翔小鸟 小鸟碰撞 及死亡(九)

1、给地面,柱体这种添加2d盒装碰撞器,小鸟移动碰到就不会动了 2、修改小鸟的脚本(脚本命名不规范,不要在意) using System.Collections; using System.Collections.Generic; using UnityEngine;public class Fly : Mo…

CompletableFuture异步多任务最佳实践

简介 CompletableFuture相比于Java8的并行流,对于处理并发的IO密集型任务有着得天独厚的优势: 在流式编程下,支持构建任务流时即可执行任务。CompletableFuture任务支持提交到自定义线程池,调优方便。 本文所有案例都会基于这样…

向日葵远程控制鼠标异常的问题

​ 在通过向日葵进行远程控制的时候,可能会遇到鼠标位置异常的问题。此时,不管怎么移动鼠标,都会停留在屏幕最上方,而无法点击到正确的位置。如图: 此时,如果启用了“被控端鼠标”功能,可以正…

ChatGLM3-6B和langchain阿里云部署

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、ChatGLM3-6B部署搭建环境部署GLM3 二、Chatglm2-6blangchain部署三、Tips四、总结 前言 提示:这里可以添加本文要记录的大概内容: …

回顾2023 亚马逊云科技 re_Invent,创新AI,一路同行

作为全球云计算龙头企业的亚马逊云科技于2023年11月27日至12月1日在美国拉斯维加斯举办了2023 亚马逊云科技 re:Invent,从2012年开始举办的亚马逊云科技 re:Invent 全球大会,到现如今2023 亚马逊云科技 re:Invent,回顾历届re:Invent大会,亚马…

imutils库介绍及安装学习

目录 本机环境 安装 函数及属性 列举imutils库信息 属性和函数介绍及使用 属性 常用函数 方法使用 图像平移 图像缩放 图像旋转 骨架提取 通道转换 OPenCV版本的检测 综合测试 介绍 imutils 是一个用于图像处理和计算机视觉任务的 Python 工具包。它提供了一系…

Python爬虫-实现批量抓取王者荣耀皮肤图片并保存到本地

前言 本文是该专栏的第12篇,后面会持续分享python爬虫案例干货,记得关注。 本文以王者荣耀的英雄皮肤为例,用python实现批量抓取“全部英雄”的皮肤图片,并将图片“批量保存”到本地。具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。注意,这里抓取的图片…