这应该可以帮助你:
\n\n\n\n\n\n少量
\n\nC51 为您提供了位数据类型,可用于变量声明、参数列表和函数返回值。位变量的声明方式与其他 C 数据类型的声明方式相同。对于\n示例:
\n\nRun Code Online (Sandbox Code Playgroud)\n\nstatic bit done_flag = 0; /* bit variable */\n\nbit testfunc ( /* bit function */\n bit flag1, /* bit arguments */\n bit flag2)\n{\n.\n.\n.\nreturn (0); /* bit return value */\n}\n所有位变量都存储在位于 8051 内部存储区域的位段中。由于该区域只有 16 个字节长,因此在任何一个范围内最多可以声明 128 个位变量。
\n\n存储器类型可以包含在位变量的声明中。但是,由于位变量存储在 8051 的内部数据区域中,因此只有 data 和 idata 存储器类型可以包含在声明中。任何其他内存类型均无效。
\n\n以下限制适用于位变量和位\n 声明:
\n\n\n
\n\n- \n
使用禁用中断(#pragma disable)的函数和使用显式寄存器组(使用 n)声明的函数\n 无法返回位值。对于尝试返回位类型的此类函数,C51 编译器会生成错误消息。
- \n
位不能声明为指针。例如:
\n\n位*ptr
- \n
bit 类型的数组无效。例如:
\n\n位软件 [5]
SBIT
\n\n对于典型的 8051 应用,通常需要访问 SFR 中的各个位。C51 编译器使用 sbit 数据类型使这成为可能。sbit 数据类型允许您访问可位寻址的 SFR。例如:
\n\nRun Code Online (Sandbox Code Playgroud)\n\nsbit EA = 0xAF;\n该声明将 EA 定义为地址 0xAF 处的 SFR 位。在 8051 上,这是中断启用寄存器中的启用所有位。
\n\n笔记:
\n\n并非所有 SFR 都是可位寻址的。只有那些地址可被 8 整除的 SFR 才是可位寻址的。这些 SFR\xe2\x80\x99 的低半字节\n 将为 0 或 8;例如,0xA8 和 0xD0 处的 SFR 是可位寻址的,而 0xC7 和 0xEB 处的 SFR 则不是。SFR 位\n 地址很容易计算。将位位置与 SFR 字节地址相加即可得到 SFR 位地址。因此,要访问位于 0xC8 的 SFR 中的位 6,SFR 位地址将为 0xCE (0xC8 + 6)。
\n\n任何符号名称都可以在 sbit 声明中使用。等号 (=) 右侧的表达式指定符号名称的绝对位地址。有三种指定地址的变体。\n
\n\n变体 1:
\n\nRun Code Online (Sandbox Code Playgroud)\n\nsfr_name ^ int_constant\n此变体使用先前声明的 sfr (sfr_name) 作为 sbit 的基地址。现有 SFR 的地址必须能被 8 整除。克拉符号 (^)\n 后面的表达式指定要使用此声明访问的位的位置。位位置必须是 0 到 7 范围内的数字。例如:
\n\nRun Code Online (Sandbox Code Playgroud)\n\nsfr PSW = 0xD0;\nsfr IE = 0xA8;\n\nsbit OV = PSW ^ 2;\nsbit CY = PSW ^ 7;\n\nsbit EA = IE ^ 7;\n变体 2:
\n\nRun Code Online (Sandbox Code Playgroud)\n\nint_constant ^ int_constant\n此变体使用整数常量作为 sbit 的基地址。基址值必须能被 8 整除。克拉符号 (^) 后面的表达式指定要使用此声明访问的位的位置。位位置必须是 0 到 7 范围内的数字。例如:
\n\nRun Code Online (Sandbox Code Playgroud)\n\nsbit OV = 0xD0 ^ 2;\nsbit CY = 0xD0 ^ 7;\n\nsbit EA = 0xA8 ^ 7;\n变体 3:
\n\nRun Code Online (Sandbox Code Playgroud)\n\nint_constant\n此变体对 sbit 使用绝对位地址。例如:
\n\nRun Code Online (Sandbox Code Playgroud)\n\nsbit OV = 0xD2;\nsbit CY = 0xD7;\n\nsbit EA = 0xAF;\n注意事项:
\n\n特殊功能位表示一个独立的声明类,\n 不能与其他位声明或位字段互换。
\n\nsbit 数据类型声明可用于访问使用 bdata 内存类型说明符声明的变量的各个位\n
\n