历史上的今天
返回首页

历史上的今天

今天是:2026年01月06日(星期二)

正在发生

2023年01月06日 | 说一说学51时候躺过的坑——bit和sbit的区别

2023-01-06 来源:zhihu

什么是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位寄存器是可位寻址的绝对地址目标,定义后编译器是不会改变位置的。


推荐阅读

史海拾趣

EPIGAP公司的发展小趣事

EPIGAP公司非常重视创新文化的建设。公司鼓励员工提出新的想法和创意,并为员工提供充分的支持和资源。此外,EPIGAP还积极引进和培养人才,建立了一支高素质、专业化的研发团队。这支团队在公司的发展历程中发挥了至关重要的作用,不断推动公司产品的升级换代和技术创新。

ARCOLECTRICSWITCHES公司的发展小趣事

在技术进步的基础上,ARCOLECTRIC SWITCHES公司积极拓展国内外市场。公司通过与各大电子厂商建立合作关系,将产品广泛应用于家电、通讯、汽车等多个领域。同时,公司注重品牌建设,通过广告宣传和市场推广活动提升品牌知名度和美誉度。这些努力使得ARCOLECTRIC SWITCHES公司的市场份额逐年增长,品牌影响力不断扩大。

德国ACAM公司的发展小趣事

2014年,ACAM公司迎来了一个重要的里程碑事件——被奥地利微电子股份有限公司收购。这次收购极大地增强了ACAM公司在时间数字转换器(TDC)技术领域的实力。奥地利微电子在半导体行业有着深厚的积累和丰富的经验,与ACAM公司的技术优势相结合,进一步提升了ACAM公司在市场上的竞争力。

Allied Electronic & Semiconductor Technology Inc公司的发展小趣事

AE&ST公司自创立之初,就深知技术创新是电子行业的核心竞争力。公司投入大量资源进行研发,不断探索新的半导体材料和生产工艺。在一次偶然的实验中,AE&ST的研发团队发现了一种新型半导体材料,这种材料在能效和稳定性方面表现出色。公司迅速将这一发现转化为产品,并推向市场。新产品一经推出,便因其卓越的性能获得了市场的广泛认可,AE&ST公司因此获得了巨大的商业成功。

Hosiden Corporation公司的发展小趣事

近年来,Hosiden在技术创新方面取得了显著成果。特别是在汽车市场,公司积极参与并推动了MIPI A-PHY标准的验证与应用。Hosiden与Valens Semiconductor等领先企业合作,完成了其连接器和电缆对Valens VA7000芯片组的验证,这是市场上首个符合MIPI A-PHY的芯片组。这一里程碑式的成就不仅展示了Hosiden在技术创新方面的实力,也进一步巩固了其在汽车电子市场中的领先地位。

Avel Lindberg公司的发展小趣事

作为汽车电子领域的佼佼者,Hosiden在汽车市场的深耕与布局尤为引人注目。公司针对汽车行业的特殊需求,开发了一系列高性能、高可靠性的电子连接器和电缆产品。这些产品不仅满足了汽车制造商对产品质量和性能的高标准要求,还通过提升数据传输速度和降低电磁干扰等方式,为汽车行业的发展提供了有力支持。同时,Hosiden还积极参与汽车行业的标准制定和技术交流活动,为行业的发展贡献了自己的智慧和力量。

问答坊 | AI 解惑

低频数字式相位测量仪

本帖最后由 paulhyde 于 2014-9-15 04:24 编辑 如题,和大家分享  …

查看全部问答>

齐纳二极管原理特性

齐纳二极管原理特性…

查看全部问答>

按下16个矩阵键盘依次在数码管上显示1-16的平方。

按下16个矩阵键盘依次在数码管上显示1-16的平方。如按下第一个显示1,第二个显示4... 我写了第3行的检测,就是说:按键按下的话 ,会显示:16   25  36   49: 但是我在实验板上运行的时候,高位的数字只会闪一下 ...…

查看全部问答>

Hp2490如何打开无线网卡,连接指定SSID,最好用C#完成,谢谢

Hp2490如何打开无线网卡,连接指定SSID,最好用C#完成,例如,我们办公室有N个无线网络,我想通过程序控制连接其中指定一个网络。…

查看全部问答>

IAR 3.41使用问题

前一阵重新装机,从网上下了个IAR 3.41 然后有个小工具生成序列号,安装过程没问题,可是在程序编译时出现下面的提示: Fatal Error[Cp001]: Copy protection check, No valid license found for this product [20] 这是什么问题呀?…

查看全部问答>

关于 CORTEX M 在 ucos 上的问题

  我尝试把ucos2移植到 cortex m0上,参考了 ucos over cortex m3 的代码。   有这样一个不明白的地方:从main函数开始,系统默认是使用 MSP 做堆栈使用的,也就是说 process模式和 中断模式都是用 MSP。   现在需要改成 proce ...…

查看全部问答>

试试传说中的低功耗

以前开发MCU都是外置电源供电,几乎没有怎么考虑过功耗问题,借此机会试试在电池供电的环境下软硬件设计。…

查看全部问答>

点阵出了点问题,图像有

今天看了下点阵的教程,自己跑去搞了下 ,结果弄是弄出来,可就是每次图像移动前都会红一团  这是电路图还有代码,大大帮忙看看#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit dula=P2^6;sbit wela=P2^7;sbi ...…

查看全部问答>

28035 CCS5 IQMATH调用

我在用CCS5中调用IQMATH函数时发现以下小问题: 下面是我的代码: _iq30 in2, out2 ; in2 =_IQ10(0.333*PI/(2*PI)); out2 =_IQ10sinPU(in2); temp = _IQ10toF(out2); in2 =_IQ30(0.333*PI/(2*PI)); out2 =_IQ30cosPU(in2); temp = _IQ30toF ...…

查看全部问答>