8051微控制器的Keil C51中的bit
和sbit
关键字有什么区别?
什么时候应该sbit
使用bit
?
一些例子会非常有用。
答案 0 :(得分:2)
检查forum:
位和sbit之间的主要区别在于您可以声明 在一个单元中sbit一个变量,使其指向一个特定的位 在SFR寄存器中。在主程序中,您需要指定哪个 注册此sbit指向。
dim Abit as sbit sfr external ' Abit is precisely defined in some external file, for example in the main program unit ... implements .... end.
用于PIC编译器的mikroBasic PRO提供了可能的位数据类型 用于变量声明。它不能用于论证 列表和函数返回值,没有指向位的指针 变量和bit类型的数组无效。
dim bf as bit ' bit variable
sbit不是一个新变量,并且不占用额外的内存空间 有点不同,将新变量,进一步定义和 在内存中占用额外的空间。
同时检查参考文献(在评论中添加的):
答案 1 :(得分:2)
这可以帮到你:
BIT
C51为您提供了可用于变量的位数据类型 声明,参数列表和函数返回值。一点点 声明变量就像声明其他C数据类型一样。对于 例如:
static bit done_flag = 0; /* bit variable */ bit testfunc ( /* bit function */ bit flag1, /* bit arguments */ bit flag2) { . . . return (0); /* bit return value */ }
所有位变量都存储在内部的位段中 8051的内存区域。因为这个区域只有16个字节长,一个 在任何一个范围内最多可以声明128位变量。
存储器类型可以包含在位变量的声明中。 但是,因为位变量存储在内部数据区域中 8051,数据和idata内存类型只能包含在 宣言。任何其他内存类型都无效。
以下限制适用于位变量和位 声明:
使用禁用中断的函数(#pragma disable)和使用显式寄存器库声明的函数(使用n) 不能返回一点值。 C51编译器生成错误消息 对于尝试返回位类型的此类函数。
无法将某个位声明为指针。例如:
bit * ptr
类型位数组无效。例如:
bit ware [5]
<强> SBIT 强>
对于典型的8051应用程序,通常需要访问 SFR中的各个位。 C51编译器使这成为可能 使用sbit数据类型。 sbit数据类型允许您访问 位可寻址的SFR。例如:
sbit EA = 0xAF;
该声明将EA定义为地址0xAF处的SFR位。在 8051,这是中断使能寄存器中的全部使能位。
注意:强>
并非所有SFR都是可位寻址的。只有那些地址为的SFR 可被8整除的是可位寻址的。这些SFR的蚕食较低 将是0或8;例如,0xA8和0xD0处的SFR是 位寻址,而0xC7和0xEB的SFR不是。 SFR位 地址很容易计算。将位位置添加到SFR字节 地址获取SFR位地址。因此,要访问SFR中的第6位 0xC8,SFR位地址为0xCE(0xC8 + 6)。
任何符号名称都可以在sbit声明中使用。表达方式 等号(=)右侧指定绝对位地址 为了象征性的名字。指定有三种变体 地址。
变式1:
sfr_name ^ int_constant
此变体使用先前声明的sfr(sfr_name)作为基础 sbit的地址。现有SFR的地址必须均匀 可被8整除。克拉符号后面的表达式(^) 指定要使用此声明访问的位的位置。该 位位置必须是0到7范围内的数字。例如:
sfr PSW = 0xD0; sfr IE = 0xA8; sbit OV = PSW ^ 2; sbit CY = PSW ^ 7; sbit EA = IE ^ 7;
变式2:
int_constant ^ int_constant
此变体使用整数常量作为的基址 SBIT。基地址值必须可以被8整除 克拉符号后面的表达式(^)指定的位置 要使用此声明访问的位。位位置必须是a 编号范围为0到7.例如:
sbit OV = 0xD0 ^ 2; sbit CY = 0xD0 ^ 7; sbit EA = 0xA8 ^ 7;
变式3:
int_constant
此变体使用sbit的绝对位地址。例如:
sbit OV = 0xD2; sbit CY = 0xD7; sbit EA = 0xAF;
注意:
特殊功能位代表一个独立的声明类 不能与其他位声明或位字段互换。
sbit数据类型声明可用于访问各个位 使用bdata内存类型说明符
声明的变量
答案 2 :(得分:1)
sBIT是8051单片机中使用的一种特殊类型的寄存器,用于访问用bdata声明的各个位,而Bit用于定义单个位变量。