首页 > 代码库 > C51中的xdata
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。