51单片机的内存映射(二)

发布时间:2022-12-15  

本篇主要讲述单片机的FLASH内存映射,首先来看一下FLASH的内存映射表:

上图中启动地址是0x0000,也就是单片机上电后PC指向的这个位置,我们把需要执行的程序的首地址放在其中,对应的汇编语言如下图所示:



0地址去执行内部RAM的初始化工作,后面的代码控制寄存器指挥PC去取地址,以此来决定程序的运行!


在这里大家有没有觉得很奇怪:51单片机里面为什么没有时钟的初始化和中断向量表的初始化呢?其实原因很简单, 51单片机对12M晶振的时钟进行12分频,它就是固定的1M,因此就不需要设置时钟了。而STM32就不一样了,用户可以随意配置单片机的工作时钟。另外还有一个问题,单片机为什么不去中断向量表的注册呢?这是因为51在内部ROM中做了固定的映射,不需要再去重定向,所以在线升级就很难了。而STM32是支持中断向量表重定义的,它是将注册好的中断向量表搬运到SRAM中去,然后NVIC就会对中断作出更加快速的响应,显然51中断向量表在ROM中,中断反应就没有那么迅速了。这就是51单片机不需要做系统时钟的初始化和注册中断向量表的原因。


接下来要做的工作是初始化系统堆栈和可重入函数栈的初始化,下面是51系统堆栈初始化的汇编代码:


注意:汇编里面用;号来表示代码的注释。

栈的大小是可以重新设计的,因为SP初始化的时候它指向的地址是0x07,为了不让它与中断向量表和位寻址区重叠,我们可以将SP设置在30H以后(推荐0x60),即通用RAM区以后最安全。这是因为一般的C编译器是将局部变量放入栈中,而C51是将其放入内部RAM,开辟一片存储空间,多个函数共享该覆盖区。【是不是很怪异呢?】这样我们不得不留出一部分空间给局部变量。其实这并没什么好奇怪的,51只是单纯的想用SP传递参数和保护现场以及恢复现场等功能,这和一些单片机是有区别的,但是也导致了一些问题,各函数之间没有直接或间接的调用关系,则其局部变量空间便可覆盖。

如果一个函数同时被多个函数调用,可能会造成某些变量被冲掉,因此C51中的函数基本上都是不可重入的。也就说明一个问题,51没法调用递归函数,多任务调用同一个函数时会把一些参数覆盖掉。因为他们占用的内存地址是一样的,当然会被冲刷掉啦!!但我们也不必为之烦恼,51为我们提供了如下的解决方案,启动器文件中的可重入栈的设置和关键字reentrant。


上图是设置可重入栈空间的汇编代码,不过该栈是向上增长的,上面代码就是初始化了栈顶而已。

再看下图:


这样,关键字reentrant的使用就可以实现函数的递归调用,上图中的程序就是一个递归程序案例,以此来实现一个数的阶乘运算。


再看看我们的ROM是如何扩展的。


P0是地址总线的低八位,和数据总线共用同一个端口,ALE决定了你输出的是地址还是数据,幸运的是ALE的高低电平CPU会自动控制,不需要我们去操作。PSEN连接EPROM的片选。最后P2端口连接EPROM的高八位地址总线,这样就实现了内部ROM的扩展。


好了,让我们再来回顾总结一下以上内容吧,本篇主要讲述了三个方面的内容:第一,51单片机ROM向量表地址和启动地址。第二,系统栈以及可重入栈的初始化,可重入栈的重要作用(尤其是在可重入函数传递参数方面的使用)。其实这两个方面的内容也可以说是51单片机进入C世界所进行的大部分设置。除此之外,还讲述了51单片机在硬件电路设计上扩展ROM(最大可扩展64K.因为只有16跟地址线)的方式。(完)


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    既有片内ROM又有片外ROM时,会产生一部分重复的地址范围, 为了解决区分片内和片外ROM的问题,51单片机设置了一根控制线EA(低电平有效),所以 EA = 0 =>有效 =>访问片内存储器 EA......
    51单片机的内存映射(一);本文主要讲述51单片机RAM部分的内存映射,其内存空间如下图所示: 51单片机内部有256个字节的RAM空间,低128个字节为工作寄存器组区(0x00H......
    【MCS-51】内部资源及工作时序;51单片机是一种广泛应用于嵌入式系统中的芯片,具有极高的性价比和通用性。了解51单片机内部资源及其工作时序对于理解其基本原理和实现应用功能非常重要。本文将从51......
    51单片机存储器内存的讲解;  51单片机当中的存储器从功能性上来划分可以分为程序存储器与数据存储器。一般来说单片机存储器的存储空间是能够进行存储空间拓展的,但是......
    件结构决定了编程机制( 当然还要靠51芯片内CPU等机制 )。   此结构具有UART( 通用异步收发器 )的全部功能,能同时进行数据的发送和接收,也可作为同步移位寄存器使用。此结构集成于单片机内......
    51单片机学习——存储和引脚;前言 首先阅读这篇文章需要有 51 单片机 C 语言编程基础(至少要学完定时器)。这篇文章作为我的一个学习笔记,总结我学到的内容,后面在学习的过程中会慢慢补充,如果......
    块之间的数据交互。本文将介绍51单片机的总线架构和基本原理,并说明其在嵌入式系统中的应用。 一、总线架构 1. 地址总线 51单片机内部的地址总线由12根线组成,可以寻址2^12(4096)个地址空间。其中,P0......
    51单片机数据类型int,float,指针所占字节数; 1.int===2个字节 2.sfr===特殊功能寄存器,也是一种扩充数据类型,占用1个内存单元,利用它可以访问51单片机内......
    国内也众多51单片机厂家,且还有众多带51内核,用于各种不同场景的专用类单片机51单片机内部框架: 以下以STC89C52单片机为例,其内部总体结构其基本特性如下: 8位CPU、4-8k 字节 ROM......
    一节课时我们已跟大家讲述过,8051单片机是总线结构的。下面我们就51单片机内部的单个部件与大家进行讲解。      图片1   中央处理器(CPU):   刚跟大家讲过,需要提醒的是MCS-51的CPU能处理8位二......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>