62256-32K字节.地址A0 – 14
硬件连接如下图
KEIL中可以直接定义,指明xdata
UCHAR xdata Cache_SRam[3000] = {0x00}; //缓存,预留3K字节
调用此数组的时候系统会自动进行地址分配P36,P37脚也会自动产生相应的读写控制信号,因此只要在定义的时候指明XDATA,后面使用就和使用普通DATA区的内存一样使用.
经测试KEIL会默认从0X0000开始分配地址.
如下:
UCHAR xdata Cache_SRam[3000] = {0x00}; //缓存,预留3K字节
UCHAR xdata *SRAM_ADD1 = 0X00; //指定0X00地址
…
Cache_SRam[0] = 0X77;
); //数据低位
Cache_SRam[0]
send_char_com(
); //数据高位
*SRAM_ADD1
send_char_com(
串口调试助手,接收到的 Cache_SRam[0 ]与 *SRAM_ADD1 数据一致.
如下图:
//● int型数值赋给char型变量时,只保留其最低8位,高位部分舍弃。
再测试如下代码:
/****************/
UCHAR xdata Cache_SRam[3000] = {0x00}; //缓存,预留3K字节
UCHAR xdata *SRAM_ADD1 = 0X00;
UCHAR xdata SRAM_DATA2 = 0X66;
UCHAR xdata SRAM_DATA3 = 0X66;
UCHAR xdata SRAM_DATA4 = 0X66;
UCHAR xdata SRAM_DATA5 = 0X66;
UCHAR xdata SRAM_DATA6 = 0X66;
/****************/
); //Cache_SRam数组的第一个数据
Cache_SRam[0]
send_char_com(
); //SRAM_ADD1指针地址所指向的数据
*SRAM_ADD1
send_char_com(
); //变量SRAM_DATA2的值
SRAM_DATA2
send_char_com(
); //Cache_SRam数组的首地址
send_char_com(
Cache_SRam
send_char_com( Cache_SRam + 2999 ); //Cache_SRam数组的尾地址
//指针SRAM_ADD1的值,即地址
);
send_char_com(
SRAM_ADD1
); //SRAM_DATA2的地址
send_char_com(
&SRAM_DATA2
); //SRAM_DATA3的地址
send_char_com(
&SRAM_DATA3
); //SRAM_DATA6的地址
&SRAM_DATA6
send_char_com(
TEST
send_char_com(0xee); //for
send_char_com(0xee);
send_char_com(0xee);
测试结果如下:
表明KEIL会自动分配XDATA区域的内存地址,有规律的递增.下载本文