內部資料記憶體(RAM) 0x80~0xFF,只能以間接定址方式存取
特殊功能站存器(SFR) 0x80~0xFF,只能以直接定址方式存取
(以上雖然地址重疊,但兩者是完全獨立的硬體空間)
資料型態:bit
●個位元變數宣告,儲存在內部資料記憶體的0x20~0x2F中。
資料型態:sbit(有兩種用途)
●存取內部資料記憶體(RAM)的可位元定址區0x20~0x2F。
●存取特殊功能暫存器(SFR)0x80~0xff中的可位元定址暫存器。
下圖左邊黑框是特殊功能暫存器(SFR)之可位元定址暫存器,其餘只能以位元組定址方式存取。
資料型態:sbit(有兩種用途)
●存取內部資料記憶體(RAM)的可位元定址區0x20~0x2F。
●存取特殊功能暫存器(SFR)0x80~0xff中的可位元定址暫存器。
下圖左邊黑框是特殊功能暫存器(SFR)之可位元定址暫存器,其餘只能以位元組定址方式存取。
圖片來源
程式本身是放在ROM的區域(執行中是不會改變的),變數跟暫存器放在RAM(執行中可以改變)
SFR以RAM做為暫存器(Register),因為暫存器它的資料是變動性的,所以要用RAM才可以
ABSACC.H 提供了下列方便的宏(Macro)定義。
#define CBYTE ((unsigned char volatile code *) 0)
#define DBYTE ((unsigned char volatile data *) 0)
#define PBYTE ((unsigned char volatile pdata *) 0)
#define XBYTE ((unsigned char volatile xdata *) 0)
#define CWORD ((unsigned int volatile code *) 0)
#define DWORD ((unsigned int volatile data *) 0)
#define PWORD ((unsigned int volatile pdata *) 0)
#define XWORD ((unsigned int volatile xdata *) 0)
解說:
XBYTE為指向xdata地址空間unsigned char數據類型的指針,指針值為0 這樣,可以直接用XBYTE[0xnnnn]或*(XBYTE+0xnnnn)訪問外部RAM了。
例如:
#include<absacc.h>
rval=CBYTE[0x0004] //指向程式存儲器0004H地址
rval=XBYTE[0x0004] //指向外部RAM的0004H地址
#8051#C51#MCU#ROM#RAM#code#data#idata#bdata
沒有留言:
張貼留言