1.前言

MCS-51的存储器有片内RAM、片外RAM 和 ROM 三个空间。

  • MCS-51单片机在物理结构上有四个存储空间

1、片内程序存储器(片内ROM)
2、片外程序存储器(片外ROM)
3、片内数据存储器(片内RAM)
4、片外数据存储器(片外RAM)

  • 在逻辑上(即从用户的角度上)MCS-51单片机有三个存储空间

1、片内外统一编址的64K的程序存储器(ROM)地址空间(MOVC)
2、256B的片内数据存储器(片内RAM)的地址空间(MOV)
3、以及64K片外数据存储器(片外RAM)的地址空间(MOVX)

注:在访问三个不同的逻辑空间时,应采用不同形式的指令以产生不同的存储器空间的选通信号。

2.存储空间划分

2.1 片内RAM

图 片内AM地址空间划分

地址范围是00H到7FH (52系列延伸到FFH),为8位地址,所以最大可寻址的范围为256个单元地址

  • 00H到1FH

共32字节,分成四个工作寄存器区,每区有寄存器 R0~R7。
对此区域,可以使用 R0~R7 来操作,代码短捷,但是,只有一个当前工作区是可以这样读写的。
对此区域,也可以使用字节地址,来读写。

  • 20H-2FH

共16字节,是位寻址区,共有128个“位”,位地址:00~7FH。
此区域,也可按照字节寻址,来读写。

  • 30H-7FH

没有什么特色,只进行字节寻址。

  • 80H-FFH

共有128个地址号码,其中离散的分布着21个特殊功能寄存器,必须直接寻址才能读写。
(52系列,在此范围,还有128字节的 RAM,必须间接寻址才能读写)。

注:对上述空间读写,必须使用 MOV 指令。

2.2 片外RAM

片外RAM的地址范围是0000H到FFFFH,容量即为64KB。对片外RAM读写,必须使用 MOVX 指令。

对片外RAM采用间接寻址方式,R0、R1和DPTR都可以做为间接寻址寄存器,R0、R1是8位的寄存器,即R0、R1的寻址范围最大为256个单元,而DPTR是16位地址指针,寻址范围就可达到64KB。

也就是说在寻址片外RAM时,寻址范围超过了256B,就不能用R0、R1做为间接寻址寄存器,而必须用DPTR寄存器做为间接寻址寄存器。

2.3 ROM

ROM的地址范围是0000H到FFFFH,容量即为64KB,地址长度16位,作用是 存放程序及程序运行时所需的常数。

其中0000~0FFFH,即4K,在片内,其它在片外。

EA = 1,寻址内部ROM;EA = 0,寻址外部ROM
对ROM读出,必须使用 MOVC 指令。

3. 参考文献

[1] http://blog.163.com/asm_c/blog/static/24820311320112208130269/

MCS-51单片机存储地址空间划分的更多相关文章

  1. 51单片机C语言学习笔记3: 存储器结构

    MCS-51单片机在物理结构上有四个存储空间: 1.片内程序存储器2.片外程序存储器3.片内数据存储器4.片外数据存储器 但在逻辑上,即从用户的角度上,8051单片机有三个存储空间: 1.片内外统一编 ...

  2. Windows 通用应用尝试开发 “51单片机汇编”总结

    一.前言 终于完成windows通用应用“51单片机汇编”,半年前开始玩WindowsPhone开发的第一个真正意义上的App(还很多缺点=_=).开发从1月中旬考完试到今天,期间实习了半个月,玩了几 ...

  3. 51单片机中断interrupt……using……

    51单片机中断细节的一些问题. interrupt0:外部中断0interrupt1:定时器中断0interrupt2:外部中断interrupt3:定时器中断1interrupt4:串口 using ...

  4. 51单片机实现对24C02进行页写、顺序读取并显示验证

    //************************************************************************************* //**程序名称:51单 ...

  5. [学习笔记]15个QA让你快速入门51单片机开发

    一.C语言相关 Q1:sbit与sfr代表是什么?有什么作用? Q2:#define OSC_FREQ  22118400L这句宏命令里的“L”是什么意思? Q3:我粘贴了别人的代码,怎么发现没有un ...

  6. 51单片机GPIO口模拟串口通信

    51单片机GPIO口模拟串口通信 标签: bytetimer终端存储 2011-08-03 11:06 6387人阅读 评论(2) 收藏 举报 本文章已收录于:   分类: 深入C语言(20) 作者同 ...

  7. 51单片机和STM32单片机区别在那里

    ​大部分朋友可能都知道51单片机和stm32单片机也知道一般入门会先学习51单片机在学习stm32单片机会简单一些,但是对于51单片机和stm32单片机的具体区别却不知道了,有些人觉得没必要,但是我个 ...

  8. [51单片机] Keil C51中变量的使用方法详解

    引言    8051内核单片机是一种通用单片机,在国内占有较大的市场份额.在将C语言用于51内核单片机的研究方面,Keil公司做得最为成功.由于51内核单片机的存储结构的特殊性,Keil C51中变量 ...

  9. sprintf在51单片机中的使用

    sprintf在51单片机中的使用 unsigned char ch20_str[4]; unsigned char ch2o_m_str[6]; ch2o = 123; ch2o_m = 23456 ...

随机推荐

  1. Leetcode 237.删除链表中的节点 By Python

    请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点. 现有一个链表 -- head = [4,5,1,9],它可以表示为: 4 -> 5 -> 1 - ...

  2. 【转】cJSON 使用笔记

     缘      起       最近在stm32f103上做一个智能家居的项目,其中选择的实时操作系统是 rt_thread OS v1.2.2稳定版本,其中涉及到C和java(android)端数据 ...

  3. 牛客练习赛 小A与任务 解题报告

    小A与任务 链接: https://ac.nowcoder.com/acm/contest/369/B 来源:牛客网 题目描述 小A手头有 \(n\) 份任务,他可以以任意顺序完成这些任务,只有完成当 ...

  4. rsync同步官方zabbix仓库搭建本地yum源

    1.同步资源 # rsync -vrt rsync://repo.zabbix.com/mirror/zabbix/3.4/rhel/7/x86_64/ /home/mirrors/zabbix/3. ...

  5. Linux 常用命令——cat, tac, nl, more, less, head, tail, od

    Drecik学习经验分享 转载请注明出处:http://blog.csdn.net/drecik__/article/details/8453584 1. cat 由第一行开始显示文件内容 2. ta ...

  6. 百度地图BMapLib.InfoBox 手机兼容源码修改

    InfoBox.prototype.initialize = function (map) { var me = this; var div = this._div = baidu.dom.creat ...

  7. spring基于通用Dao的多数据源配置详解【ds1】

    spring基于通用Dao的多数据源配置详解 有时候在一个项目中会连接多个数据库,需要在spring中配置多个数据源,最近就遇到了这个问题,由于我的项目之前是基于通用Dao的,配置的时候问题不断,这种 ...

  8. CM记录-JVM调优

    1.堆栈大小 2.JVM重用 3.GC

  9. 缓存穿透、雪崩、热点与Redis

    (拼多多问:Redis雪崩解决办法) 导读:互联网系统中不可避免要大量用到缓存,在缓存的使用过程中,架构师需要注意哪些问题?本文以 Redis 为例,详细探讨了最关键的 3 个问题. 一.缓存穿透预防 ...

  10. Neural Networks and Deep Learning(week2)Logistic Regression with a Neural Network mindset(实现一个图像识别算法)

    Logistic Regression with a Neural Network mindset You will learn to: Build the general architecture ...