C51中的xdata

Posted 猫咪大王

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C51中的xdata相关的知识,希望对你有一定的参考价值。

今天在写公司芯片对应的.H文件时,在定义寄存器的时候出现一个问题。

我们芯片的寄存器地址是定义在片外RAM区的,不能使用sfr这样的关键字来进行定义。

后来查阅了对应的资料才发现定义寄存器有很多种方法,不同存储区域的寄存器定义的方式也是不一样的。

对于处于片外RAM的寄存器我们需要使用xdata关键字定义。

http://www.51hei.com/mcu/3993.html

http://blog.chinaunix.net/uid-25562715-id-315902.html

这两篇文章对xdata idata data解释得都非常详细。

总结来说:

空间名称
地址范围
说明
DATA
D:00H~7FH
片内RAM直接寻址区
BDATA
D:20H~2FH
片内RAM位寻址区
IDATA
I:00H~FFH
片内RAM间接寻址区
XDATA
X:0000H~FFFFH
64KB常规片外RAM数据区

使用sfr关键字定义的特殊功能寄存器是在片内RAM区的高128字节中(即在80H-FFH)。

这里有一点想说一下,sfr在51中编程中用的多一点,它用来定义了片内RAM区的特殊功能寄存器,但是我们也可以完全不使用它,采用类似

#define P0 ((unsigned char volatile idata*)(0x80))

的形式代替。

今天遇到这个问题,说明我对51单片的内存分配、各种寻址方式还是非常不熟悉的,之后要好好熟悉一下。

 

以上是关于C51中的xdata的主要内容,如果未能解决你的问题,请参考以下文章

C51中遇到一个有关data与xdata的问题,已解决

单片机成长之路(51基础篇) - 017 C51中data,idata,xdata,pdata的区别(转)

一个因xdata声明引起的隐含错误

C51 存储类型与存储模式

keil C51中的data怎么设置成大一点的值?

关于keil单片机编程中的data,idata,xdata,pdata,code数据类型