单片机C编程return语句问题

一函数结束段用return语句:if(){return0x00;}else{return0x01;}看不明白return返回值的是什么意思?返回到哪里?请高手能详解一下吗... 一函数结束段用return语句:
if() {return 0x00;}
else {return 0x01;}
看不明白return返回值的是什么意思?返回到哪里?
请高手能详解一下吗?
该函数段如下,求最后return语句含义!!
unsigned char ds1820_reset(void) {
unsigned char i;
flag = SREG;
CLI();
DQ_OUT;
DQ_CLR;
delay_10us(49);
DQ_SET;
DQ_IN;
delay_10us(7);
i = DQ_R;
delay_10us(49);
if (flag & 0x80) {
SEI();
}
if (i) {
return 0x00;
}
else {
return 0x01;
}
}
展开
 我来答
wookongbun
2009-10-16 · TA获得超过209个赞
知道答主
回答量:146
采纳率:0%
帮助的人:108万
展开全部
return语句是退出当前执行的函数体,如果这个函数是有返回值的就返回相应的类型值,没有返回值的就返回空;同时也把控制权交还给主调函数。

就像unsigned char ds1820_reset(void)是返回一个unsigned char类型的值;
ds1820_reset()是哪个函数调用的,就返回到哪里。

具体返回0x00还是0x01,还有返回值的意义,是和变量i(就是DQ_R)有关。把返回值定义为常量,一般把相应的返回值当作标记使用,相当于约定好的暗号一样。常规的做法是0x00表示某个动作失败,0x00表示成功。
aldriscxy
推荐于2018-04-13 · TA获得超过1823个赞
知道小有建树答主
回答量:496
采纳率:0%
帮助的人:443万
展开全部
一个函数可以定义为无返回值的,例如void ds1820_reset(void);在函数之前加入void,那么就不会有return,但是有的时候函数是需要计算出一个结果的,在调用这个函数后要用到这个结果去进行下一步的计算,当然你也可以把函数定义为void形式,加入一个全局变量来存储这个结果,但这样很浪费你的RAM空间,一般常用的方法就是带有返回值的函数,例如你调用了一个函数进行一系列计算,根据计算结果的不同需要不同的操作,那么这时你定义一个unsigned char ds1820_reset(void)的函数,根据计算结果的不同可以这样来写:
if(ds1820_reset()==1)
{...}
else if(ds1820_reset()==0)
{...}
在上述语句中ds1820_reset()函数其实最终的结果就是return返回的数值,如果return返回的是0x00,那么ds1820_reset()调用后就等于0x00
所谓return返回的就是你要得到的结果,只是一个数值而已。这个数值是你调用了这个函数后所关心的一个变量结果,而这个结果则是影响你程序继续执行的关键变量
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lphaff
2009-10-16 · TA获得超过2.4万个赞
知道大有可为答主
回答量:1565
采纳率:72%
帮助的人:621万
展开全部
这是对18B20编程的初始化函数
如果初始化成功,则会在15~60us内产生一个低电平
你看那个i的赋值
i=DQ_R
在后面的 if (flag & 0x80)里面
如果flag的最高位为1,即说明产生了一个复位信号
下面的if(i)与上面的 if (flag & 0x80)是并列的关系
。。。
我怎么看着你这个函数很不正道啊
前面用的char型定义的函数
又在()里面加一个void
不可思议啊
我给你一个我的那个复位函数的形式吧
你只要把那个延时严格按照说明书的来
就能成功
void reset()
{
uchar st=1;
DQ_HIGH();
NOP();NOP();
while(st)
{
DQ_LOW();
delayus(300);//660us
DQ_HIGH();
delayus(20);//45us
if(DQ==1)
st=1;
else
st=0;
delayus(240);//520us
st=0;
}
}

因为是复位信号
不是读字节那个函数
所以可以直接定义为一个空返回值的函数
st也是检测那个复位信号的
如果有复位信号产生了
则延迟520us左右
然后退出这个复位 函数

我想了想,,你那个返回值0x00和0x01应该是作为一个判断的
如果i=0,则继续返回这个函数重新检测
如果i=1,则跳出这个函数
因为假设你这个函数能实现18B20的功能
那在那个复位函数里面它只有这种意义了
希望能帮到你

参考资料: 个人资料

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
做而论道
高能答主

2009-10-16 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
函数就是一个程序,运行结束后,应当有一定的结果。
其结果,可以以数值形式返回上级函数。
---------------------
楼主补充的内容里面,函数SEI()的作用还是没有说清,所以现在仍然、只能猜测return 0x00和return 0x01的含义。
函数unsigned char ds1820_reset(void),应该返回对ds1820进行复位的结果,是否成功、ds1820是否存在,就在return 0x00 或 0x01了。
一般认为return 0x01,是复位成功的意思。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xuleda
2009-10-16 · TA获得超过243个赞
知道小有建树答主
回答量:122
采纳率:0%
帮助的人:110万
展开全部
return 0x00的意思是,结束该子程序,并返回数据0x00作为结果。
一般情况下,return 0x00 完成的功能是:
1、将0x00写入R0寄存器内;
2、执行子程序返回指令,返回到子程序调用处,通过读R0寄存器而获得0x00这个结果。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式