關于51的data bdata idata xdata的理解
先看一段單片機的說明:
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
這里說有256Byte的片上內存,768Byte的擴展內存
那有什么區(qū)別呢?
1.單片機內部直接訪問(其它都是直接在內部)只有128Byte
這一部分我們叫data(大小:128byte 地址:0×00-0×7F)
2.這其中有一部分是可以位尋址的,比如我們的P0口,我們就可以直接寫P0_1來操作
這一部分我們叫bdata
3.上面不是寫有256byte的片上內存嗎?那不是還有128byte嗎?
對!這部分叫idada(大小:256byte 地址:0×00-0xFF),所以它和dada是重合的
那是不是全部那256byte我們都直接寫成idada呢!這樣簡單些! 這也確實可以,但dada和idata的訪問指令不 一樣,所以效率不一樣!這處你自己看著辦了!
4.再就外面的xdata了(大小:64K 地址:0×00-0xFFFF),就是上面說的768 Bytes XRAM!
5. 其實外部擴展RAM的低256個字節(jié),還可以叫pdata,地址出現(xiàn)在A0-A7的上時讀寫,用movx ACC,@Rx讀寫。這個比較特殊,而且C51好象有對此BUG,建議少用。但也有他的優(yōu)點,具體用法屬于中級問題,這里不提。
建議能放data區(qū)盡可能放在data區(qū)!實在放不下就放idata區(qū),沒辦法時再用xdata
如:
unsigned char data a;//最常用的
unsigned char idata arr_a[24][7];//測試結果存放 前3片
unsigned char xdata arr_b[32][7];//測試結果存放 后4片
unsigned char code test_now[8]={0×80,0×40……};//8個輸出狀態(tài)