keil里 EDA中國門戶網(wǎng)站4z AiB f*X U ^
/*--------------------------------------------------------------------------
)B-q d,r#V q:K B0ABSACC.H EDA中國門戶網(wǎng)站.X0D ~ M _;H+L H
EDA中國門戶網(wǎng)站,L A$`w5L'p }9p
Direct access to 8051, extended 8051 and Philips 80C51MX memory areas.
j @ ^ ] t2s {:m0Copyright (c)
1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
,|&n*h&u A J4?9c0All
rights reserved. EDA中國門戶網(wǎng)站 _s | c#]#Lm-I \
--------------------------------------------------------------------------*/ EDA中國門戶網(wǎng)站 [ y p)_.g Y(W4L
k o H \9T Z o C0#ifndef
__ABSACC_H__
$k4{1T*F I d l(N)B v/a0#define
__ABSACC_H__ EDA中國門戶網(wǎng)站 H N#z*R a,g F
P.`3u R a \ q o @0#define CBYTE
((unsigned char volatile code *) 0)
h9G v ~'M0#define DBYTE
((unsigned char volatile data *) 0)
{1L l!['Y7L4q0#define PBYTE
((unsigned char volatile pdata *) 0) /**/
W O%P j8~ b0#define XBYTE
((unsigned char volatile xdata *) 0) /*外部RAM*/EDA中國門戶網(wǎng)站2Y z b @-j \
u:t3O![ z.n4B0#define CWORD
((unsigned int volatile code *) 0) EDA中國門戶網(wǎng)站8N n ~ S%| W V
#define DWORD ((unsigned int volatile data *) 0)
$G A T T ^"a(?0#define
PWORD ((unsigned int volatile pdata *) 0) EDA中國門戶網(wǎng)站 Y W l(J ] U7}
#define XWORD ((unsigned int volatile xdata *) 0) EDA中國門戶網(wǎng)站"G6b l a"E7M c$o
` N g f1q.S q0#ifdef __CX51__ EDA中國門戶網(wǎng)站$W;l'o3p \ @ j6X
#define FVAR(object, addr) (*((object volatile far *) (addr))) EDA中國門戶網(wǎng)站 J$[ p._(r q A
#define FARRAY(object, base) ((object volatile far *) (base)) EDA中國門戶網(wǎng)站 T [H @0m2D%t6v%t A9z D
#define FCVAR(object, addr) (*((object const far *) (addr)))
0t+o J h P.I ^0#define
FCARRAY(object, base) ((object const far *) (base))
DQQ x'K J4v O f0#else
4\2j b @m _0#define FVAR(object,
addr) (*((object volatile far *) ((addr)+0x10000L)))
&l D q:u \0#define
FCVAR(object, addr) (*((object const far *) ((addr)+0x810000L)))
x k ?'q r F0#define
FARRAY(object, base) ((object volatile far *) ((base)+0x10000L))
-a9y!j:Z ~ R J5?0#define
FCARRAY(object, base) ((object const far *) ((base)+0x810000L))
n%i Z:b%L O J0#endif
.X%o3Q4L ?(c.Z A:P }$h0#endif
}+D,L A U a0其他的你到編譯器預(yù)定義頭文件里找好了
/**********************************CBYTE********************************/
Q:
absacc.h里的宏
7H+o!v4b i3J m7p0#define CBYTE
((unsigned char volatile code *) 0)
$a,[ U [2L v R P*l4n0value =
CBYTE[0x002];
D e2K R g | z @(Q0這句該如何理解?
A1:EDA中國門戶網(wǎng)站 V,G N J S2z i
結(jié)果是將程序空間(code)地址為0x002單元的內(nèi)容放到變量value中。EDA中國門戶網(wǎng)站 \1m w x'_;u i-r Z
A2:
替換一下考慮
N m'J a r0value = ((unsigned char volatile *) 0)[0x02];EDA中國門戶網(wǎng)站 -U5a I9x,y i
替換一下考慮
t5G kO F7`*r _0unsigned char volatile *CBYTE = 0/*NULL*/;EDA中國門戶網(wǎng)站 ] z*@ M7s-}%o.K f P y
這里CBYTE[0x02] = 1和*(CBYTE+0x02) = 1等價EDA中國門戶網(wǎng)站,[{ @ j*Z;U9x
` I {.M2K8s Q;|0#define CBYTE ((unsigned char volatile code *) 0)
n y0X:n `0是把CBYTE是指針,即code地址0在這里,數(shù)組和指針是可以互用的。CBYTE[0x02]也就是*(CBYTE+0x02),都是指的是地址0x02里的內(nèi)容,并是unsigned char 類型的。
#define CBYTE ((unsigned char volatile code *) 0)
I x e O f E J ?0考慮下這個define定義的內(nèi)容EDA中國門戶網(wǎng)站$N^
J-s+Y:X J
1、把CBYTE定義成一個0(0);EDA中國門戶網(wǎng)站 ^ Y L f.` [ E8R
2、這個0是個地址(*號);EDA中國門戶網(wǎng)站 o G J$J Z$R m"~
E
3、這個地址是代碼段的地址(code);
z M2H l2C04、并是unsigned char類型的地址(unsigned char);EDA中國門戶網(wǎng)站2p)H"z)E'S$Q0o$a b)w
5、并這個地址的內(nèi)容是易逝性的(volatile);EDA中國門戶網(wǎng)站 P v O } r
-i q y D Y+N6? p'u6}0] X0本質(zhì)上是定義了一個地址(CBYTE )。指針就是地址。地址是內(nèi)存的序號。
%f | i+_&c F*]7m$|0指針通過指向內(nèi)存的序號訪問內(nèi)存。替換點是都是地址。
內(nèi)部的括號用來強制類型轉(zhuǎn)換用的,外部的的括號用來防止宏定義展開時錯誤的用法EDA中國門戶網(wǎng)站 l{0A _)B4Y$Z;D ~ [ {
再如:
#define COM8255 XBYTE[0X060FF]
//后面若出現(xiàn)COM8255,則單片機(jī)端口P0和P2聯(lián)合輸出0X060FF絕對物理地址(地址指向82C55指令寄存器)
#define
PA8255 XBYTE[0X000FF]
//后面若出現(xiàn)PA8255,則單片機(jī)端口P0和P2聯(lián)合輸出0X000FF絕對物理地址(地址指向82C55的A組端口寄存器)
#define
PB8255 XBYTE[0X020FF]
//后面若出現(xiàn)PB8255,則單片機(jī)端口P0和P2聯(lián)合輸出0X020FF絕對物理地址(地址指向82C55的B組端口寄存器)
#define
PC8255 XBYTE[0X040FF]
//后面若出現(xiàn)PC8255,則單片機(jī)端口P0和P2聯(lián)合輸出0X040FF絕對物理地址(地址指向82C55的C組端口寄存器)
EDA中國門戶網(wǎng)站,@-w Q d }x
/*************************************************************************************/