『单片机原理』程序存储器的结构

234 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情

🚩write in front🚩   

🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎
🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家博主 & 星级博主~掘金⇿InfoQ~51CTOP创作者~周榜102﹣总榜860⇿全网访问量30w+🏅
🆔本文由 謓泽 发布到掘金(JueJin) 如需转载还请通知⚠
📝个人主页-謓泽 的个人主页 - 文章 - 掘金 (juejin.cn)📃
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
📣系列专栏-单片机原理 - 謓泽的专栏 - 掘金 (juejin.cn)🎓
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩

前言

相信学习单片机的小伙伴们一定听说过一门课程,那就是单片机原理。如果你也是玩单片机的却不怎么懂单片机原理的。那么这单片机原理还是非常有必要学习一下的。如果你问我学了有什么好处,那么应该就是你可能会对单片机(内部)的理解更"深"吧&同时也对你学习单片机编程也是有极大的很多好处的👋

㈠『MCS - 51』系列单片机存储器结构

MCS - 51 系列的单片机存储器的结构如下👇

⒈程序存储器ROM 

ROM 的功能⇢ROM的数据在程序运行的时候是不容改变的,除非你再次烧写程序,他就会改变。就像我们的书本,印上去就改不了了,除非再次印刷,这个就是ROM的原理。

🍎存放单片机工作时的程序,单片机在上电工作的时候,程序指令制导单片机完成设定的功能。没有ROM存储器,单片机是不能够进行工作的。

⒉程序存储器的编制与访问

在MCS - 51系列当中不同的机型的程序存储器。

一、8031和8032内部没有ROM。访问空间就只能是片外的存储器。

二、8051片内有4kB的ROM。8751内部有4kB。

三、8052片内有8kB的ROM。8752内部有8kB。

拓展知识点 [kB] :指的是单片机的容量。

K的意思是KB 也就是1024字节。每字节有8bit(比特位)也就是每字节有8位,1个字节=8个比特位。

㈡ 程序存储器ROM ⇿ EA

MCS - 51单片机的程序存储器从物理结构上被分为如下↓两种

⒈⇢ 片内程序存储器 ROM〖不同型号的容量不同〗

⒉⇢ 片外程序序存储器 ROM〖64kB地址空间,外部通过总线来进行访问〗

对于8051单片机鉴于片外ROM有4kB与片内的ROM编制是由重复的,为了取指令操作码的时候仅仅访问一个存储单元,单片机设置了一根控制线EA[非]

🍘EA[非] = 1(5V) PC值大于某值(由容量决定)为访问外部程序存储器,PC值小于某值(由容量决定)只为访问内部程序存储器。

🍙EA[非] = 0(0V) 内部程序存储器被忽略。

🍅注→【PC】程序计数器,用于指示当前将要执行的下一条机器指令的内存地址。

㈢ 程序存储器的7个特殊地址 

MCS-51系列单片机复位后的PC的内容为0000H(0000 [H] 代表着十六进制的数)故单片机复位后将从0000H单元开始执行车光绪。程序存储器的0000H单元地址是系统程序的启动的地址。这里一般放一条绝对转移指令。

在上述图中有⒍个中断源的地址之间仅隔⑧个单元,存放中断服务程序往往不够用。这是通常放一条绝对转移的指令,转到真正的中断服务程序,真正的中断服务程序放到后面当中。

®数据存储器RAM

RAM 的功能⇢RAM就是在程序运行中,数据会随时改变的,就像我们的黑板,写上了可以擦,擦完再写上去,相当于程序运行的时候,调用ROM里面的数据进行各种运算。

🍏数据存储器(RAM)存储单片机运行期间所需要的数据和临时生成的数据是需要能够快速读出和写入数据的。此类存储器在掉电之后,存储的数据会丢失,并不能永久保存。

由于数据存储器包含单片机工作时所需要的多种用途的存储器,各部分存储器特性不同访问方式也是不同的。

㈣ 数据存储器RAM

MCS - 51单片机的程序存储器从物理结构上被分为如下⇲两种

⒈⇢片内数据存储器RAM(片内连线访问,不同型号大小不同)

⒉⇢片外数据存储器RAM(64kB地址空间,外部通过16地址总线来进行访问)

工作寄存器组区

位寻址区

一般RAM区

堆栈区与堆栈指针

㈤ 堆区和栈区

堆区

在执行函数的时候,函数内部局部变量的存储单元都是可以在栈上进行创建的,函数执行结束的时候这些存储单元会被自动的进行释放。栈区主要存放运行函数所分配的局部变量,函数的参数、返回数据、返回地址等。 

栈区

通常定义变量(或对象),编译器在编译时都可以根据该变量(或对象)的类型知道所需内存空间的大小,从而系统在适当的时候为他们分配确定的存储空间。这种内存分配称为静态存储分配;有些操作对象只在程序运行时才能确定,这样编译时就无法为他们预定存储空间,只能在程序运行时,系统根据运行时的要求进行内存分配,这种方法称为动态存储分配。所有动态存储分配都在堆区中进行。

当程序运行到需要一个动态分配的变量或对象时,必须向系统申请取得堆中的一块所需大小的存贮空间,用于存贮该变量或对象。当不再使用该变量或对象时,也就是它的生命结束时,要显式释放它所占用的存贮空间,这样系统就能对该堆空间进行再次分配,做到重复使用有限的资源。

㈥ 特殊功能寄存器

特殊功能寄存器(Special Function Register) 专门用于控制、管理片内的算数逻辑部件、并行I/O口、串行口、定时/计数器、中断系统等功能模块的工作,用户在编程的时候可以给其设定值,但不能移作它用。分布在80[H]~FF[H]地址空间。与片内数据存储存储器统一编制,除PC外,51的子系列有18个特殊功能的寄存器。52子系列一共有21个特殊功能寄存器。

注⇢以下篮字所标注的一些特殊功能寄存器的词汇不懂可以前往百度查阅相关知识🉑

MCS-51单片机的特殊功能寄存器
符号地址功能介绍
BF0HB寄存器
ACCE0H累加器
PSWD0H程序状态存储器
TH2*CDH定时器/计数器2(高8位)
TL2CCH定时器/计数器2(低8位)
RLDHCBH外部输入(P1.1)计数器/自动再装入模式时初值寄存器高八位
RLDLCAH外部输入(P1.1)计数器/自动再装入模式时初值寄存器低八位
T2CON*C8HT2定时器/计数器控制寄存器
IPB8H中断优先级控制寄存器
P3B0HP3口锁存器
IEA8H中断允许控制寄存器
P2A0HP2口锁存器
SBUF99H串行口锁存器
SCON98H串行口控制寄存器
P190HP1口锁存器
TH18DH定时器/计数器1(高8位)
TH08CH定时器/计数器0(高8位)
TL18BH定时器/计数器1(低8位)
TL08AH定时器/计数器0(低8位)
TMOD89HT0、T1定时器/计数器方式控制寄存器
TCON88HT0、T1定时器/计数器控制寄存器
DPH83H数据地址指针(高8位)
DPL82H数据地址指针(低8位)
SP81H堆栈指针
P080HP0口锁存器
PCON87H电源控制寄存器