AT89S52在KEIL中如何设置?

AT89S52的RAM为256字节,但是为什么在编程中使用的变量不能超过128字节呢(超过编译就会出错)?
哪位高手知道请指点!!
谢谢!!

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;

供参考。
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-07-18
256字节分成两个区的,分别给不同类型的变量
分为高低各128字节,不能混着用的
随便找个单片机的书都有写

如何在keil 4元件库里添加AT89S52
1、点击菜单“Project”2、点击“Options for Target '工程名'”3、选择“Device”4、选择AT89S52,如图所示:

AT89S52在KEIL中如何设置?
在KEIL中,使用 DATA,IDATA等关键字定义变量的访问方式 DATA :直接寻址方式,亦是KEIL的默认设置 IDATA:间接寻址方式,可以访问整个256字节RAM空间 由上,可以把你程序中的一些访问不是很频繁的变量,改为以间接寻址方式访问,比如: unigned char idata temp;供参考。

怎么在keil中添加文件???最好有一步一步的步奏,如下:
选择CPU型号,如AT89S52等;出现你问题中的界面,但是里面还没有添加文件。那么接下来就是添加文件。(1)添加文件前,需要新建文件。新建的文件会涉及到.c .h .asm等格式的代码文件。(2)新建好的文件,需要先保存,并且需要手动添加文件的后缀.c .h .asm等。(3)保存完文件,然后将文件添加到工...

怎么在keil中添加文件???最好有一步一步的步奏,如下:
选择CPU型号,如AT89S52等;出现你问题中的界面,但是里面还没有添加文件。那么接下来就是添加文件。(1)添加文件前,需要新建文件。新建的文件会涉及到.c .h .asm等格式的代码文件。(2)新建好的文件,需要先保存,并且需要手动添加文件的后缀.c .h .asm等。(3)保存完文件,然后将文件添加到工...

单片机的问题!我使用的是AT89S52单片机,使用KEIL开发程序找不到对应的A...
就选c51一样,用到s52的特殊功能寄存器如果c51头文件里面没有声明的话自己声明就可以用了,stc型号这些都一样,用汇编的话更不用理会了

keil 4可以直接给at89s52烧录程序吗?要不然该怎么烧?
不可以的,需要专用软件。你买ATMEL芯片的时候肯定有说明,一般用easy51pro这个就行。

C51(AT89S52)中哪个函数可以把浮点数转换成字符串?如果没有,麻烦帮忙...
include <stdio.h> char buf[100];float pi = 3.14159;sprintf(buf,"%f\\n",pi);第一个参数是保存字符串的指针,第二个是保存格式(与printf的格式是一样的,你可以自行决定),第三个是具体的变量。这个函数的说明在KEIL的HELP菜单中,你查找sprintf就可以了,属于Keil的库之一。

如何解决keil 4软件中无法向源组添加文件的问题?
选择CPU型号,如AT89S52等;出现你问题中的界面,但是里面还没有添加文件。那么接下来就是添加文件。(1)添加文件前,需要新建文件。新建的文件会涉及到.c .h .asm等格式的代码文件。(2)新建好的文件,需要先保存,并且需要手动添加文件的后缀.c .h .asm等。(3)保存完文件,然后将文件添加到...

keil uvision4 没有at89s52 怎么办
你可能安装错了软件,keil uv4其实是有两个的,一个叫MDK,是给arm的,我现在是用来写stm32f103ve的,另一个叫c51,是51单片机的,你应该要装keil uv4 c51,希望能帮到你。

AT89S52有几个定时器,C中如何调用,头文件怎么写
B、设定相应的定时计数初值;比如TH0=TL0=253;等 C、如果使用中断处理定时\/计数器的溢出,则应设置允许其中断。比如ET0 = 1等。D、根据需要启动定时器。比如TR0 = 1。E、如果需要,应编制相应的中断服务函数处理定时中断,如:void Timer0(void) interrupt 1 { ...} ...

相似回答