区别:哈佛结构的程序存储器与数据存储器分开

程序存储器:

① 用于存放程序(可执行的二进制代码映像文件,包括程序中的数据信息),还包括初始化代码等固件。

② 为只读存储器。注意,这里的“只读”,是指单片机(CPU)在正常工作时对其的访问方式是只读的;而现在大多数单片机的程序存储器(不管是内部还是外部)都采用了FLASH ROM,来取代以前所用的ROM、E2PROM等,可方便地进行在线编程(ISP)。

③ 标准8051的内部程序存储器大小为4KB(0x0000 ~ 0x0FFF);而具体的51核的兼容单片机的内部ROM大小需要参考其Datasheet,例如P89C51RA2xx的内部程序存储器是8K的Flash。

④ 内部、外部存储器统一编址,在软件设计上(指令系统中)没有差别;是否使用外部程序存储器是通过引脚在硬件电路上控制的:不使用外部程序存储器时,(接地);如果扩展了外部程序存储器,则使=0,当寻址到内部存储空间以外时,会自动转向外部程序存储器空间(与扩展外部程序存储器有关的还有和ALE的时序配合,以及P0和P2口用于地址线)。

[注] 一般直接选用内部程序存储器满足代码大小要求的单片机型号,避免扩展外部存储器,造成系统软硬件设计上的复杂和额外开销。

数据存储器:

为RAM。首先必须要强调的是,不管是物理上还是逻辑上,51单片机的内部、外部数据存储器都在不同的地址空间。两者不是一回事,用途也不一样,访问的指令也不同(内部RAM为MOV指令,外部为MOVX)。

1、内部数据存储器(内部RAM)

相当于内存,为程序(进程)中的变量和常量分配存储空间,掉电后内容消失。

标准8051的内部RAM为256B(0x00 ~ 0xFF):其中可供用户自由使用的是低128B(0x00 ~ 0x7F)区域,高128B中定义了26B的特殊功能寄存器(SFR),其余没有定义,因而没有意义。

P89C51RA2xx的片内RAM是512B(片内RAM不等于内部RAM,见释疑2)。

[说明] 关于内部RAM中的SFR,其中不但定义了一些控制字段,还包括累加器(ACC)、程序状态字(PSW)、数据指针(DPTR)、堆栈指针(SP)等,值得注意的是,片上I/O口P0 ~ P3的地址也在这里定义(即有3个特殊功能寄存器的地址实际上是P口的地址)——这是因为51单片机的I/O口与存储器是统一编址的。

2、外部数据存储器(外部RAM)

上面谈到“I/O口与存储器统一编址”的问题,因此,这里称作外部RAM空间更为合适。在这个64KB地址空间中(0x0000 ~ 0xFFFF),除了可以扩展外部RAM外,还可以扩展外部I/O设备。

外部RAM主要用于存储程序运行时产生的重要数据(如数据采集结果、数据处理结果、系统日志等),这时一般需要外加电源进行掉电保护,以在系统掉电时保存其中的数据信息;也可用于数据的暂时存储,供CPU正常读写操作使用。因此外部RAM主要是使用其“可随机访问、读写方便且高速”的特性。

*所谓I/O口与存储器统一编址,是指I/O口与主存在同一地址空间,将处理器的可寻址存储空间中专门划出一部分地址空间分配给I/O口使用。这与PC机的x86处理器不同,x86体系结构为I/O口专门定义了独立于存储空间之外的地址空间(事实上,除X86外,其他体系结构的处理器都对I/O口与存储器统一编址,可参考《Linux Device Drivers》)。

释疑1:51只有16根地址线,为什么能同时将程序存储器和外部数据存储器都扩展到64KB呢?即外部即有ROM,又有RAM,如何知道访问的是哪个?

在体系结构上,程序存储器和数据存储器是不同的地址空间,两者的访问是不会相互干扰的,这主要是通过在硬件和指令集设计上来实现的。

在硬件上,访问外部ROM是通过 EA和 PSEN引脚来控制的;访问外部RAM则是通过 WR和 RD信号来控制的;

在指令集上,访问外部ROM不需要使用显示指令,是通过PC(指令计数器)来控制取指地址的(跳转指令也可能引起PC跳转);而访问外部RAM则需要在程序设计上使用指令MOVX来执行。另外,访问内部RAM则使用了指令MOV,以区分外部RAM的访问。

释疑2:P89C51RA2xx的片内RAM是512B,是如何组织的?

P89C51RA2xx的片内RAM是512B:其中内部RAM为256B(使用MOV指令访问,定义与标准51相同);另外的256B为XRAM(片内的外部数据存储器),属于外部存储器的范畴,因此用途也同外部RAM,使用MOVX指令访问,当程序中的全局变量或单个局部变量需占较大存储空间时,可以定义为xdata型,保存到XRAM区。注意这个片内的XRAM掉电后其数据也会丢失;另外,如果要扩展外部RAM,则一般是设置XRAM为禁用态。

哈佛结构 Linux,哈佛结构与冯诺依曼结构区别相关推荐

  1. 哈佛结构和冯诺依曼结构区别。

    哈佛结构是一种将程序指令存储和数据存储分开的存储器结构.中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储 器中读取数据,并进行下一步的操作(通常是执行).程序指 ...

  2. 冯诺依曼结构和哈佛结构的区别

    冯诺依曼结构和哈佛结构的区别 1. 冯·诺依曼结构: 说明: 一种将程序指令存储器和数据存储器合并在一起的存储器结构.程序指令存储地址和数据存储地址指向同一个存储器的不同物理位置,因此程序指令和数据的 ...

  3. 哈佛结构和冯诺依曼结构的区别(3)

    冯诺依曼体系结构与哈弗体系结构的区别 材料一:        哈佛结构是一种将程序指令存储和数据存储分开的存储器结构.中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数 ...

  4. 关于冯诺依曼结构、哈佛结构、增强型的哈佛结构

    大家都学过,所谓的8086是冯诺依曼结构的(也叫做普林斯顿结构),51等单片机是哈佛结构,我们的PIC单片机是增强型的哈佛结构.那么,这三种结构之间究竟有什么区别吗?对于我们编程序的时候,有什么影响吗 ...

  5. 【原创】存储器设计思想——冯诺依曼结构和哈佛结构

    冯诺依曼结构     冯诺依曼结构,也叫普林斯顿结构,指令和数据是不加区别地混合存储在同一个存储器中的,共享数据总线.指令和数据地址指向同一个存储器的不同物理位置,指令和数据的宽度相同.由于指令和数据 ...

  6. 哈佛结构/冯诺依曼结构详细分析

    CISC与RISC的区别: CISC(复杂指令集):复杂指令集就是CPU在工作的时候需要有很多的汇编指令来完成,它可以用一个汇编指令来完成一件复杂的工作.例如:乘法,加法,乘加,乘减等处理的时候,他会 ...

  7. ARM到底是冯诺依曼结构还是哈佛结构

    参考: ARM到底是冯诺依曼结构还是哈佛结构_朱有鹏老师 1. 问题 嵌入式的学习中ARM处理器是主题,这些年产业界除了PC和服务器市场外,以手机.pad.家电控制等为代表的嵌入式领域都被ARM几乎垄 ...

  8. ARM到底是冯诺依曼结构还是哈佛结构?

    问题 嵌入式的学习中ARM处理器是主题,这些年产业界除了PC和服务器市场外,以手机.pad.家电控制等为代表的嵌入式领域都被ARM几乎垄断了.所以学习嵌入式处理器,其实等同于学习ARM.(当然了,近两 ...

  9. 哈佛结构和冯诺依曼结构

    已剪辑自: https://zhuanlan.zhihu.com/p/136748306 1946年,第一台计算机ENIAC诞生,人类进入计算机时代,后来,美籍匈牙利数学家:冯.诺依曼提出了计算机&q ...

  10. 冯诺依曼结构和哈佛结构01

    冯诺依曼结构和哈佛结构 哈佛结构是,数据和代码分开存在. 冯诺依曼结构是在哈佛结构之后提出的,冯诺依曼提出"代码本身也是一种数据",解决了哈佛结构的一个问题--总线暂用资源太多. ...

最新文章

  1. python中赋值不正确的_python中的“赋值与深浅拷贝”
  2. CentOS 7.6 搭建Gitlab教程
  3. jdk中的动态代理和cglib中动态代理的区别
  4. 需要掌握的数学知识(待补充)
  5. ZOJ 3633 rmq 重点在于转化
  6. android平台 arcgisr_《ArcGIS Runtime SDK for Android开发笔记》——Android Studio基本配置与使用...
  7. ​如何在图书馆收获一段爱情?​
  8. 检查Java测试中发生了什么
  9. 交叉编译HTOP并移植到ARM嵌入式Linux系统
  10. python问题解决了吗_Python 问题怎么解决?
  11. mongodb 教程一
  12. 【Codeforces 1344 A】Hilbert‘s Hotel,哈希表,set维护
  13. 桥接模式 适配器模式 装饰模式
  14. 当BIM遇上GIS-无人机倾斜摄影三维建模(ContextCapture) 建设智慧城市方法详解
  15. 点云配准icp算法推导
  16. B2C 和 C2C 你们是怎么区别的?
  17. 北理工2013《Java程序设计》课程设计要求
  18. java web 图片 加载_Java web开发中加载图片路径的两种方式
  19. ReadyInterview
  20. 零预算引爆个人和企业品牌

热门文章

  1. 什么是WAF(lua+nginx)
  2. 《Spring 5 官方文档》18. Web MVC 框架(八)
  3. C++ STL 学习 :for_each与仿函数(functor)
  4. 【浅谈】我对中小型企业网络管理的一些看法(二)
  5. MongoDB数据文件内部结构
  6. android下的jni
  7. 语录帝——要想人前显贵,必须背地里遭罪
  8. 在Win2000和XP中更换身份不必非要注销
  9. Python使用matplotlib可视化环形图
  10. kibana集成内部账号_揭开 Elasticsearch 中身份验证和授权的神秘面纱