標(biāo)題: 關(guān)于51單片機(jī)bit用法 [打印本頁(yè)]

作者: 美琴的備胎    時(shí)間: 2022-7-8 20:39
標(biāo)題: 關(guān)于51單片機(jī)bit用法
好兄弟們,比如我下面的程序段
sbit dat=P0^0;
......
void x(bit y){......};
......
int main()
{
   x(dat);
   .......
}
沒(méi)有報(bào)錯(cuò)。
這種方法為啥不行嘞
bit不是可以對(duì)變量賦值嗎?

作者: 美琴的備胎    時(shí)間: 2022-7-8 20:45
x的內(nèi)容是 y=0;或者 y=1;
作者: 人工置頂員    時(shí)間: 2022-7-9 00:48
頂一下
作者: Hephaestus    時(shí)間: 2022-7-9 00:54
確實(shí)傳bit y的值進(jìn)去了,哪里不行了?
作者: daemondong    時(shí)間: 2022-7-9 06:28
標(biāo)準(zhǔn)C來(lái)說(shuō),函數(shù)里修改參數(shù)的值是無(wú)效的,這里還涉及到了非標(biāo)類型bit,

建議采用如下方式。

char x(bit y) {
}

dat=(bit)x(dat);

作者: datouyuan    時(shí)間: 2022-7-9 09:37
注意,51的sfr只能直接尋址,你想間接操控P00是不被允許的。

樓主函數(shù)中的y和dat是有區(qū)別的。
y是51單片機(jī)的CY標(biāo)志,它會(huì)在進(jìn)入函數(shù)時(shí)會(huì)等于dat的值。
y=0;或 y=1;僅僅是CY標(biāo)志標(biāo)志改變,但dat值不會(huì)跟著改變。
作者: 美琴的備胎    時(shí)間: 2022-7-9 14:32
Hephaestus 發(fā)表于 2022-7-9 00:54
確實(shí)傳bit y的值進(jìn)去了,哪里不行了?

io口默認(rèn)置高電平,置低無(wú)反應(yīng)。這個(gè)方法應(yīng)該不可行,用其他方法了。我會(huì)把另一個(gè)方法回復(fù)我自己,謝謝了
作者: 美琴的備胎    時(shí)間: 2022-7-9 14:33
datouyuan 發(fā)表于 2022-7-9 09:37
注意,51的sfr只能直接尋址,你想間接操控P00是不被允許的。

樓主函數(shù)中的y和dat是有區(qū)別的。

是的,換了個(gè)方法,先謝謝了。新方法我會(huì)回復(fù)我自己
作者: 美琴的備胎    時(shí)間: 2022-7-9 14:34
新方法,
作者: 美琴的備胎    時(shí)間: 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    時(shí)間: 2022-7-10 11:22
bit只是一個(gè)數(shù)據(jù)0或1




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1