【MCS-51】51单片机结构原理
至今为止,MCS-51系列单片机有许多种型号的产品:其中又分为普通型51(8031、8051、89S51)和增强型52(8032、8052、89S52等)。它们最大的区别在于存储器配置各有差异。下面我举例子的都是8051这一系列的单片机。
目录
8051单片机的构成
CPU
🐱计算器
🎈计算单元及其寄存器
🎈PSW寄存器
🐱控制器
ROM
RAM
🐍特殊功能寄存器SFR与寄存器
🐍RAM内部存储分布
🐍RAM外部存储区
IO口
🎂特殊引脚
🎂P3.x
8051单片机的构成
下面是51单片机的板内基本构成,其共分为8大模块和连接它们的系统总线。8大模块是:CPU、ROM(内部程序存储器)、RAM(内部数据存储器)、中断系统、并行端口、串行端口、计数器和时钟电路。
😀一、首先是CPU,8051是8位CPU,CPU由运算器和控制器组成,其中运算器ALU负责逻辑和二进制运算;控制器负责翻译指令和协同单片机各模块有序工作。
😀二、ROM,ROM是程序存储器,我们单片机的程序、原始的数据就存在这里。8051单片机片内有4KB空间的ROM。8051地址总线有16条,所以地址空间为0000H-FFFFH,而ROM的地址空间为0000H-0FFFH共有2^12=4096个地址。又因为8051的数据总线有8条,所以存储空间为4096*8=32768bit=4KB。
😀三、RAM,RAM为数据存储器,其共占256个字节单元,其中高128位为21个特殊功能寄存器SFR,低128位为供给用户使用。
😀四、定时器和计数器,8051有2个16位的定时器。
😀五、并行I/O口,8051片内有4个8位的并行IO口,他们可用于输入(input)和输出(ouput)。这八个IO口为P0、P1、P2、P3。
- P0口用作8位数据总线或低8位的地址总线的数据传输;
- P1口常用作一般数据IO口;
- P2口常用作高8位地址总线数据传输;
- P3口常用作特殊功能的输入输出。
😀六、串行串口,单片机有2个1位的串行串口,其中包含输出口TXD和输入口RXD,可用作执行串口通信的模式。
😀七、中断控制,MSC-51有5个中断,包含2个外部中断源、1个串行中断源和2个定时器中断源。中断可以将正在执行的程序挂起而执行其它功能后再回来执行该程序。
😀八、扩展部分,如果片内空间不够,我们还可以扩展64KB的片外ROM和64KB的片外RAM。
CPU
🐱计算器
🎈计算单元及其寄存器
前面说过,CPU的组成部件大概是运算器和控制器。
首先是运算器,运算器是进行算术运算(加减乘除等运算)、逻辑运算(取反、抑或、与非等运算)和位操作等操作的。
其中我们的操作的结果状态都会被存到状态寄存器PSW中。
其中运算器组成由算数运算单元ALU、8位的数据累加器ACC、8位的寄存器B、8位的程序状态寄存器PSW、8位暂存器TMP1、TMP2组成:
其中ALU负责完成传过来的数字的运算,然后将运算结果的状态传输给PSW寄存器,并且将运算结果传送给ACC(简称A),所以A就是我们数据进出ALU计算单元的守门员。然后还有B寄存器,B寄存器一般用于乘法、除法高字节运算时放除数或者余数。其余时刻可做通用寄存器使用。
🎈PSW寄存器
PSW寄存器是一个8位寄存器,它会存放着我们ALU计算后的结果的状态。我们看看它里面8位分别会存储什么信息:
我们可以看到其8个位中有7个已经有存储信息的作用了(下面1默认为有):
D7是存储的是运算时是否向最高位借位/进位了;
D6存储的是计算时低4位是否有向高四位借位/进位了;
D5为用户标志位;
D4和D3为工作寄存器选择标准位,通过改变这两个位数可以挑选我们RAM中的4个工作寄存器。
D2溢出标志位,如果结果超过8位数的表达范围,则被置为1;
D1未定义;
D0奇偶校验位,如果计算结果有奇数个1则为1,反之则为0。
🐱控制器
接下来我们来看看控制器,控制器的功能是对指令进行译码,然后将指令对应的工作分发下去。其中与这些功能实现有关的部件有:
时钟发生器、指令地址寄存器IR、指令译码器ID、数据指针DPTR、程序计数器PC和堆栈指针SP等。
其中IR就是负责将指令暂存起来,交给ID翻译出对应的指令后就通过控制的电路将控制信号发送出去给各执行部件。ID负责将指令翻译成对应的操作。而程序寄存器PC负责存储即将执行的下一个指令的地址,每当我们执行完一个指令后PC会自动加一。因为PC没有地址,所以用户本身无法对PC进行访问,但可以通过某些指令修改其内容,因为地址总线有16根,所以自然而然PC就是一个16位的寄存器。
而对于SP,SP是专门寄存堆栈存储位置地址的寄存器。最后的DPTR由两部分组成,包括低8位的DPL寄存器和高8位的DPH寄存器,其功能是专门用来存储片外RAM数据的地址寄存器。
MCS-51的存储部分共分为两部分四块,片内的ROM和片外的ROM,片内的RAM和片外的RAM。其中片内的ROM大小为4KB,片外ROM大小为64KB,片内RAM大小为256B,片外RAM大小为64KB。
ROM
ROM的作用是存储用户编好的程序,内部ROM大小为4KB,因为PC位数是16,所以可以扩展到64KB的寻址空间。
对于ROM来说,它会有一个EA描述,当EA=1时,单片机内外都会用统一的地址,片内0-4KB地址范围为000H-FFFH,而新扩展的片外RAM地址为1000-FFFFH,舍弃片外0-4KB间的空间。而当EA=0时,只能执行片外的ROM程序,舍弃片内0-4KB的空间,此时地址为0000H-FFFFH

而ROM本身就存储了很多程序入口,即存在许多具有特殊功能的单元,下图为一些特殊功能单元的位置,其中包括1个复位后的PC指向位置和6个中断执行的地址位置,这些位置注意不要占用。由于复位后下一条指令会在0000H处。所以我们一般汇编代码第一句就会在此处写一个跳转指令跳转到主程序的入口。
RAM
🐍特殊功能寄存器SFR与寄存器
MCS-51有32个工作寄存器(00H-01FH),它们共分为四个组,每个组有8个通用寄存器(R0-R7)。前面PSW中的状态位RS1RS0就是用来确定由哪个组的寄存器们工作,并且每一个时刻只能由一个组的寄存器来工作。其中R0和R1除了做工作寄存器外还会做间接寻址的地址指针。
而除了平常我们用到的工作寄存器外,还有一些特殊功能寄存器分布在80H-FFH中,共占据高128个字节的存储工具,其中地址能够被8整除的SFR都能够进行位寻址。
🐍RAM内部存储分布
上图为RAM中256字节存储分布,其中共分为4大部分:工作寄存器区、位寻址区、通用RAM区和SFR区。
🦁工作寄存器区
其中工作寄存器区00H-01FH共存放32个寄存器,一旦某一组被确定是工作寄存器后,其内部就会根据地址高低按字节为单位划分出R0-R7,8个通用寄存器,就可以被寻址访问。那么另外三组原先占据的位置就可以被我们用来读写。
🦁位寻址区
位寻址区位于20H-2FH之间,它占了16个字节的存储单位,这个区的地址单元除了原来的字节操作以外还可以进行位操作。
🦁用户区
在位操作区上面、专用寄存器区下面(30H-7FH)还有一个区被称为用户区,这个区用来存放数据运算的结果的。但是我们可以选择作为用户区的空间不止这里,我们还可以选择没有用到的工作寄存器的位置作为用户区使用。
🦁堆栈区
在这些区之外,我们还可以开一个堆栈区,人为地去设计一个堆栈结构。而这个堆栈结构一般我们选取在用户区比较靠后的位置。有了堆栈区之后,我们就可以在其内部写入中断操作和子程序了。特别值得注意的一点是:一般我们会选择先将堆栈指针加加之后再往其指向的内部存储空间放入数据。设置堆栈区的一个重要的功能就是保护断点和保护现场。当我们执行中断操作时,我们需要中断结束后继续返回原程序执行,这就是保护断点;而保护现场是指当我们主程序和中断程序用到同一个寄存器,那么我们中断服务函数会提前将其放入堆栈区中。
🦁SFR
SFR又称为特殊功能寄存器,这个位置存放的寄存器也就是我们在CPU的控制部分、运算部分、IO部分等等地方用到的寄存器,那些寄存器就来自此处。其中SFR中地址能被8整除的都被被位寻址。
我们常见的SFR特殊寄存器就包括:累加器A、寄存器B、PSW寄存器、PC、SP、DPTR、SBUF、IP、IE等等。
在我们进行复位时,单片机内位寻址区即20H-2FH的标志位状态不会变,而特殊功能寄存器SFR和工作寄存器R0-R7会被清0。
🐍RAM外部存储区
对于RAM的外部存储区,我们需要注意外部RAM最大可扩容到64KB,并且对于外部的数据存储器来说。数据区和外扩IO口是统一进行编址的,所以我们要保证RAM和IO口的端口地址分配合理,以此保证译码唯一。
IO口
IO口是单片机输入或者输出的通道,8051有32个并行的IO口,分别为P0.x、P1.x、P2.x和P3.x。这些引脚除了可以作为通用引脚外还可自动切换为数据总线、地址总线和控制总线的外部引脚。
上面除了IO引脚以外,还有几个特殊的引脚。
🎂特殊引脚
特殊的引脚首先是VCC和GND,它们分别是驱动电压和接地,一般驱动电压是5V。
XTAL2、XTAL1分别连接晶体震荡器的信号输出和晶体振荡器的信号输入,需要外接一个震荡电路,这震荡信号可以帮助设置单片机时钟:
ALE/PROG是地址锁存信号端;
PSEN是外部程序存储器读取信号端;
EA/Vpp是程序存储器选择信号端和编程电源信号输入端,就是我们之前控制访问外部ROM时地址是在原来内部ROM的地址基础上扩展还是舍弃内部ROM直接全部采用外部ROM;
RST/VPD是复位端,通常接复位电路;
🎂P3.x
对于P3.x口来说它会和其它引脚不同,自然它可以作为IO口进行输入和输出,但是它支持的第二功能更加丰富:
P3.0--RXD串行数据输入口;
P3.1--TXD串行数据输出口;
P3.2--INT0外部中断0;
P3.3--INT1外部中断1;
P3.4--T0定时/计数器0外部计数脉冲输入端;
P3.5--T1定时/计数器1外部计数脉冲输入端;
P3.6--WR片外RAM写选信号输出端;
P3.7--WR片外RAM读选信号输出端;
相关文章:

【MCS-51】51单片机结构原理
至今为止,MCS-51系列单片机有许多种型号的产品:其中又分为普通型51(8031、8051、89S51)和增强型52(8032、8052、89S52等)。它们最大的区别在于存储器配置各有差异。下面我举例子的都是8051这一系列的单片机…...
软件测试技术之如何编写测试用例(3)
14、对于类似于手机版淘宝这种软件,它拥有客户端,服务器端还有一个后台管理系统类似于进销存管理系统,我如何设计测试用例才能保证功能的完全覆盖?他们之间的交互如何设计测试用例? 专家分析:对于复合型的…...

移远通信笔试题
限时60分钟 1.下列关于栈叙述正确的是 A A) 栈顶元素最先能被删除 B)栈顶元素最后才能被删除 C)栈底元素永远不能被删除 D)以上三种都不对 在栈中,最后被压入的元素总是在栈顶上方,而栈顶元素总是最先被弹出的元…...
python算法中的机器学习算法之监督学习知识点(详解)
目录 学习目标: 学习内容: Ⅰ. 线性回归(Linear Regression) Ⅱ. 逻辑回归(Logistic Regression)...
Flink主要有两种基础类型的状态:keyed state
Flink主要有两种基础类型的状态:keyed state 和operator state。 Keyed State Keyed State总是和keys相关,并且只能用于KeyedStream上的函数和操作。 你可以将Keyed State视为是已经被分片或分区的Operator State,每个key都有且仅有一个状态分…...
js录音支持h5 pc ios android
最近在做h5录音的页面要求可暂停录音,继续录音,写好后发现不兼容ios,无奈只能找兼容方法,找了一天也没找到,后来看到一个网站在ios上可以暂停录音,后来引入他的js文件果然能用了 网站放下面了 Recorder H5: 用于html5网页中的前…...

mybatis04-mybatis缓存、分页插件、注解开发(一对一、多对一、多对多)
mybatis04 mybatis 缓存 一、mybatis 缓存概述 1、缓存 缓存 是存在于内存中的临时数据,使用缓存的目的是:减少和数据库的交互次数,提高执行效率。 2、mybatis 缓存 mybatis 与 大多数的持久层框架一样,提供了缓存策略…...
软件平台接口常见问题汇总
接口常见问题汇总 一、接口技术层面 1、输入参数验证校验不全面。如: 1.1入参数据类型长度边界,范围边界。 1.2 入参数据内容、成员内容,有效无效,合法非法。 1.3 入参数据 特殊字符 敏感字符过滤。 1.4 入参可否必选。 2、接口…...

SparkStreaming学习之——无状态与有状态转化、遍历kafka的topic消息、WindowOperations
目录 一、状态转化 二、kafka topic A→SparkStreaming→kafka topic B (一)rdd.foreach与rdd.foreachPartition (二)案例实操1 1.需求: 2.代码实现: 3.运行结果 (三)案例实操2 1.需求: 2.代码实现: 3.运行结果 三、W…...
上市公司碳排放测算数据(1992-2022年)
根据《温室气体核算体系》,企业的碳排放可以分为三个范围。 范围一是直接温室气体排放,产生于企业拥有或控制的排放源,例如企业拥有或控制的锅炉、熔炉、车辆等产生的燃烧排放;拥有或控制的工艺设备进行化工生产所产生的排放。 范…...

Springboot 整合 JPA 及 Swagger2
首先是官方文档: Spring Data JPA - Reference Documentationhttps://docs.spring.io/spring-data/jpa/docs/2.2.4.RELEASE/reference/html/#repositories.query-methods 1、JPA相关概念 2、创建 Springboot 项目 修改 pom 文件,可以直接进行复制粘贴&a…...

android aidl
本文只是记录个人学习aidl的实现,如需学习请参考下面两篇教程 官方文档介绍Android 接口定义语言 (AIDL) | Android 开发者 | Android Developers 本文参考文档Android进阶——AIDL详解_android aidl_Yawn__的博客-CSDN博客 AIDL定义:Android 接口…...

MYSQL---主从同步概述与配置
一、MYSQL主从同步概述 1、什么是MySQL主从同步? 实现数据自动同步的服务结构 主服务器(master): 接受客户端访问连接 从服务器(slave):自动同步主服务器数据 2、主从同步原理 Maste:启用binlog 日志 Slave:Slave_IO: 复制master主…...
WebClient学习
1. 介绍 Java中传统的RestTemplate 的主要问题在于不支持响应式流规范,也就无法提供非阻塞式的流式操作。而WebClient是响应式、非阻塞的客户端,属于Spring5中的spring-webflux库 2. 依赖 maven依赖 <dependency><groupId>org.springfra…...

「计算机控制系统」6. 直接设计法
特殊类型系统的最小拍无差设计 一般系统的最小拍无差设计 最小拍控制器的工程化改进 Dahlin算法 文章目录 特殊类型系统的最小拍无差设计理论分析典型输入函数的最小拍无差系统 一般系统的最小拍无差设计有波纹最小拍无差设计无波纹最小拍无差设计 最小拍控制器的工程化改进针对…...

什么是JWT?
起源 需要了解一门技术,首先从为什么产生开始说起是最好的。JWT 主要用于用户登录鉴权,所以我们从最传统的 session 认证开始说起。 session认证 众所周知,http 协议本身是无状态的协议,那就意味着当有用户向系统使用账户名称和…...

STM32—0.96寸OLED液晶显示
本文主要介绍基于STM32F103的0.96寸的OLED液晶显示,详细关于0.96寸OLED液晶屏幕的介绍可参考这篇博客:https://blog.csdn.net/u011816009/article/details/130119426 一、简介 OLED被称为有机激光二极管,也被称为有机激光显示,O…...

Mysql的简介和选择
文章目录 前言一、为什么要使用数据库 数据库的概念为什么要使用数据库二、程序员为什么要学习数据库三、数据库的选择 主流数据库简介使用MySQL的优势版本选择四、Windows 平台下安装与配置MySQL 启动MySQL 服务控制台登录MySQL命令五、Linux 平台下安装与配置MySQL总结 前言…...

3D视觉之深度相机方案
随着机器视觉,自动驾驶等颠覆性的技术逐步发展,采用 3D 相机进行物体识别,行为识别,场景 建模的相关应用越来越多,可以说 3D 相机就是终端和机器人的眼睛。 3D 相机 3D 相机又称之为深度相机,顾名思义&…...

Mysql列的完整性约束详解(主键约束)
文章目录 前言一、设置表字段的主键约束(PRIMARY KEY,PK) 1.单字段主键2.多字段主键总结 前言 完整性约束条件是对字段进行限制,要求用户对该属性进行的操作符合特定的要求。如果不满足完整性约束条件,数据库系统将不再…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...