阅读:2360回复:8
c51中如何访问指定IO地址的数据
#define ABC ((char (xdata *)[0x1000]) 0x8000)
以上是我定义的IO指针ABC 访问时用*LedDisp[0],*LedDisp[0]是0x8000的char数据 我这样用好像不好使,各位大虾可以给我一些成功经验吗? |
|
|
沙发#
发布于:2002-03-05 21:10
用宏定义
如:#define IOBASE ((unsigned char*) 0x2a000L) 定义了一个基地址0xa000 可以用 unsigned char var; *IOBASE=var; var=*IOBASE; |
|
|
板凳#
发布于:2002-03-07 11:15
#include <absacc.h>
#define IOBASE XBYTE [0xa000] 可以用 unsigned char var; *IOBASE=var; var=*IOBASE; |
|
地板#
发布于:2002-03-07 18:25
我上面说错了,你定义的是常数指针.
应该为如下: #define IOBASE ((unsigned char*) 0x20000L) IOBASE[0x8000]=100; 就是对是地址是0x8000的char数据赋值为100 以上0x20000L的含义为指向xdata零地址的指针 0x8000为偏移 |
|
地下室#
发布于:2002-03-17 13:21
#define IOPART XBYTE[020000]
|
|
5楼#
发布于:2002-03-25 11:36
我上面说错了,你定义的是常数指针. 0x20000是指向xdata零地址的指针,到底是怎么回事? |
|
6楼#
发布于:2002-03-26 23:16
[quote]我上面说错了,你定义的是常数指针. 0x20000是指向xdata零地址的指针,到底是怎么回事? [/quote] 既然说是访问IO口数据,当然是当前访问的IO口地址,你是真不知道还是假的? |
|
7楼#
发布于:2002-05-19 12:34
P0等可以直接用,P1。1应该是定义sbit P11=P1^1;然后P11就是了。
|
|
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 . . . 建议使用第一种形式,速度要快很多。 |
|
|