单片机sfr和sbit有什么区别

如题所述

  1.bit和sbit都是C51扩展的变量类型。
bit和int
char之类的差不多,只不过char=8位,
bit=1位而已。都是变量,编译器在编译过程中分配地址。除非你指定,否则这个地址是随机的。这个地址是整个可寻址空间,RAM+FLASH+扩展空间。bit只有0和1两种值,意义有点像Windows下VC中的BOOL。
sbit是对应可位寻址空间的一个位,可位寻址区:20H~2FH。一旦用了sbi
xxx
=
REGE^6这样的定义,这个sbit量就确定地址了。sbit大部分是用在寄存器中的,方便对寄存器的某位进行操作的。
  2.bit位标量
bit位标量是C51编译器的一种扩充数据类型,利用它可定义一个位标量,但不能定义位指针,也不能定义位数组。它的值是一个二进制位,不是0就是1,类似一些高级语言中的Boolean类型中的True和False。
  3.sfr特殊功能寄存器
sfr也是一种扩充数据类型,点用一个内存单元,值域为0~255。利用它可以访问51单片机内部的所有特殊功能寄存器。如用sfr
P1
=
0x90这一句定P1为P1端口在片内的寄存器,在后面的语句中我们用以用P1
=
255(对P1端口的所有引脚置高电平)之类的语句来操作特殊功能寄存器。
sfr
P1
=
0x90;
//定义P1
I/O
口,其地址90H
sfr
关键定后面是一个要定义的名字,可任意选取,但要符合标识符的命名规则,名字最好有一定的含义如P1
口可以用P1
为名,这样程序会变的好读好多.等号后面必须是常数,不允许有带运算符的表达式,而且该常数必须在特殊功能寄存器的地址范围之内(80H-FFH),具体可查看附录中的相关表.
sfr
是定义8
位的特殊功能寄存器而sfr16
则是用来定义16
位特殊功能寄存器,
如8052
的T2
定时器,可以定义为:
sfr16
T2
=
0xCC;
//这里定义8052
定时器2,地址为T2L=CCH,T2H=CDH
温馨提示:答案为网友推荐,仅供参考