AT89S52在KEIL中如何设置?
AT89S52的RAM为256字节,但是为什么在编程中使用的变量不能超过128字节呢(超过编译就会出错)?哪位高手知道请指点!!谢谢!!...
AT89S52的RAM为256字节,但是为什么在编程中使用的变量不能超过128字节呢(超过编译就会出错)?
哪位高手知道请指点!!
谢谢!! 展开
哪位高手知道请指点!!
谢谢!! 展开
2个回答
展开全部
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;
供参考。
也就是说高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;
供参考。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询