51MCU内部有RAM,ROM,不同于8031。虽然现在的增强行51MCU的内部RAM,ROM或许现已很大的空间。但就技能而言,扩展RAM,ROM仍是需求学会的。
关于不同的规划方案需求,扩展或许依据以下任何一种规划:
A,只扩展RAM
B,只扩展ROM
C,扩展ROM,RAM
****************************总线扩展时,P2口是否可用做一般IO口************************************
这种扩展是依据总线扩展的,所以,P0P2口就现已不能够再做它用了(有网友供给信息,总线扩展P2还能够做一般IO口用,有两种或许:1,P2口复用,好像P1运用373锁存器。2,在总线扩展时,只用到了低地址总线,P2口未用到。就作为一般IO口运用。因为技能还不到位,不做谈论。)
*******************************************扩展RAM****程序************************************************
扩展RAM,在程序中界说的xdata类型 XBYTE类型等地址规模在外部RAM的变量,对其读写的进程。用C51言语编写程序,且运用总线扩展的RAM,则时序电路不必考虑,WR RD等信号由编译器/硬件主动完结。
**************************************编译器设置*****************************************
内部RAM:0x00~~0xFF
外部RAM:0x0000~~0xFFFF
RAM的地址虽重复,可是两个RAM是没有关系的,所以不会形成搅扰
运用了外部RAM,就在工程选项—off-chip xdata memory中设置 start:0x0000 size:0xFFFF(依据详细的RAM巨细设置size)。
*******************************扩展RAM时的变量定位及接连读取问题*********************************
ROM,RAM的扩展时,需求用到变量的肯定地址定位,函数定位等。
变量的肯定地址定位,是因为在程序中或许需求即时读取某个变量,但变量的类型或许是XDATA,存储在外部RAM中。这儿有两个办法:
1,用 _at_ 定位 关键字定位
unsigned char xdata xxx _at_ 0x1100//界说变量XXX数据类型xdata,方位0x1100
[memory_space]tepe variable_name _at_ constant;
***肯定地址的变量不能够被初始化;函数或BIT类型的变量是不能够被界说为肯定地址;
2,用 XBYTE 定位 宏界说 肯定地址拜访
#define CBYTE((unsigned char volatile code*)0)
#define DBYTE((unsigned char volatile idata*)0)
#define PBYTE((unsigned char volatile pdata*)0)
#define XBYTE((unsigned char volatile xdata*)0)
////////////////////////////////////////////////////////////////////////////
#define CWORD((unsigned int volatile code*)0)
#define DWORD((unsigned int volatile idata*)0)
#define PWORD((unsigned int volatile pdata*)0)
#define XWORD((unsigned int volatile xdata*)0)