7233|13

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

已知SFR的寄存器地址,我怎么编程读写此SFR寄存器? [复制链接]

我找不到怎么直接通过SFR的地址来读写SFR.
比如 我得到了一个0x80的地址,这是一个SFR的地址,我怎么向这个地址写入一个字节,或将SFR的内容读出来?

void main( void )
{
    unsigned char   btSfrAddr  = 0x80;


    unsigned char   btSfrValue = 0;


while( 1 )

{
        btSfrValue = *((unsigned char data*)btSfrAddr );  // 这样不行

}
}

求大侠帮忙。

最新回复

还是嵌入汇编吧.SFR的地址都是很容易查到的.  详情 回复 发表于 2009-8-8 17:36
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
不知道你是什么平台,wince linux 都可以用内存映射。
wince 用 VirtualAlloc,VirtualCopy函数可以实现,如果是win系统的话 用一个winio包,里面提供了操作;还有函数 ioremap 重新映射,然后用writeb,readb进行读和写。楼主搜一下吧
linux,不是很清楚
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
忘了说了,8051,用Keil编译器。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

4
 
为什么不使用编译器自带的头文件呢,里面对SFR都做了定义。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

5
 
btSfrValue = *((unsigned char data*)btSfrAddr );  // 这样不行
当然不行,编译器会不知道你的存储类型的.SFR在内部RAM的高端,但内部RAM的高端不只是SFR,还有IDATA区,访问SFR要用sfr关键字,否则会被认为是IDATA.
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

6
 
谢谢楼上各位!

我是通过主机发指令来控制SFR的,所以要通过SFR寄存器的地址来控制。


我倒想了一个查找表的方法来控制,但这样显得太笨了,程序也大。

keil c中有什么直接的办法,哪位达人给个方法。
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

7
 
Up!
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

8
 
除了根据地址进行转移,没有别的办法. MCS-51不允许对SFR间接寻址.
用C就只能这样
switch (btSfrAddr)
{
  case 0x80:
   btSfrValue = P0;
   break;
  case 0x90:
   btSfrValue = P1;
   break;
  ....
}
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

9
 
还可以用函数表的方法,速度快....就不贴了....
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

10
 
谢谢 Great_Bug! 我也想了这种方法,不过这样使程序很大。

再问一下,如果我得到sfr地址后,用嵌入汇编的方法是否能解决呢?

帮一下忙,如能解决,再送50分。
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

11
 
最效率的就是函数表的办法......我想不出更好的办法.
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

12
 
好像也只有查表比较快了
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

13
 
函数表的办法是什么意思?和switch...case...不一样吗?能否给个思路?
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

14
 
还是嵌入汇编吧.SFR的地址都是很容易查到的.
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表