标题: 关于51单片机bit用法 [打印本页]

作者: 美琴的备胎    时间: 2022-7-8 20:39
标题: 关于51单片机bit用法
好兄弟们,比如我下面的程序段
sbit dat=P0^0;
......
void x(bit y){......};
......
int main()
{
   x(dat);
   .......
}
没有报错。
这种方法为啥不行嘞
bit不是可以对变量赋值吗?

作者: 美琴的备胎    时间: 2022-7-8 20:45
x的内容是 y=0;或者 y=1;
作者: 人工置顶员    时间: 2022-7-9 00:48
顶一下
作者: Hephaestus    时间: 2022-7-9 00:54
确实传bit y的值进去了,哪里不行了?
作者: daemondong    时间: 2022-7-9 06:28
标准C来说,函数里修改参数的值是无效的,这里还涉及到了非标类型bit,

建议采用如下方式。

char x(bit y) {
}

dat=(bit)x(dat);

作者: datouyuan    时间: 2022-7-9 09:37
注意,51的sfr只能直接寻址,你想间接操控P00是不被允许的。

楼主函数中的y和dat是有区别的。
y是51单片机的CY标志,它会在进入函数时会等于dat的值。
y=0;或 y=1;仅仅是CY标志标志改变,但dat值不会跟着改变。
作者: 美琴的备胎    时间: 2022-7-9 14:32
Hephaestus 发表于 2022-7-9 00:54
确实传bit y的值进去了,哪里不行了?

io口默认置高电平,置低无反应。这个方法应该不可行,用其他方法了。我会把另一个方法回复我自己,谢谢了
作者: 美琴的备胎    时间: 2022-7-9 14:33
datouyuan 发表于 2022-7-9 09:37
注意,51的sfr只能直接寻址,你想间接操控P00是不被允许的。

楼主函数中的y和dat是有区别的。

是的,换了个方法,先谢谢了。新方法我会回复我自己
作者: 美琴的备胎    时间: 2022-7-9 14:34
新方法,
作者: 美琴的备胎    时间: 2022-7-9 14:34
  sbit dat0=P0^0; sbit dat1=P0^1; void x(uchar io){ switch(io) {   case 0:dat0=1;break  case 1:da1=1;break; //.... } };此贴封楼了
作者: 3235356465    时间: 2022-7-10 11:22
bit只是一个数据0或1




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1