[閒聊] KeilC與8051 - 記憶體與資料
眾所週知的,8051具有兩百多個指令,其中有很大一部份是作為資料轉移之用:
mov A, Rn
mov A, direct
mov A, @Ri
mov A, #data
mov Rn, A
mov Rn, direct
mov Rn, #data
mov direct, A
mov direct, Rn
mov direct, @Ri
mov direct, #data
mov @Ri, A
mov @Ri, direct
mov @Ri, #data
mov DPTR, #data16
movc A, @A+DPTR
movc A, @A+PC
movx A, @Ri
movx @Ri, A
movx A, @DPTR
movx @DPTR, A
push direct
pop direct
xch A, Rn
xch A, direct
xch A, @Ri
xchd A, @Ri
這些指令當中,絕大部份是用來做為記憶體轉移之用的(mov, movx, xch, xchd),
而其他指令可以作為讀取程式碼段使用(movc)以及存取程式碼之用(push, pop)
8051在一開始設計之初,其指令集概念為「正交」,亦即希望所有的事情都有其對
映的單一指令,所以我們會看到有四個指令用來將資料存入A,由於8位元最多可以
定址256bytes,所以8051將低128bytes作為一般記憶體,由於SFR佔據了0x80~0xFF
的位址,所以0x80~0xFF的記憶體則必需使用間接記憶體存取。
而16位元的資料則利用DPTR這兩個八位元的暫存器來存取。
由於DPTR是16位元,所以8051最大可以支援64K的外部記憶體(0x0000~0xFFFF)及ROM。
251則利用一個8位元作為分頁,所以最大可以支援256*64K=16M的外部ROM。
因此若我們想要去存取記憶體,可以利用mov的指令,而若想讀取程式的資料,則必
需透過movc這個指令。同樣的,要讀取外部記憶體就使用movx。
翻開keilC的help檔 (C51.pdf,位於安裝目錄下)
第三章的部份說明了關於資料型態的問題:
code Program memory (64 KBytes); accessed by opcode MOVC @A+DPTR.
data Directly addressable internal data memory; fastest access to
variables (128 bytes).
idata Indirectly addressable internal data memory; accessed across the full
internal address space (256 bytes).
bdata Bit-addressable internal data memory; supports mixed bit and byte
access (16 bytes).
xdata External data memory (64 KBytes); accessed by opcode MOVX @DPTR.
far Extended RAM and ROM memory spaces (up to 16MB); accessed by user
defined routines or specific chip extensions (Philips 80C51MX,
Dallas 390).
pdata Paged (256 bytes) external data memory; accessed by opcode MOVX @Rn.
因此若我們想要利用指標去讀取ROM的值,就必需將指標宣告成code的型態:
unsigned char code *pt_rom;
unsigned char tmp;
pt_rom = 0x0000;
pt_rom += 0x7788;
tmp = *pt_rom;
如此tmp的內容就是位址0x7788的資料了。
--
我只是個想賺 P 幣的迷途小羔羊
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.59.230.137
→
02/10 01:17, , 1F
02/10 01:17, 1F
※ 編輯: ruemann 來自: 61.59.230.137 (02/10 01:28)
推
02/10 01:43, , 2F
02/10 01:43, 2F
→
02/10 12:07, , 3F
02/10 12:07, 3F
推
02/10 12:59, , 4F
02/10 12:59, 4F
→
02/10 13:00, , 5F
02/10 13:00, 5F
推
02/11 23:29, , 6F
02/11 23:29, 6F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 2 篇):
ASM 近期熱門文章
PTT數位生活區 即時熱門文章