引言:我们学习到这里的时候已经多多少少接触了sbit,sfr这些东西,前面也有一些简单的介绍,这里对bit、sbit、sfr、sfr_16这几种数据结构进行更加详尽的学习
1.bit和sbit
bit和sbit都是位类型,与int、float这些东西类似,是一种变量类型,这个变量类型的长度为1个二进制位,故取值范围是0~1,用于访问51单片机中的可寻址的位单元。
sbit的“s”代表special【特殊(状态寄存器)】,sbit和bit的区别:
说鬼话:用sbit定义的位变量必须与51单片机的一个可以寻址位单元或可位寻址的字节单元中的某一位联系在一起,在C51编译器编译时,其对应的位地址是不可变化的。
说人话:sbit是用于特殊寄存器的,例如I/O口这些
例如:
这里意思是给P34口取一个名字叫做C4,C4这个变量只有两个取值,0或者1,当C4位1是代表P34口为高电平,当C4位0是代表P34口为低电平。
2.sfr和sfr_16
sfr和sfr_16都是特殊功能寄存器型【SFR全称为:special function register(翻译为:特殊功能寄存器)】,也是一种变量类型,只能用于访问51单片机中的特殊功能寄存器数据。
sfr是单字节型特殊功能寄存器型,长度是一个字节(八个二进制位),故取值范围是0~255,利用它可以访问51单片机内部的所有特殊功能寄存器,例如:
这里意思是给P0I/O口的物理地址0x80取一个名字叫做P0,P0这个变量代表P00到P07七个I/O口。
sfr_16是双字节型特殊功能寄存器型,长度是两个字节(16个二进制位),故取值范围是0~65535,利用它可以访问51单片机内部的所有双字节特殊功能寄存器,例如51单片机里的定时器一和定时器二。
附表:
数据类型 | 长度 | 取值 |
unsigned char | 1字节 | 0~255 |
signed char | 1字节 | -128~+127 |
unsigned int | 2字节 | 0~65535 |
signed int | 2字节 | -32768~32767 |
unsigned long | 4字节 | 0~4294967295 |
bit | 1位 | 0~1 |
sbit | 1位 | 0~1 |
sfr | 1字节 | 0~255 |
sfr_16 | 2字节 | 0~65535 |