关于51单片机的IO接口的地址与赋值大小理解
前提了解
提示:我们需要回顾C语言的类型定义,如int aa=1;代码编译运行的时候计算机运行到int aa=1,它会进行下列操作:首先计算机找到一片4字节大小的地方,然后将这个地方的地址赋值给aa,并且将1保存在这个有着4字节大小的地址里面。
关于51单片机的IO接口的地址与赋值大小理解
在51单片机的头文件reg51.h里面我们可以看到sfr P1 = 0x90。
首先我们需要理解SFR:SFR也是一种扩充数据类型,占用一个内存单元,值域为0~255。利用它可以访问51单片机内部的所有特殊功能寄存器。如用sfr P1 = 0x90这一句定P1为P1端口在片内的寄存器,在后面的语句中我们可以用P1 = 255(对P1端口的所有引脚置高电平)之类的语句来操作特殊功能寄存器。
sfr—此类型变量可以访问指定的8位特殊功能寄存器,地址范围为0x80~0xFF。定义格式:sfr 变量名=变量地址。
一个内存单元:一个字节大小
特殊功能寄存器:寄存器就是我们保存数据的地方,不过他是以0,1这样的类型保存。为什么说特殊呢?因为它是与我们的51单片机的P0,P1,P2等IO接口和其他设计有关联的。
sfr P1=0x90:定义一个sfr类型的P1的变量,并将0x90这个地址赋值给P1。
下面是给P1变量赋值,
P1=0xfe(16进制)=254(10进制)=11111110(2进制)
为什么说这些寄存器有特殊功能呢?看下图,给这个地址的赋值大小之后,会影响P1各个IO接口的高低电压。
其他赋值也一样,P1=0x01=1=00000001
通过给这些地址的寄存器赋值,会影响IO接口的高低电压,所以说这些寄存器是特殊功能寄存器。
其他单片机定义
bit—定义位变量,定bai义位变量时可以为du变量赋值,但不能指zhi定变量的地址。定义格式:bit 变量名=变量值。
sbit—此类型变量只要用于访问可位寻址的特殊功能寄存器中的某个位。定义格式:sbit 变量名=位地址;sbit 变量名=SFR地址^位序号;sbit 变量名=sfr16变量^位序号。
sfr—此类型变量可以访问指定的8位特殊功能寄存器,地址范围为0x80~0xFF。定义格式:sfr 变量名=变量地址。
sfr16—此类型的变量可访问16为特殊功能寄存器。定义格式:sfr16 变量名=变量地址。此处的变量地址为16位中的低8位地址,其地址范围为0x80~0xFF。通过sfr16变量读16位特殊功能寄存器时,先读低字节,后读高字节;写特殊功能寄存器时先写高字节,后写低字节。
第一次写有什么不对的地方,欢迎提出。有什么迷惑的地方也可以联系我,互相学习。