首先,端口引脚是和寄存器相映射的,比如,在你这里,p1端口,映射的地址是0x90,给0x90这个地址写一个8位的数据,就是相应的给p1端口的8个引脚设置相应的电平。比如,你给P1写0xff,那么,从0x90到0x97里面的数据都是1,对应的管脚,p1.0到p1.7都是高电平。
那么,有些时候需要单独对某个管脚操作,怎么办呢?只要对某个管脚对应的那个寄存器的位来进行赋值即可。对于你这里面的情况,估计是51单片机,p1.1引脚的地址就是0x91,(因为p1端口的总起始地址是0x90),所以,只要对0x91来赋值就行了,但程序里总用0x91会比较难看,所以,给他取个代号,p1_1,(sbit p1_1 = 0x91就是起代号,当然,sfr 也是起代号,不过一个是一组引脚一个是一个引脚,所以命令不一样)
51单片机是可以位寻址的,所以有这些命令,某些别的单片机,有的不能位寻址,要对位操作就比较麻烦。还有的可以位寻址,但计算方式比较复杂,不象51这样, p1.1就是0x91,p1.2就是0x92了。
可以这么认为,sfr是声明特殊功能寄存器的(而普通的不能)。有8位和16位声明。0x90是特殊功能寄存器P1在内部RAM中分配的固定地址,这时的P1就代表P1口的地址了(8位),不会改变的。P0(0X80),P2(0XA0),P3(0XB0)。因为P1口是8位的(8位为一个字节),0x90是此字节的起始地址。此字节的范围为(0x90~0x97)