打印

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

[复制链接]
4754|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
原野之狼| | 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

使用特权

评论回复
5
zhanghetxwd|  楼主 | 2012-5-21 15:31 | 只看该作者
4# ayb_ice
那就是说sfr的地址是无法获取的了?有没有其他方法能够得到sfr的地址呢?

使用特权

评论回复
6
ayb_ice| | 2012-5-21 15:41 | 只看该作者
sfr P0 = 0x80;
80就是P0的地址,只能直接寻址,间接寻址80其实访问的是IDATA RAM的0x80

使用特权

评论回复
7
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);\
}
请问有人能实现吗???
非常感谢

使用特权

评论回复
8
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);    // 写

使用特权

评论回复
9
zhanghetxwd|  楼主 | 2012-5-21 16:57 | 只看该作者
8# ayb_ice
这样写是不行的,这样写得到的是寄存器r的值而不是寄存器的地址
例如:sfr p0 = 0x80;
         p0 = 0xff;
你这个读得到的是0xff;而我是想得到P0的地址也就是0x80...

使用特权

评论回复
10
ayb_ice| | 2012-5-21 17:03 | 只看该作者
都说了,SFR不能通过指针操作,怎么理解能力这么差
当然也不能通过编译器得到它的地址,否则可能误导观众了




        U8 x;
       
        x = &P0;

sys_user.c(624): error C189: '&' on bit/sfr illegal

使用特权

评论回复
11
ayb_ice| | 2012-5-21 17:05 | 只看该作者
RT

未命名.JPG (19.69 KB )

未命名.JPG

使用特权

评论回复
12
zhanghetxwd|  楼主 | 2012-5-21 17:15 | 只看该作者
本帖最后由 zhanghetxwd 于 2012-5-21 17:17 编辑

11# ayb_ice
那就是不支持取址呗? 我只是抱着一丝希望,看看是否能够实现啊。谢谢~  还有不是我理解能力差,我上面说的应该说的清楚了吧,我就是想问问  是不是  就是没有办法取到地址或者有什么其他方法能够实现我上面的那个例子,如果高手说就是取不到,那我就死心了呗,其实我觉得应该有这个功能...

使用特权

评论回复
13
zhanghetxwd|  楼主 | 2012-5-21 17:16 | 只看该作者
11# ayb_ice
谢谢你的热心答复...

使用特权

评论回复
14
ayb_ice| | 2012-5-21 17:23 | 只看该作者
这是51的体系结构决定了的,SFR不支持间接寻址,真不知道你是否明白什么是直接寻址,什么是间接寻址
不是编译器的问题

使用特权

评论回复
15
zhaofy521| | 2012-5-22 08:45 | 只看该作者
这是51的体系结构决定了的,SFR不支持间接寻址
ayb_ice 发表于 2012-5-21 17:23
14楼是对的

使用特权

评论回复
16
byjzg| | 2012-5-22 16:20 | 只看该作者
SFR数据类型有什么特点呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

7

帖子

0

粉丝