找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1605|回复: 10
收起左侧

关于51单片机bit用法

[复制链接]
ID:891089 发表于 2022-7-8 20:39 | 显示全部楼层 |阅读模式
好兄弟们,比如我下面的程序段
sbit dat=P0^0;
......
void x(bit y){......};
......
int main()
{
   x(dat);
   .......
}
没有报错。
这种方法为啥不行嘞
bit不是可以对变量赋值吗?
回复

使用道具 举报

ID:891089 发表于 2022-7-8 20:45 | 显示全部楼层
x的内容是 y=0;或者 y=1;
回复

使用道具 举报

ID:301191 发表于 2022-7-9 00:48 | 显示全部楼层
顶一下
回复

使用道具 举报

ID:883242 发表于 2022-7-9 00:54 | 显示全部楼层
确实传bit y的值进去了,哪里不行了?
回复

使用道具 举报

ID:827243 发表于 2022-7-9 06:28 | 显示全部楼层
标准C来说,函数里修改参数的值是无效的,这里还涉及到了非标类型bit,

建议采用如下方式。

char x(bit y) {
}

dat=(bit)x(dat);
回复

使用道具 举报

ID:887371 发表于 2022-7-9 09:37 | 显示全部楼层
注意,51的sfr只能直接寻址,你想间接操控P00是不被允许的。

楼主函数中的y和dat是有区别的。
y是51单片机的CY标志,它会在进入函数时会等于dat的值。
y=0;或 y=1;仅仅是CY标志标志改变,但dat值不会跟着改变。
回复

使用道具 举报

ID:891089 发表于 2022-7-9 14:32 来自手机 | 显示全部楼层
Hephaestus 发表于 2022-7-9 00:54
确实传bit y的值进去了,哪里不行了?

io口默认置高电平,置低无反应。这个方法应该不可行,用其他方法了。我会把另一个方法回复我自己,谢谢了
回复

使用道具 举报

ID:891089 发表于 2022-7-9 14:33 来自手机 | 显示全部楼层
datouyuan 发表于 2022-7-9 09:37
注意,51的sfr只能直接寻址,你想间接操控P00是不被允许的。

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

是的,换了个方法,先谢谢了。新方法我会回复我自己
回复

使用道具 举报

ID:891089 发表于 2022-7-9 14:34 来自手机 | 显示全部楼层
新方法,
回复

使用道具 举报

ID:891089 发表于 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; //.... } };此贴封楼了
回复

使用道具 举报

ID:1039028 发表于 2022-7-10 11:22 | 显示全部楼层
bit只是一个数据0或1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表