为什么不能直接对端口引脚直接赋值???

2020-03-06 19:45发布

52中为什么我对端口直接赋值会报错??
void main()
{
  P1^0= 0;
  while(1);
}

而改成这样又可以了呢?  led和P1^0不就是等价的么???求解。。。谢谢
sbit led = P1^0;
void main()
{
  led  = 0;
  while(1);
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
yuandm1
1楼-- · 2020-03-07 01:05
原来也遇到过这种情况,没问为啥就过去了。帮顶
HWM
2楼-- · 2020-03-07 06:26
re LZ:

“P1^0”只是个常数,表示寄存器P0的0位的位地址值。而

sbit led = P1^0;

才真正地定义了一个位变量。有了变量才能对此赋值。
ayb_ice
3楼-- · 2020-03-07 07:13
无语
mugenwon
4楼-- · 2020-03-07 08:41
3楼正解。和编译器也有关。
micropower
5楼-- · 2020-03-07 12:26
 精彩回答 2  元偷偷看……
micropower
6楼-- · 2020-03-07 13:01
你的程序都没对P1^0定义,人家编译器都不知道是干什么的。
而像P0 P1 P2这些都需要定义的,但你所调用的头文件里已经定义好了,所以不需要定义。如果你的程序没包括这个头文件。编译器照样认不出P1是什么。

一周热门 更多>