Keil C51中code、data、bdata、idata、xdata、pdata的解释

2020-03-20来源: eefocus关键字:Keil  C51  code  data  bdata  idata  xdata  pdata

8051 结构提供给用户3 个不同的存储空间,程序存储器ROM,数据存储器RAM(内部RAM和外部RAM)。

Keil C51通过以下的关键字定义了不同的存储类型,从而确保用户能够访问到51架构的全部存储空间。


code:访问程序存储器ROM,即我们常说的代码段,用来存放可执行代码,空间可达64K(0x0000~0xffff),该存储空间的代码段是只读的。


data:访问可直接寻址的片内存储器,即内部RAM,即我们常说的DATA区或数据段,在整个RAM块中只占前128 字节(0x00~0x7f),因为它采用直接寻址方式,对变量最高速的访问最快,通常我们把使用比较频繁的变量或局部变量存储在DATA 段中,但是次数必须节省,因为它的空间毕竟有限。


DATA数据段中分为两个子段,第一个子段包含四组寄存器组,每组寄存器组包含八个寄存器,共32 个寄存器;另外一个子段叫做位寻址段BDATA, 大小16 个字节,共128 位,每一位都可单独寻址:


bdata:访问位寻址的片内存储器,即访问内部RAM,在其中从20H开始的16字节(0x20~0x2f)。


xdata:访问外部数据存储器,即外部RAM,大小64K(0x0000~0xffff),16 位地址寻,称作外部数据区简称XDATA 区,访问XDATA 须采用间接寻址。

idata:访问间接寻址的内部RAM ,256个字节(0x00~0xff),在8051 系列的一些单片机如8052 有附加的128 字节的内部RAM,固定指前面0x00-0xff的256个字节的片内RAM,其中前128字节和data的128字节完全相同,只是因为访问的方式不同。


pdata:访问当前页面内的外部RAM中的XDATA,每一页256字节,按页访问。PDATA 段只有256 个字节,而XDATA段可达65536 个字节(64K嘛),对PDATA 和XDATA 的操作是相似的,但是对PDATA 段寻址比对XDATA 段寻址要快,因为对PDATA 段寻址只需要装入8 位地址,而对XDATA 段寻址需装入16 位地址,所以尽量把外部数据存储在PDATA 段中。

关键字:Keil  C51  code  data  bdata  idata  xdata  pdata 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic492286.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:直接寻址、间接寻址、立即寻址
下一篇:KEIL C中实现直接寻址和间接寻址

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

Keil C51 中使用Printf()进行串口输出
如何使用printf在串口显示信息,有两种办法,因为在keil C51中 printf函数是调用putchar进行数据传送的,而putchar应该是先判断TI是否为1,不为1则等待为1。 如果为1则清0,然后送出一个字符。因此如果你直接使用printf函数,你的程序就会在putchar函数中等待TI为1。这时你的程序就相当于直接死掉了。你可以通过改写putchar函数实现自己的目的。TI相当于是初始化不给赋初值就不干活。所以第一种办法就是在初始化的时候,给TI赋值为1,比如void uart_init() {    PCON &= 0x7F; //波特率不倍速 SCON
发表于 2020-03-08
Keil C51单片机集成开发环境编程与调试教程
同 VC 之类的通用 C 语言集成开发环境(IDE)一样,Keil 也采用“工程”(Project)的方式管理源代码及相关文件,这种管理方式为由多个源代码文件组 成的大型程序开发提供了方便。不管是最简单的 C51程序,还是复杂的多文件 程序都需要以下步骤:1)先建立新的工程文件;2)在工程中新建源代码文件,或是将已经存在的源代码文件加入工程;3)编译;4)调试,修正错误再编译;5)将生成的二进制文件*.hex 烧入单片机。 本教程重点介绍上述前 4 个步骤。二、Keil中新建工程的步骤1. 单击菜单“Project——New uVision Project……” 出现新建工程对话框:在此对话框中选择存放工程各类文件的路径和文
发表于 2020-03-03
Keil C51单片机集成开发环境编程与调试教程
使用KEIL、Atmel studio将数组定义在Flash区
简介:在进行51或AVR单片机程序开发时如果需要定义较大的数组或字符串时,一般定义将会把这些占用内存较大的变量放置到RAM中,因此RAM吃紧,严重的话将导致程序崩溃,面对这种情况我们可以将这些占用内存较大的变量定义到Flash中以释放一定的RAM空间,保障程序的流畅运行。在进行51或AVR单片机程序开发时如果需要定义较大的数组或字符串时,一般定义将会把这些占用内存较大的变量放置到RAM中,因此RAM吃紧,严重的话将导致程序崩溃,面对这种情况我们可以将这些占用内存较大的变量定义到Flash中以释放一定的RAM空间,保障程序的流畅运行。方法/步骤1——51单片机KEIL编译环境一、很多单片机爱好者都知道“摇摇棒”和“旋转LED
发表于 2020-03-03
使用KEIL、Atmel studio将数组定义在Flash区
s3c2440 ads程序移植到keil中(三) 初步完成
如果我把参数配置发生改变呢然后再一次编译 要包错误如下所示其实我们到这里离 在s3c2440 ads程序移植到keil中(二)中看到这个网友不值提供了方法 而且提供了几个文件的下载地址http://download.csdn.net/detail/googlemi/5176844 我直接下载下来了 把其中的2440init.s文件直接拷贝复制替代我工作中的2440init.s 该错误消失了但是出现了这一个错误 反正修改就能解决然后 提示了一个错误 意思 就nand.c和nand.h 没有加上去 让后加上去了 编译成功没有错误这种方式到此结束
发表于 2020-03-02
s3c2440 ads程序移植到keil中(三) 初步完成
s3c2440 ads程序移植到keil中(二) 初步完成
如果我把参数配置发生改变呢然后再一次编译 要包错误如下所示错误如下这个错误解决不了最后查看了网上网友的方法 又可以修改 但是引入了nand文件最后反正知道了2440init.s文件要修改许多 所以我就不再这里继续整了 浪费时间直接运用网上网友的东西即可网友编写的地址https://blog.csdn.net/hannibaychty/article/details/44873327从买板子到现在,想想也有2个月啦,开始就想跑裸奔的,可是工程都是在ADS下,win7系统根本不能用,于是就想着怎么在MDK跑,可是MDK上s3c2440的启动文件是不完整的,因此不推荐使用,为此蛋疼聊好长一段时间,查了很多资料都不成功,可能是我太笨啦,为此
发表于 2020-03-02
s3c2440 ads程序移植到keil中(二) 初步完成
s3c2440 ads程序移植到keil中(一) 初步完成
1 与其他工程一直一样 直接加入工程进行编译2440init.s(8): error: A1023E: File "option.inc" could not be opened: 等错误 直接把option.inc  Memcfg.inc 2440addr.inc 直接放在2440init.s的目录中然后编译 当前记过错误消失出现 .led.axf: Error: L6238E: 2440init.o(Init) contains invalid call from '~PRES8 (The user did not require code to preserve 8-b
发表于 2020-03-02
s3c2440 ads程序移植到keil中(一) 初步完成
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved