sfr是用于定义特殊功能寄存器的。
sfr P0=0x80是指整一个P0(P0^0-P0^7)都在塌备0x80地址。
你仔细看另外的特殊寄存器的地址定义啊,一看就明白了。如下取了一小段:
#ifndef __REG52_H__
#define __REG52_H__
/* BYTE Registers */
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
……
以上,看到了没有?团孝毁
0X81是SP的地址,0X82是DPL的地址。
如果你再仔细点,就不会有这种疑问了,呵呵。
继续加油,祝你更大的进慎纳步!
不对。
0x80代表P0这个则汪迹寄存器。8位单陵洞片机每个寄存器孙并是8位的。P0^0代表对0x80的第一位操做也就是这个寄存器的第一位操作。
(用程序验证 sfr P0_0=0x81
main()
{
P0_0=各种操作
…
}
)
是指P0寄存器的地址在0x80。与位寻址无直接关联。
sfr是用于定义特殊功能寄存器的。
因为你查SFR(特殊功能寄存器)的名称及主要功能表时,隐游P1端口所对应的字节地址就灶枣销是0x90,在寄存器岩睁或存储器中一个单元即一个地址含有8个字节,所以以P1端口为例,一整个P1的8位都在0x90地址上。
你知道0x80对应的二进制嘛,就是从0-7每个位赋相对的二进制数