四川信托兑付危机:关于51的data bdata idata xdata的理解1

来源:百度文库 编辑:偶看新闻 时间:2024/04/27 17:20:28

关于51的data bdata idata xdata的理解

AVR与C51单片机技 2010-06-08 15:47:56 阅读175 评论0   字号: 订阅


先看一段单片机的说明:
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的扩展内存
那有什么区别呢?
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个字节,还可以叫pdata,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG,建议少用。但也有他的优点,具体用法属于中级问题,这里不提。

建议能放data区尽可能放在data区!实在放不下就放idata区,没办法时再用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个输出状态