[求助] 求助:8051SFR的问题

kinglong2765   2011-4-21 14:40 楼主

8051中SFR是只能sfr     XX = 0x80;//(80H~FFH)吗?

有人见过下面这种用法吗?

8051中SFR是只能sfr     XX = 0x08;

在keil 里可以这样改吗?#define     XX DBYTE[ 0x08]

sfr 可以sfr function((void); 可以这样申明函数么?

回复评论 (4)

那个DBYTE是个什么东西?
但是那个#define这是C语言的内容。
这是预定义,预定义的意思就是
它会把后面的内容等同于前面的内容,而且是,,,形式上的等同,完全复制,不做任何修改和编译,我举个例子
#define COUNT 50000
程序中写  K += COUNT
这跟写 K+= 50000一点区别都没有
要注意的问题是

#define DUT 4*6
如果这样写
K = DUT  mod 4
那可绝对不是
K = 4*6 mod 4 我的意思是,不是 (4 * 6)mod 4
另外,我见过一些人这样定义数据类型
#define uint unsigned char
其实应该写成 typedf uint unsigned char
这最后三句话似乎离题,我只想说,请仔细看懂预定义的意思,有时候有些写法也许能起作用,但很有可能是错误的写法,来源于错误的理解。
强者为尊,弱者,死无葬身之地
点赞  2011-4-21 16:56

其实我主要是不明白有个程序里面为什么使用了sfr     XX = 0x08;因为在51里面的特殊功能寄存器的范围是00h~7fh

点赞  2011-5-8 21:53

有什么问题吗?

那就只能在这个范围内定义寄存器啊
这个0x08估计是一个未定义的,我手头没书,你查查。
你如果定义一个超出这范围的,估计直接报错。
强者为尊,弱者,死无葬身之地
点赞  2011-5-9 09:13
应该是有人写了一个头文件把SFR的定义扩大了,这个不管了,搞不定了
点赞  2011-5-14 13:38
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复