【MCS-51】51单片机结构原理

news2024/11/25 16:31:38

至今为止,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大模块是:CPUROM(内部程序存储器)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。

  1. P0口用作8位数据总线低8位的地址总线的数据传输;
  2. P1口常用作一般数据IO口
  3. P2口常用作高8位地址总线数据传输;
  4. 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

左边EA=1,右边EA=0

 而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引脚以外,还有几个特殊的引脚。

🎂特殊引脚

特殊的引脚首先是VCCGND,它们分别是驱动电压和接地,一般驱动电压是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读选信号输出端;

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

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

相关文章

如何用ChatGPT协助做内容分发?(文本变成直播/音频/视频脚本)

该场景对应的关键词库(14个): 直播博主、直播达人、音频主持人、产品特点、品牌故事、品牌活动、品牌logo、视频主角、画外音解说员、编剧身份、品牌内容分发方向、时长、脚本类型、产品 提问模板: 1、你是一名优秀的美妆达人&am…

零拷贝技术详解

文章目录 零拷贝技术前世数据的四次拷贝与四次上下文切换4 次 copy4 次上下文切换弊端 零拷贝诞生准备--DMA技术DMA 参与下的数据四次拷贝 零拷贝诞生零拷贝技术什么是零拷贝技术?零拷贝的实现方式技术总结1、DMA 技术2、使用 page cache 的 zero copy:3…

Redis命令及不同类型数据的应用场景

文章目录 本章要点基本命令心跳命令ping读写键值命令DB切换select查看key数量 dbsize删除当前库数据flushdb删除所有库数据flushall退出客户端命令 Key操作命令String型Value操作命令典型应用场景 Hash型Value操作命令应用场景 List型Value操作命令应用场景 Set型Value操作命令…

麻了,部门新来的00后给我卷崩溃了...

今天上班开早会就是新人见面仪式,听说来了个很厉害的大佬,年纪还不大,是上家公司离职过来的,薪资已经达到中高等水平,很多人都好奇不已,能拿到这个薪资应该人不简单,果然,自我介绍的…

前端工程化知识总结

1.webpack 和 gulp 区别 gulp(流)主要指前端开发的工作流程,通过配置一系列的task,定义task处理的事务(例如文件压缩合并、雪碧图、启动server、版本控制等),再定义执行顺序,让gulp执行 task,从…

【WCH】CH32F203基于内部RTC+I2C SSD1306 OLED时钟和温度显示

【WCH】CH32F203基于内部RTCI2C SSD1306 OLED时钟和温度显示 📌相关篇《【WCH】CH32F203基于内部RTC时钟I2C SSD1306 OLED显示》📺显示效果: ✨主要是在其基础 上增加温度显示,温度数据来源于DS18B20,更换了OLED驱动显…

19.Java文件操作---I/O流

Java文件操作—I/O流 流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。一个流,必有源端和目的端,它们可以是计算机内存的某…

c++ 虚基类(好理解)

当有类Base,类Base1继承了Base,Base2也继承了Base,Derived 类多继承了Base1和Base2 也就是呈现如图一种继承关系 如果Base类有一个public的 int a ,在Derived里面要访问这个a,就必须指定是哪个类的a(Base1…

2023年的深度学习入门指南(8) - CUDA编程基础

2023年的深度学习入门指南(8) - CUDA编程基础 上一篇我们走马观花地看了下SIMD和GPGPU的编程。不过线条太粗了,在开发大模型时遇到问题了肯定还会晕。 所以我们还是需要深入到CUDA中去探险一下。 获取CUDA设备信息 在使用CUDA设备之前,首先我们得获取…

Linux网络——PXE高效批量网络装机

Linux网络——PXE高效批量网络装机 一、PXE远程安装服务1.PXE批量部署的优点2.搭建PXE网络体系的安装条件 二、PXE 安装进行前的配置1.PXE装机所需的文件2.搭建 PXE 过程中使用的服务和程序①.DHCP服务②.vsftpd服务③.TFTP服务④.syslinux 三、搭建 PXE 远程安装服务器1.安装相…

使用PCL过程中报出的aligned_free问题记录

近期在使用PCL库的过程中碰到了程序崩溃的问题,花了两三天的时间一直在解决该问题。 环境配置: Windows11 PCL 1.12.1 VTK 9.1 VS2019 爆出的问题: 在Memory.h文件的下述代码处爆出问题 /** \internal Frees memory allocated with aligne…

【Python】一文了解Time模块、Datatime模块、Calendar模块。

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,YOLO领域博主爱笑的男孩。擅长深度学习,活动,YOLO,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typecollect个人…

Twitter推荐算法解读

Twitter推荐算法解读 最近 Twitter 开源了其最宝贵的财产——推荐算法! 每天,人们会在 Twitter 上发布超过 5 亿条推文,Twitter 会向用户推送超过 1500 亿条推文。Twitter 的推荐算只会向用户推荐少数与其相关且有吸引力的热门推文。跟抖音…

Android类似微信首页的页面开发教程(Kotlin)二

前提条件 安装并配置好Android Studio Android Studio Electric Eel | 2022.1.1 Patch 2 Build #AI-221.6008.13.2211.9619390, built on February 17, 2023 Runtime version: 11.0.150-b2043.56-9505619 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Windows 11 …

信息安全复习九:身份认证

一、章节梗概 1.身份认证的基本概念 2.基于口令的身份认证:Unix口令,动态口令 3.基于密码的身份认证技术 ①.质询与应答认证技术 ②.Needham-Schroeder 协议 ③.KERBEROS协议 二、身份认证的基本概念 2.1 定义 宣称者向验证方出示证据,证…

【HTML+CSS+JS】登录注册页面大合集

前言 学JS也学了一段时间,正巧碰上了人工智能要调用人脸识别接口进行真人人脸识别,于是便萌生了用人脸来进行注册和登录的想法,这样的话就需要开发一个登录注册页面,然后用JS绑定注册事件调用人脸识别接口进行登录注册 饭要一口一…

【Shell编程规范与变量】

目录 一、Shell脚本的概述二、Shell的作用2.1、用户的登录Shell2.2、Shell脚本的分类 三、Shell脚本的构成1、编写shell脚本的规范2、运行shell脚本3、方法一 、指定路径命令,要求文件必须有 x 权限4、方法二 、指定shell来解释脚本,不要求文件必须要有 …

波奇学Linux:Linux基本指令

上文回顾:波奇学Linux:认识Linux和使用云服务器 本文再上文的基础上,学习Linux的基本指令 xhell:进入/退出全屏操作:alt enter 清空页面:clear 查看目录 pwd(print working directory):查看当前目录 ls(list)&am…

P1033 [NOIP2002 提高组] 自由落体

题目描述 在高为 �H 的天花板上有 �n 个小球,体积不计,位置分别为 0,1,2,⋯ ,�−10,1,2,⋯,n−1。在地面上有一个小车(长为 �L,高为 �K,距原点距离为 &…

【十进制 转 二进制】【二进制 转 十进制】10进制 VS 2进制【清华大学考研机试题】

10进制 VS 2进制 十进制转成二进制二进制 转成 十进制本题是高精度,如何做? 原题链接 本题我们先需要知道 十进制 如何转 二进制 二进制 如何转 十进制 十进制 如何转 二进制: 十进制转成二进制 例如 173 转成 二进制 就把173 短除法 除…