AT89S52有256字节片内数据存储器。高128字节与特殊功能寄存器重叠。
也就是说高128字节与特殊功能寄存器有相同的地址,而物理上是分开的。迹滑穗
当一条指令访问高于7FH的地址时,寻址方式决定 CPU 访问高128字节RAM 还是访问特殊功能寄存器空间。
正是单片机的上述硬件结构导致:
低128字节的RAM空间可以以“直接寻址”或“间接寻址”方式访问;
高128字节的RAM空间只能以“间接寻址”方式访问;
若以“直接寻址”方式访问一个位于高128字节的地址,其实访问的是单片机的特殊寄存器空间;
所以说,不是“变量不能超过128字节”,而是“可以以“直接寻址方式”访问的RAM空间不能超过128字节
在KEIL中,使用 DATA,IDATA等关键字定义变量的访问方式
DATA :直接寻址方式,亦让锋是KEIL的默认设置
IDATA:间接寻址方式,可以访问整个256字节RAM空间姿卜
由上,可以把你程序中的一些访问不是很频繁的变量,改为以间接寻址方式访问,比如: unigned char idata temp;
供参考。
256字虚宴节分成两个区的拆嫌,分别给不同类型的变量
分为高低各128字节,不能混着用的
随便找个单片机旅誉手的书都有写