请教:sfr数据类型如何取址?

[复制链接]
5792|15
 楼主| zhanghetxwd 发表于 2012-5-21 14:53 | 显示全部楼层 |阅读模式
如题:
    其他变量使用&得到该变量的地址。
    那怎样取得sfr变量的地址呢?
原野之狼 发表于 2012-5-21 15:01 | 显示全部楼层
该地址是显示地给予的
 楼主| zhanghetxwd 发表于 2012-5-21 15:07 | 显示全部楼层
2# 原野之狼
我知道是显示的给与的 但是如何放过来取得这个地址呢?比如说我要写一个函数,该函数是将某一个寄存器的地址付给另一个变量(注意寄存器是不确定的),这时我如何取得这个寄存器的地址呢?
void getsfraddr(reg)

       char addr;
       addr =   how(reg);

这样能实现得到任意寄存器的地址(因为寄存器是不确定的)。不知道我是否说清楚了~~!  谢谢高手~
ayb_ice 发表于 2012-5-21 15:12 | 显示全部楼层
不可以通过指针访问SFR
 楼主| zhanghetxwd 发表于 2012-5-21 15:31 | 显示全部楼层
4# ayb_ice
那就是说sfr的地址是无法获取的了?有没有其他方法能够得到sfr的地址呢?
ayb_ice 发表于 2012-5-21 15:41 | 显示全部楼层
sfr P0 = 0x80;
80就是P0的地址,只能直接寻址,间接寻址80其实访问的是IDATA RAM的0x80
 楼主| zhanghetxwd 发表于 2012-5-21 16:41 | 显示全部楼层
6# ayb_ice
对,我就是想通过P0得到0x80这个数,请问有办法吗?我想我还是没说清楚
我现在是想写一个函数,这个函数的功能是将读写寄存器的操作输出,
我现在是这样写的,
#define W(regaddr,reg,data)\
{   reg = data;\
     comment(regaddr,data);\
}
comment实现的功能就是显示写了那一个地址的寄存器,调用这个宏时所用的寄存器会变化。
但是这样写太麻烦,每次调用的时候都要写一个reg还要写一个regaddr,例如
sfr P0 = 0x80;
#define p0_addr 0x80;
调用的时候这样写 W(p0_addr,addr,0xff);
我想将这个函数改成
#define W(reg,data) \
{ char regaddr ;\
reg = data;\
regaddr = HOW(reg);\
coment(regaddr,data);\
}
请问有人能实现吗???
非常感谢
ayb_ice 发表于 2012-5-21 16:49 | 显示全部楼层
#define __rr(r, d) d = r
#define __wr(r, d) r = d

unsigned char x;
__rr(P0, x);      // 读
__wr(P0, x);    // 写
__wr(P0, 0x55);    // 写
 楼主| zhanghetxwd 发表于 2012-5-21 16:57 | 显示全部楼层
8# ayb_ice
这样写是不行的,这样写得到的是寄存器r的值而不是寄存器的地址
例如:sfr p0 = 0x80;
         p0 = 0xff;
你这个读得到的是0xff;而我是想得到P0的地址也就是0x80...
ayb_ice 发表于 2012-5-21 17:03 | 显示全部楼层
都说了,SFR不能通过指针操作,怎么理解能力这么差
当然也不能通过编译器得到它的地址,否则可能误导观众了




        U8 x;
       
        x = &P0;

sys_user.c(624): error C189: '&' on bit/sfr illegal
ayb_ice 发表于 2012-5-21 17:05 | 显示全部楼层
RT

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| zhanghetxwd 发表于 2012-5-21 17:15 | 显示全部楼层
本帖最后由 zhanghetxwd 于 2012-5-21 17:17 编辑

11# ayb_ice
那就是不支持取址呗? 我只是抱着一丝希望,看看是否能够实现啊。谢谢~  还有不是我理解能力差,我上面说的应该说的清楚了吧,我就是想问问  是不是  就是没有办法取到地址或者有什么其他方法能够实现我上面的那个例子,如果高手说就是取不到,那我就死心了呗,其实我觉得应该有这个功能...
 楼主| zhanghetxwd 发表于 2012-5-21 17:16 | 显示全部楼层
11# ayb_ice
谢谢你的热心答复...
ayb_ice 发表于 2012-5-21 17:23 | 显示全部楼层
这是51的体系结构决定了的,SFR不支持间接寻址,真不知道你是否明白什么是直接寻址,什么是间接寻址
不是编译器的问题
zhaofy521 发表于 2012-5-22 08:45 | 显示全部楼层
这是51的体系结构决定了的,SFR不支持间接寻址
ayb_ice 发表于 2012-5-21 17:23
14楼是对的
byjzg 发表于 2012-5-22 16:20 | 显示全部楼层
SFR数据类型有什么特点呢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

7

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部