绝对地址的访问方法

C51提供了3种访问绝对地址的方法,分别问:绝对宏、关键字“_at_”、连接定位控制。

   1.绝对宏

     使用绝对宏时,需要添加投文件“absacc.h”,在该文件中定义的绝对宏有CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD。

    CBYTE:对程序存储区(code)的字节地址进行访问。

    例如:i=CBYTE[0X000F];表示i指向程序存储区的地址为0x000F的存储单元,地址范围为0X0000~0XFFFF。

    XBYTE:对扩展RAM区的字节地址进行访问。

    例如:i=XBYTE[0X000F];表示i指向扩展RAM区的地址为0x000F的存储单元,地址范围为0X0000~0XFFFF。

    PBYTE:对扩展RAM区的字节地址进行访问。

    例如:i=PBYTE[0X000F];表示i指向扩展RAM区的地址为0x000F的存储单元,地址范围仅为一页(256字节)。

    DBYTE:对内部RAM区的字节地址进行访问。

    例如:i=PBYTE[0X000F];表示i指向内部RAM区的地址为0x000F的存储单元。

   以WORD表示的是为字操做,其余的跟以上相同。

    2.关键字“_at_”

    使用关键字“_at_”不能对绝对变量进行初始化,位变量及函数不能用该关键字进行指定。使用方法为直接在定义的数据后边加上_at_,在加上要指向的绝对地址即可。

    例如:unsigned char data i_at_0x0F;表示i指向内部RAM区域地址为0x0f的单元;

               unsigned char xdata i_at_0x0F;表示i指向扩展RAM区域地址为0x0f的单元;

               unsigned char xdata i[10] _at_0x0F;表示数组的起始地址为扩展RAM区的0x0f单元。

    3.链接定位控制

    此法是利用连接控制指令 code xdata pdata \data bdata 对“段”地址进行。如要指定某具体变量地址,则在C模块中声明这些变量,并且使用BL51连接器/定位器的定位指令来指定绝对地址。

    例如:要定义一个数组,需要把它定位到xdata区的地址2000h。首先在C模块中声明这个数组:

    unsigned char xdata i[100];

    Cx51编译器为该C模块生成一个目标文件,并且包含了一放在xdata存储区的变量段。因为它在这个模块中只有一个变量,那么i[100];是这个段中仅有的变量,这个段名字为?XD?模块名“比如该模块名为mokuai.c,则这个段名字为?XD?ALMCTRL。BL51连接器/定位器允许使用定位指令指定任意一个段的基地址。则可以通过以下指令指定变量的位置:BL51 … mokuai.obj XDATA(?XD?mokuai(2000h))。

    此方法有一定的局限性,使用相对较少

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值