找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3902|回复: 2
收起左侧

keil C51中各个地址的区别

[复制链接]
ID:51090 发表于 2014-10-13 13:22 | 显示全部楼层 |阅读模式
涉及操作系统堆栈处理的时候,必须对堆栈地址相当清晰,因此查阅了部分资料和网上论坛,发现在对keil中对C51的各个地址标号表示的很不清晰,现在做以下总结:



C:0x0000~C:0xFFFF     代表单片机的ROM地址,寻址空间为64KB,其中

C:0x0000~C:0x0FFF     是内建ROM空间,总共有4KB(比较一下电脑,论TB算,甚至还有PB什么的,这个差距,单片机你不要太精简啊...)

C:0x1000~C:0xFFFF     是单片机的外部ROM寻址空间,一共60KB



X:0x000000~X:0x00FFFF 代表单片机外部的RAM地址,寻址空间为64KB



D:0x00~D:0xFF    是内建RAM空间,一共有256BYTE(注意,8051系列单片机只有128BYTE)(才256字节,连1KB都不到。想想我们的电脑,现在的RAM都上升到GB了。)

I:0x00~I:0x00FF     是内建RAM空间,一共有256BYTE((注意,8051系列单片机只有128BYTE)(唉,这就是差距,这样说来,给堆栈的空间也小得可怜了,还要扣掉0x00~0x2F这片被工作寄存器占用和位寻址占用的48字节地址,节约下来总共才只有208字节,必须相当节省地去用了)





区别一下D和I,由于单片机的RAM在高128字节是双映射即在0x80~0xFF这片地址中,特殊寄存器与RAM空间地址是重合的,对于这个设计我也感到相当费解,难道是要节约空间么?

因此,在单片机调用程序读取数据的时候,使用I:0xXX作为RAM的地址,使用D:0xXX作为特殊寄存器的地址。除此之外,二者的功能是一样的,寻址的RAM空间相同。

回复

使用道具 举报

ID:61875 发表于 2014-10-14 08:12 | 显示全部楼层
谢谢楼主的奉献。
回复

使用道具 举报

ID:67281 发表于 2014-10-14 08:48 | 显示全部楼层
学习了,,,,,
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表