位和sbit之间的区别?

时间:2016-02-05 11:58:36

标签: embedded 8051

8051微控制器的Keil C51中的bitsbit关键字有什么区别?

什么时候应该sbit使用bit

一些例子会非常有用。

3 个答案:

答案 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内存类型说明符

声明的变量

资料来源: BITSBIT

答案 2 :(得分:1)

sBIT是8051单片机中使用的一种特殊类型的寄存器,用于访问用bdata声明的各个位,而Bit用于定义单个位变量。