单片机的问题,关于KEIL和单片机的内存

sfr PO=0x80,这是头文件reg51.h中定义好的。
但是这个0x80表示的内存在单片机中到底是哪一部分呢?每次开关单片机这个内存都会变化吗?

这个问题的理解主要有两点:
1、单片机的特殊功能寄存器。
2、KEIL软件的sfr变量声明的用法。
sfr P0=0x80;
解释:
1、特殊功能寄存器中,0x80存储的是P0口的状态。
2、这个语句将P0定义为一个变量,其内容为特殊功能寄存器的0x80寄存器。
3、P0可以更改名字例如:sfr PORT0=0x80;这样在程序中使用的时候,PORT0的数据就是单片机P0口的数据。

其详情请参考《Keil Software – Cx51 编译器用户手册》的“特殊功能寄存器(SFR)”章节。
下面做简单介绍,若要文档请邮箱联系。
1、8051 系列微处理器提供一个特别的存储区作为特殊功能寄存器 SFR。 用在程序
中的 SFR 可控制计时器 、计数器、 串口、 并口 和外围设备。 SFR 的地址从 0x80 到
0xFF, 可以以位、 字节 和字访问。
2、sfr
SFR和别的C变量一样声明。 唯一的不同点是数据类型是sfr而不是char或int。
例如:
sfr P0 = 0x80; /* port-0,address 80h */
sfr P1 = 0x90; /* port-1,address 90h */
sfr P2 = 0xA0; /* port-2,address 0A0h */
sfr P3 = 0xB0; /* port-3,address 0B0h */
P0、 P1 、P2 和 P3 是声明的 SFR 名。 sfr 变量的名称和别的 C 变量一样定义
在 sfr声明中可用任何符号名。
在等号 = 后指定的地址必须是一个常数值, 不允许带操作数的表达
式。 传统的 8051 系列支持 SFR 地址从 0x80 到 0xFF。 PHILIPS 80C51MX 提供
一个附加扩展的 SFR 空间 地址范围是 0x180 到 0x1FF。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-03-11
51单片机 0-0x7F是内存,0x80-0xFF不是真正意义上的内存,是特殊寄存器(SFR)区,这里有21个SFR,P0是其中之一,它是与单片机的引脚相连的,即P0口。
关于上电后的值,每个SFR都有复位默认值,不会变。
这21个SFR大多数与编程关系密切,不把它们搞清楚,你就没法编程序,每一本书上都讲得很详细。找一本书好好读一读,祝你成功!本回答被提问者采纳
第2个回答  2012-03-11
0x80位于51单片机的高128字节直接寻址空间,也就是SFR(特殊功能寄存器)。
每次上电复位后该地址的数值会自动置为0xFF。
第3个回答  2012-03-13
就是80H这个存储单元。每次开机时默认是FFH。
相似回答