标题:
想请问大家关于这个函数返回值的问题
[打印本页]
作者:
gaoky
时间:
2020-5-9 16:05
标题:
想请问大家关于这个函数返回值的问题
如题,这是一个DS18B20温度检测程序中读取温度子程序,不知道为什么最后返回值要对ACK取反,取反了也没有使命意义啊,ack值是取决于IO口,好像和返回值没有多大的关系,求教各位
bit Get18B20Temp(int *temp)
{
bit ack;
uchar LSB, MSB; //16bit温度值的低字节和高字节
ack = Get18B20Ack(); //执行总线复位,并获取18B20应答
if(ack == 0) //如18B20正确应答,则读取温度值
{
Write18B20(0xCC); //跳过ROM操作
Write18B20(0xBE); //发送读命令
LSB = Read18B20(); //读温度值的低字节
MSB = Read18B20(); //读温度值的高字节
*temp = ((int)MSB << 8) + LSB; //合成为16bit整型数
}
return ~ack; //ack==0表示操作应答,所以返回值为其取反值
}
作者:
wulin
时间:
2020-5-9 17:42
注释已经清楚表明ack是应答位变量,当执行ack = Get18B20Ack(); 只会有0或1两种结果,如果ack是0,则读取温度值并把16位数据保存在*temp指针地址,取反返回ack值就是反映此函数的执行状态。这个程序的好处是CPU不要在启动温度转换后傻等10ms。
作者:
gaoky
时间:
2020-5-9 19:42
wulin 发表于 2020-5-9 17:42
注释已经清楚表明ack是应答位变量,当执行ack = Get18B20Ack(); 只会有0或1两种结果,如果ack是0,则读取温 ...
谢谢大佬
作者:
hantu
时间:
2020-5-9 20:45
ack=Get18B20Temp(&temp);
if(ack){ ...} //如果有应答
这样的代码阅读起来就比那各不取反了返回的要直观更易于理解了。
不然你返回原样的ack
就得
if(ack==0) 或者是 if(!ack) ,明显没有上面那种方式那么好。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1