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

news2024/11/27 22:44:49

对于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盘之类的存储设备。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【FMCW毫米波雷达设计 】 — FMCW波形

原书:FMCW Radar Design 1 引言 本章研究驱动FMCW雷达的主要波形:线性调频(LFM)波形。我们研究信号的行为及其性质。随后,本章讨论了匹配滤波理论,并研究了压缩这种波形的技术,特别是所谓的拉伸处理,它赋予FMCW雷达极…

【STM32】电机驱动

一、电机分类 二、直流电机的分类 1.有刷电机 2.无刷电机 3.直流减速电机 三、H桥电路 正向旋转 驱动Q1和Q4 反向旋转 驱动Q2和Q3 四、MC3386电机驱动芯片 1.基本原理图 1)前进/后退:IN1和IN2的电平顺序决定电机的正反转 2)调节速度&#…

深入了解对象与内置构造函数

1. 深入对象 1.1 创建对象的三种方式 1.2 构造函数 语法约定: 总结 构造函数可以快速创建多个对象大写字母开头的函数使用new关键字将对象实例化构造函数不需要返回值自动返回新的对象 new实例化的执行过程 创建空对象this指向对象执行代码,追加新…

AX和A(T)X的区别是?

目录 1.快速了解的例子: (1)假设所有节点的初始特征都是[1, 0, 0] ,那么AX的结果是: (2) 的结果是: (3) 总结: 2.计算结构系数的例子 (1&#xff09…

Spring IoC和DI

目录 一. Spring是什么 IoC DI 二. IoC&DI的使用 IoC 1.Controller(控制器存储) 2.Service(服务存储) 3.Repository(仓库存储) 4.Componemt(组件存储) 5.Configuratio…

【网络安全】网络设备可能面临哪些攻击?

网络设备通常是网络基础设施的核心,并控制着整个网络的通信和安全,同样面临着各种各样的攻击威胁。 对网络设备的攻击一旦成功,并进行暴力破坏,将会导致网络服务不可用,且可以对网络流量进行控制,利用被攻陷…

找不到WMVCORE.dll怎么办?一键解决WMVCORE.dll缺失的详细方法分享

当打开软件时提示wmvcore.dll丢失,这可能是由于以下几个原因导致的: 系统文件损坏:wmvcore.dll是系统文件,可能会因为各种原因(如病毒感染、系统错误、软件卸载等)而损坏。 软件依赖问题:某些…

Nginx性能调优实战 1

Nginx性能调优实战指南 1 Nginx作为一款高性能的Web服务器和反向代理服务器,在处理大量请求和并发连接时表现出色。然而,在实际应用中,为了更好地适应不同的负载和提高系统性能,进行Nginx性能调优是至关重要的。深入探讨Nginx性能…

mysql数据库文件丢失恢复---惜分飞

客户服务器重启,mysql相关数据文件丢失 通过底层工具进行分析,无法正确恢复数据库名字,一个个单个ibd文件(而且很多本身是错误的) 对于这种情况,通过mysql block扫描恢复出来page文件 恢复出来客户需要数据 这个客户出现该故障的原因大概率是由于文件系统损坏导致.最终…

SSD基础架构与NAND IO并发问题探讨

在我们的日常生活中,我们经常会遇到一些“快如闪电”的事物:比如那场突如其来的雨、那个突然出现在你眼前的前任、还有就是今天我们要聊的——固态硬盘(SSD)。 如果你是一个技术宅,或者对速度有着近乎偏执的追求&…

程序的机器代码表示--函数调用

call和ret指令 如何访问栈帧、如何切换栈帧、如何传递参数和返回值 call、ret指令作用: call:1)将IP(即PC)旧值压栈保存(保存在函数的栈帧顶部);2)设置IP新值&#xff0…

Module build failed : Error : Vue packages version mismatch:

Vue packages version mismatch: - vue2.7.15 (E:\Workspace_ce\erp\erp-web\node_modules\vue\dist\vue.runtime.common.js) - vue-template-compiler2.6.11 (E:\Workspace_ce\erp\erp-web\node_modules\vue-template-compiler\package.json) 【问题解决了,我很不…

MyBatis 四大核心组件之 ParameterHandler 源码解析

🚀 作者主页: 有来技术 🔥 开源项目: youlai-mall 🍃 vue3-element-admin 🍃 youlai-boot 🌺 仓库主页: Gitee 💫 Github 💫 GitCode 💖 欢迎点赞…

55.手写实现grpc连接池以及gin和grpc交互

文章目录 一、简介前置说明 二、敏感词过滤服务1、定义sensitive.proto文件2、protoc生成pb.go文件3、sensitive服务端实现 三、关键词匹配服务1、编写keywords.proto文件2、生成pb.go文件3、keywords服务端实现 四、gin web 路由服务1、新建grpcpool服务作为gin web服务2、根据…

.net core提示The xx field is required,One or more validation errors occurred

访问接口时缺少model中的参数时,会提示: The xx field is required One or more validation errors occurred原因是.net core webapi默认参数为不可空,因此会验证并报错。 解决方案: 在项目的.csproj中,修改Nullable…

2023团体程序设计天梯赛——模拟赛和总决赛题

M-L1-1 嫑废话上代码 Linux 之父 Linus Torvalds 的名言是:“Talk is cheap. Show me the code.”(嫑废话,上代码)。本题就请你直接在屏幕上输出这句话。 输入格式: 本题没有输入。 输出格式: 在一行中输出…

华为新款笔记本搭载5nm麒麟芯片,来源成谜,可能让大家失望了~

近日,华为公司悄悄推出了一款基于国产技术打造的全新商用笔记本——华为擎云L540。目前,华为擎云L540在京东平台悄然上线的,尚未在华为官方渠道公开售卖。华为擎云L540搭载了麒麟9006C处理器,采用先进的5nm制程工艺,8 …

大数据HCIE成神之路之数据预处理(1)——缺失值处理

缺失值处理 1.1 删除1.1.1 实验任务1.1.1.1 实验背景1.1.1.2 实验目标1.1.1.3 实验数据解析 1.1.2 实验思路1.1.3 实验操作步骤1.1.4 结果验证 1.2 填充1.2.1 实验任务1.2.1.1 实验背景1.2.1.2 实验目标1.2.1.3 实验数据解析 1.2.2 实验思路1.2.3 实验操作步骤1.2.4 结果验证 1…

JAVA高级(后端需深入移步)

单元测试:使用Junit单元测试框架 使用Junit单元测试: 通过左侧的对❌来进行提示 Junit框架的常见注解: 反射(用于框架,也是最重要):展示框架的成员信息 由于是用于对象,即使在获取…

PHP基础 - 类型比较

在 PHP 中,作为一种弱类型语言,它提供了松散比较和严格比较两种方式来比较变量的值和类型。 松散比较: 使用两个等号(==)进行比较,只会比较变量的值,而不会考虑它们的数据类型。例如: $a = 5; // 整数 $b = 5; // 字符串if ($a == $b) {echo "相等"; // 输…