在单片机中,有位寻址概念,单片机有多组IO口组成, 每组IO口对应着一个寄存器,通过代码给寄存器赋值从而来控制IO口的输入输出电平,达到控制单片机各部件的运行。
如上图,以8位单片机为例。sfr标识符定义的如ACC、PSW等等都是特殊的寄存器, 等号后面是分配给寄存器的地址,两位十六进制,由8个二进制位组成。
而我们熟知的IO口就是P0-P3,一共四组。每组寄存器地址都是八位,每一位又代表了一个具体的IO口,一般情况下我们直接对一组寄存器赋值,就是字节寻址,一个字节等于8位,列如:
在P3这组IO口中,假设P3.0连接了LED那么,从右边低位开始数,第一个就是P3.0, 0代表低电平,那么灯就会被点亮。
这种对寄存器地址整个进行赋值的方式可能会影响其他IO口的输出,所以我们可以对具体的一个位进行寻址,在这里可以用 sbit 变量名 = IO组 ^ IO口号, 如图:
上面我们假设P3.0口连接了LED,那么我们这里通过位寻址的方式找的P3.0口,并将值改为1,1为高电平,LED灯灭。这就是位寻址。
总结:
字寻址 给一个寄存器地址进行 整体赋值
位寻址 则是找到寄存器地址中的 一位进行赋值