定义某端口的第某位引脚
sbit是桥梁:它连接了物理引脚(如 P3^3
)和代码中的符号(如 P33
或 KEY1
)。
sbit允许我们定义多个定义指向同一个地址位,也就是说Tx和P10都可以被正确调用,指向P1.0引脚
这相当于给同一个物理引脚(P1.0)起了两个别名(P10
和 Tx
),代码中可以通过任意一个名称操作该引脚,但需要避免逻辑混淆。
sbit Tx = P1^0; // 将P1.0引脚定义为Tx
sbit Rx = P1^1; // 将P1.1引脚定义为Rx
void main() {
Tx = 1; // 将P1.0引脚设置为高电平
Rx = 0; // 将P1.1引脚设置为低电平
}
系统已经定义的引脚,但是不能用来重复定义
sbit P32 = P3^2;
sbit P31 = P3^1;
sbit P30 = P3^0;//按键的控制引脚
正确定义
sbit row2 = P3^2;
sbit row1 = P3^1;
sbit row0 = P3^0;//按键的控制引脚
错误定义
sbit row2 = P32;
sbit row1 = P31;
sbit row0 = P30;//按键的控制引脚
另外注意
在51单片机的C语言(Keil C51)中,P3^3
是寄存器的位寻址语法,但它本身不是一个合法的变量名。这种语法只能用于以下两种场景:
- 在定义
sbit
变量时:通过sbit
关键字将某个位定义为符号。 - 直接操作寄存器位时:例如
P3 = 0x08;
(将P3.3置高电平)。
如果直接尝试在代码中写 if (P3^3 == 0)
,编译器会报错,因为 P3^3
未被定义为符号。