说一说学51时候躺过的坑——bit和sbit的区别

2023-01-06  

什么是bit和sbit?他们有什么区别?

在刚学51单片机的时候刚看到这个两个东西的时候就是一脸懵逼,脑子里面第一反应就是,这是什么鬼啊,C语言里面没说过啊,于是去B站看了51单片机视频教程,终于知道了这是一种数据类型,类似于int、float一样,但是某天自己写代码使用到的时候就一脸懵逼了,如下面函数返回值的类型应该怎么决定?为什么必须要这样?

函数返回值是应该这样写呢?

还是应该这样写?

于是,好奇的我两种情况都试了试,但是事实却是试试就逝世

试第二种的时候编译器报错了

这又是什么情况?难度两个不一样吗?

于是查了一下资料


bit和sbit都是C51扩展的变量类型。

bit

bit编译时分配空间

sfr(特殊功能寄存器)的bit。SFR是系统指定的内存地址。

bit 动态分配的,有编译器来指定内存地址。

bit 可以在外部或内部定义。

bit和int char之类的差不多,只不过char=8位, bit="1位而已"。都是变量,编译器在编译过程中分配地址。除非你指定,否则这个地址是随机的。这个地址是整个可寻址空间,RAM+FLASH+扩展空间。bit只有0和1两种值,意义有点像Windows下VC中的BOOL。

bit是编译器在的可寻址区分配的一个位变量,是不定的,不是绝对地址目标。

sbit

sbit 只能在外部定义全局变量。

sbit 要在最外面定义,就是说必须定义成外部变量.sbit定义的是SFR(特殊功能寄存器)的

bit

sbit更像是类型定义,不像是变量定义。

sbit: 指示说明性说明

所有可位寻址的位都可由sbit指定,这包括可位寻址区和SFR中的位。

sbit是对应可位寻址空间的一个位,可位寻址区:20H~2FH。一旦用了sbi xxx = REGE^6这样的定义,这个sbit量就确定地址了。sbit大部分是用在寄存器中的,方便对寄存器的某位进行操作的。

sbit位寄存器是可位寻址的绝对地址目标,定义后编译器是不会改变位置的。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。