LXFY
驱动牛犊
驱动牛犊
  • 注册日期2001-12-11
  • 最后登录2003-12-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2360回复:8

c51中如何访问指定IO地址的数据

楼主#
更多 发布于:2002-03-05 14:28
#define ABC ((char (xdata *)[0x1000]) 0x8000)
以上是我定义的IO指针ABC
访问时用*LedDisp[0],*LedDisp[0]是0x8000的char数据

我这样用好像不好使,各位大虾可以给我一些成功经验吗?
我相信万有引力
zhaogf
驱动牛犊
驱动牛犊
  • 注册日期2001-09-09
  • 最后登录2002-10-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-03-05 21:10
用宏定义
如:#define IOBASE ((unsigned char*) 0x2a000L)
定义了一个基地址0xa000

可以用
unsigned char var;
*IOBASE=var;
var=*IOBASE;
哈哈哈哈.........
yiyiz
驱动小牛
驱动小牛
  • 注册日期2002-02-15
  • 最后登录2007-09-06
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-03-07 11:15
#include <absacc.h>
#define IOBASE XBYTE [0xa000]

可以用
unsigned char var;
*IOBASE=var;
var=*IOBASE;
yiyiz
驱动小牛
驱动小牛
  • 注册日期2002-02-15
  • 最后登录2007-09-06
  • 粉丝0
  • 关注0
  • 积分50分
  • 威望5点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-03-07 18:25
我上面说错了,你定义的是常数指针.
应该为如下:
#define IOBASE ((unsigned char*) 0x20000L)
IOBASE[0x8000]=100;

就是对是地址是0x8000的char数据赋值为100
以上0x20000L的含义为指向xdata零地址的指针
0x8000为偏移
huxiangming
驱动牛犊
驱动牛犊
  • 注册日期2002-03-14
  • 最后登录2002-06-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-03-17 13:21
#define IOPART XBYTE[020000]
jetnet
游客
游客
5楼#
发布于:2002-03-25 11:36
我上面说错了,你定义的是常数指针.
应该为如下:
#define IOBASE ((unsigned char*) 0x20000L)
IOBASE[0x8000]=100;

就是对是地址是0x8000的char数据赋值为100
以上0x20000L的含义为指向xdata零地址的指针
0x8000为偏移
 

0x20000是指向xdata零地址的指针,到底是怎么回事?
lvyingf
游客
游客
6楼#
发布于:2002-03-26 23:16
[quote]我上面说错了,你定义的是常数指针.
应该为如下:
#define IOBASE ((unsigned char*) 0x20000L)
IOBASE[0x8000]=100;

就是对是地址是0x8000的char数据赋值为100
以上0x20000L的含义为指向xdata零地址的指针
0x8000为偏移
 

0x20000是指向xdata零地址的指针,到底是怎么回事? [/quote]

既然说是访问IO口数据,当然是当前访问的IO口地址,你是真不知道还是假的?
501lsc
驱动牛犊
驱动牛犊
  • 注册日期2001-10-04
  • 最后登录2005-05-18
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-05-19 12:34
P0等可以直接用,P1。1应该是定义sbit P11=P1^1;然后P11就是了。
u_you
驱动中牛
驱动中牛
  • 注册日期2002-04-11
  • 最后登录2010-03-05
  • 粉丝0
  • 关注0
  • 积分19分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-05-22 20:50
XBYTE[0x8000] 即可访问xdata 0x8000。
你也可参考《absacc。h》自行定义。

#define IOBASE ((xdata unsigned char*)0x8000)
or
#define IOBASE ((unsigned char*)0x20000L)

then
IOBASE[0] = 0xXX
IOBASE[1] = 0xXX
.
.
.
建议使用第一种形式,速度要快很多。
狼,食肉目犬科犬属。外形和狼狗相似。 有狗的忠诚,但无狗的奴性。 [img]http://www.driverdevelop.com/forum/avatar/u_you_wolf.jpg[/img]
游客

返回顶部