首先,地址的作用只有一个,就是用来寻址。
其次,51单片机的的片内寄存器都是可以字节寻址的。
字节地址就是用来寻址一个字节的内容,和位地址相对应,位地址就只能寻址一个位(bit)。在单片机指令中寻址任何一个字节都需要字节地址,寻址任何一个位都需要位地址。所谓的IP、IE不过是我们给这个寄存器取了另外一个名字而已。如:MOV IP,#00H 和 MOV B8H,#00H 这两条语句是一样的效果。另外,从这些寄存器的使用上来说,IP、IE等特殊功能寄存器既可以字节寻址也可以位寻址,是同样的效果。比如:SETB PX0;和 MOV IP,#01H;是一样的,都是将IP的第0位即PX0置1。不同的是,字节寻址的时候是8位一起操作的,会对其它的位赋值,有时不想改变其它位的值,就用位寻址。
所以,字节地址是用来寻址字节的,位地址是用来寻址位的。就这样。另外,IP也好,IE也好,也都是寄存器,要访问它们也需要地址(访问字节用字节地址,访问位用位地址),不同的是它们用来对处理器进行配置,我们给它们取了一些特定的名字而已。
51单片机因为是8位机,其每一个寄存器的位数也是8位的,也就是一个字节的长度。32位机的寄存器是32位的,也就是一个字的长度。每一个寄存器对应的独立的物理地址(就像一栋楼房里面,每一个房间都有唯一的门牌号一样。而每间有八张床,床上有人就为1,没人就为0)。
字节地址就是这个寄存器的首地址,用c语言编程时,在头文件(比如reg52.h)里有定义,比如sfr IP= 0xB8我们就可以直接用IP这个符号表示IP寄存器,我们给IP寄存器赋值的时候,我们就把这个8位二进制数存入物理地址以0xB8开始的一个字节的长度RAM中。
如果这个寄存器还可以位寻址,比如sbit PX0 = IP^0;(在reg52.h中已有定义),我们可以控制IP寄存器8位中的任何一位,给它1或者给它0;而有些寄存器不能位寻址,我们只能给整个寄存器赋值(8位都赋值)
那个是位地址,用来进行位操作的,就拿IE来说吧,他是一个中断控制寄存器,他的第7位是EA这位就是中断的总开关,比如你想关所有的中断就可以让EA=0, 当然也可以写成是IE=0x80h,这样就会影响到其他位,而且速度也没有位操作的快!位操作就是你可以单独的把其中8位当中的任何一位置1或清0,而不影响其他位!
IP是程序地址寄存器,就是保存现阶段程序执行到了第几步了;
IE是中断标识,判断中断的类型允许。
我的理解,我觉得详细的还是看书吧