扩展寄存器定义

[复制链接]
6116|7
 楼主| 箫笑 发表于 2008-10-10 14:37 | 显示全部楼层 |阅读模式
对一个扩展功能的单片机进行扩展寄存器定义,
首先很开心用一句
sfr  ADC  = 0xf13;
keil毫不留情给了个error C142: 'SFR': invalid base address

然后用这句
#define    ADC  (*((unsigned char *) 0xf13))
编译没问题,就是实际上是没作用的

最后成功的方案是这句
unsigned char xdata  ADC _at_ 0xf13;

想不明白为什么用宏定义会不行的?我写的这句有什么问题吗?
hgjinwei 发表于 2008-10-10 19:51 | 显示全部楼层

不明白

不明白,既然是定义寄存器,怎么会定义到xdata里去了?
还有,sfr定义特殊功能寄存器似乎是在0xff之内的,难道说的不是51?

评论

扩展的寄存器是这样子的。  发表于 2019-3-5 20:39
 楼主| 箫笑 发表于 2008-10-10 19:59 | 显示全部楼层

正是51

是一种51内核的单片机,它集成了AD功能,而AD特殊功能寄存器的地址在xdata,所以有这样的东西.
zyok 发表于 2008-10-10 20:23 | 显示全部楼层

呵呵,没见过~~

ayb_ice 发表于 2008-10-11 10:36 | 显示全部楼层

unsigned char *不等于unsigned char xdata*

#define    ADC  (*((unsigned char xdata*) 0xf13))即可
xwj 发表于 2008-10-11 11:10 | 显示全部楼层

呵呵,LS正解

建议LZ先去看看Keil的ABSACC.H
 楼主| 箫笑 发表于 2008-10-11 20:33 | 显示全部楼层

恍然大悟

恍然大悟
您需要登录后才可以回帖 登录 | 注册

本版积分规则

78

主题

368

帖子

0

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