關(guān)于51的data bdata idata xdata的理解
先看一段單片機(jī)的說(shuō)明:
8051-based microcontroller with 6-clock High-Speed Core,
20 Mhz at 6 clks/cycle, 33 Mhz at 12 clks/cycle, Dual I2C, SPI,
PCA, 10 Interrupts/4 Priority Levels, 32K Bytes ISP/IAP FLASH,
256 Bytes on-chip RAM, 768 Bytes XRAM
這里說(shuō)有256Byte的片上內(nèi)存,768Byte的擴(kuò)展內(nèi)存
那有什么區(qū)別呢?
1.單片機(jī)內(nèi)部直接訪問(wèn)(其它都是直接在內(nèi)部)只有128Byte
這一部分我們叫data(大小:128byte 地址:0×00-0×7F)
2.這其中有一部分是可以位尋址的,比如我們的P0口,我們就可以直接寫(xiě)P0_1來(lái)操作
這一部分我們叫bdata
3.上面不是寫(xiě)有256byte的片上內(nèi)存嗎?那不是還有128byte嗎?
對(duì)!這部分叫idada(大小:256byte 地址:0×00-0xFF),所以它和dada是重合的
那是不是全部那256byte我們都直接寫(xiě)成idada呢!這樣簡(jiǎn)單些! 這也確實(shí)可以,但dada和idata的訪問(wèn)指令不 一樣,所以效率不一樣!這處你自己看著辦了!
4.再就外面的xdata了(大小:64K 地址:0×00-0xFFFF),就是上面說(shuō)的768 Bytes XRAM!
5. 其實(shí)外部擴(kuò)展RAM的低256個(gè)字節(jié),還可以叫pdata,地址出現(xiàn)在A0-A7的上時(shí)讀寫(xiě),用movx ACC,@Rx讀寫(xiě)。這個(gè)比較特殊,而且C51好象有對(duì)此BUG,建議少用。但也有他的優(yōu)點(diǎn),具體用法屬于中級(jí)問(wèn)題,這里不提。
建議能放data區(qū)盡可能放在data區(qū)!實(shí)在放不下就放idata區(qū),沒(méi)辦法時(shí)再用xdata
如:
unsigned char data a;//最常用的
unsigned char idata arr_a[24][7];//測(cè)試結(jié)果存放 前3片
unsigned char xdata arr_b[32][7];//測(cè)試結(jié)果存放 后4片
unsigned char code test_now[8]={0×80,0×40……};//8個(gè)輸出狀態(tài)