标题: 单片机+DS18B20 C语言初始程序 return的小小疑惑 [打印本页]

作者: weilemin123    时间: 2023-9-23 13:42
标题: 单片机+DS18B20 C语言初始程序 return的小小疑惑
/*******************************************************************************
* 函 数 名         : Ds18b20Init
* 函数功能                   : 初始化
* 输    入         : 无
* 输    出         : 初始化成功返回1,失败返回0
*******************************************************************************/

uchar Ds18b20Init()
{
        uchar i;
        DSPORT = 0;                         //将总线拉低480us~960us
        i = 70;        
        while(i--);//延时642us
        DSPORT = 1;                        //然后拉高总线,如果DS18B20做出反应会将在15us~60us后总线拉低
        i = 0;
        while(DSPORT)        //等待DS18B20拉低总线
        {
                Delay1ms(1);
                i++;
                if(i>5)//等待>5MS
                {
                        return 0;//初始化失败
                }
        
        }
        return 1;//初始化成功
}




不太理解,后续读写都是直接调用此函数,通讯是否成功,这个return 有啥意义么。


作者: Hephaestus    时间: 2023-9-23 14:08
如果引用这个函数的地方没有用到返回值,那么返回值就是多余的,褒义的说是冗余,也可以说是个feature。

另外,c语言返回值大家默认的是成功返回0,失败返回一个负数,越靠近-1说明失败的性质越严重。
作者: weilemin123    时间: 2023-9-23 14:37
谢谢回复,就是感觉有他没他,程序还是继续运行下去,假如通讯失败, 就是不会有数据传送过来。 然后再次回来初始化, 成功了就有数据。 如果需要自己可以再根据这个0, 1 加点别的东西进去。
作者: Hephaestus    时间: 2023-9-23 14:48
weilemin123 发表于 2023-9-23 14:37
谢谢回复,就是感觉有他没他,程序还是继续运行下去,假如通讯失败, 就是不会有数据传送过来。 然后再次回 ...

那你查一下代码里面用到了没有,如果没用过,你想增加功能也是完全合理的。
作者: 13872888583    时间: 2023-9-23 14:49
没有它,也是一样工作,他的目的就是假如,我找你有事,先敲敲门,看看你在不在家。
作者: weilemin123    时间: 2023-9-23 15:11
额,学单片机呢。 感觉这普中的还要留点小问题给你。   DS18B20 传回来的数据是两个字节的数据,高5位0,1 是温度的正负,  普中直接就把传输回来的数据  int  temp  
 if (temp <0); 是晓得开发板不会有负温,才这么写么额。我的锅,不好意思,自己不懂, 原来int  和unsigned  int 是有区别的。

作者: weilemin123    时间: 2023-9-25 08:04
Hephaestus 发表于 2023-9-23 14:48
那你查一下代码里面用到了没有,如果没用过,你想增加功能也是完全合理的。

大佬,就是return,会返回到主程序,然后又从最开始执行?还是返回这个子程序之前,继续执行此子程序




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