[经验分享] 51单片机中 bit和sbit区别

[复制链接]
 楼主| Jiangxiaopi 发表于 2025-7-7 14:08 | 显示全部楼层 |阅读模式

回顾C语言发现在单片机中有bit sbit sfr 等一些类型!


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

  bit : 编译时分配空间

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

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

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

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

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

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

  sbit: 指示说明性说明

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


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


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

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

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

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


转载地址:https://guo-pu.blog.csdn.net/article/details/83223152


albertaabbot 发表于 2025-8-7 11:19 | 显示全部楼层
bit是C51语言中的一种数据类型,用于声明一个位变量。
1988020566 发表于 2025-8-7 16:41 | 显示全部楼层
sbit是C51扩展的另一种变量类型,专门用于定义特殊功能寄存器(SFR)中的可寻址位。
robincotton 发表于 2025-8-8 12:01 | 显示全部楼层
sbit 只能访问单一位,无法一次性操作多个连续位
nomomy 发表于 2025-8-8 13:23 | 显示全部楼层
bit:用于声明一般的位变量,适合用于软件逻辑中的标志位等。
sbit:用于直接访问和控制特殊功能寄存器中的某一位,非常适合硬件控制
maqianqu 发表于 2025-8-8 14:40 | 显示全部楼层
sbit        硬件控制、外设交互        直接操作硬件寄存器,效率高        需依赖SFR定义,仅限特定地址
pixhw 发表于 2025-8-8 16:43 | 显示全部楼层
bit 和 sbit 均用于定义位变量
lzbf 发表于 2025-8-8 20:25 | 显示全部楼层
bit是C51编译器(如Keil)扩展的标准C数据类型,用于声明一个通用的位变量。
yeates333 发表于 2025-8-10 22:01 | 显示全部楼层
sbit主要用于访问和修改51单片机中特殊功能寄存器(如端口、定时器等)的某个特定位。
10299823 发表于 2025-8-12 02:40 | 显示全部楼层
能否用bit代替sbit操作硬件?
robertesth 发表于 2025-8-12 14:27 | 显示全部楼层
sbit类型的变量可以直接控制单片机的I/O端口位或其他特殊功能位,如定时器控制位、中断标志位等。
qiufengsd 发表于 2025-8-12 15:28 | 显示全部楼层
bit 是一种数据类型,专门用来声明一个位变量,可以存储0或1。
ulystronglll 发表于 2025-8-12 17:05 | 显示全部楼层
bit用于定义动态分配的位变量,通常用于RAM中的位寻址区。
sbit用于定义特殊功能寄存器中的位或者可位寻址区中的位,通常用于直接操作硬件资源。
sdCAD 发表于 2025-8-12 18:45 | 显示全部楼层
bit类型的变量是局部的,可以在函数内部定义;而sbit类型的变量通常是全局的,需要在程序的外部定义。
deliahouse887 发表于 2025-8-12 19:56 | 显示全部楼层
sbit 用于定义特殊功能寄存器(SFR)中的某个特定比特位,允许对这些位进行读写操作。
rosemoore 发表于 2025-8-12 22:21 | 显示全部楼层
bit类型的变量占用一个位的空间,但并不是直接映射到单片机的特殊功能寄存器中。
juliestephen 发表于 2025-8-14 15:13 | 显示全部楼层
bit:用于软件中的位操作,不涉及硬件,灵活但功能有限。
sbit:直接操作硬件寄存器或引脚,是51单片机编程中控制外设的核心工具。
modesty3jonah 发表于 2025-8-14 17:47 | 显示全部楼层
sbit类型的变量可以直接访问单片机的特殊功能寄存器中的某一位,这在操作单片机的硬件资源时非常有用。
uytyu 发表于 2025-8-14 20:32 | 显示全部楼层
bit是C51扩展的一种变量类型,用于定义普通的二进制位变量。
maudlu 发表于 2025-8-14 21:09 | 显示全部楼层
sbit的地址如何确定?              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

52

主题

221

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部