不明白 return;语句的用法,退出到哪呢?
时间:10-02
整理:3721RD
点击:
void INT0_init()
{
IT0=1;//触发方式为脉冲负边沿触
EX0=1;
EA=1;
}
void int0() interrupt 0
{
uchar j,k,N=0;
EX0 = 0;
delay(15);
if (IRIN==1)
{
EX0 =1;
return; // ?退出到哪呢
}
//确认IR信号出现
while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
{delay(1);}
for(j=0;j<4;j++) //收集四组数据
{
for(k=0;k<8;k++) //每组数据有8位
{
while(IRIN) //等 IR 变为低电平,跳过4.5ms的前导高电平信号。
{delay(1);}
while(!IRIN) //等 IR 变为高电平
{delay(1);}
while(IRIN) //计算IR高电平时长
{
delay(1);
N++;
if(N>=30)
{ EX0=1;
return;// ?退出到哪呢
} //0.14ms计数过长自动离开。
} //高电平计数完毕
IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0”
if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补“1”
N=0;
}//end for k
}//end for j
if(IRCOM[2]!=~IRCOM[3])
{
EX0=1;
return;
}
switch(IRCOM[2])
{
case 0x16: //此处为所选的红外遥控器操作码
distemp = 1;
break;
case 0x0c:
distemp = 2;
break;
case 0x08:
distemp = 3;
break;
case 0x42:
distemp = 4;
break;
case 0x46:
distemp = 5;
break;
}
EX0 = 1;
}
这样的红外线模块,,是不是只需要自己解码一下就行了,,不需要再编程发射程序了吧?红外接收头的型号不一样影响它的接收程序吗(自认为红外协议一样,程序也该一样的吧)?请各位赐教,也顺便看看程序可行吗
file:///C:\Documents and Settings\Administrator\Application Data\Tencent\Users\1319441689\QQ\WinTemp\RichOle\6E)_AKT2(NT6D1EEU4KS2GN.jpg
.....
图片如下。
不是退出吧,正常应该是返回某个数值,这个语句什么都没有返回,会不会没有起到作用?尝试注释到试试
单纯的一个return,是没有返回值的,它的作用就是提前结束本函数,有点类似continue
if(N>=30)
{ EX0=1;
return;// ?退出到哪呢
} 像这个函数就算没有RETURN;它一样会跳出if()函数啊。是不是执行了 RETURN;语句它会跳出中断程序呢,,也就是说跳出void int0() interrupt 0函数?
没有返回值的函数在最后加return和没有加的效果是一样的。在函数还没执行到最后提前加一个可以认为是提前退出本函数,函数中return后面的就执行不到了。好处在于,比方你有3个if判断语句,按顺序如果第一个为真,后两个就不需要判断了,你在第一个if里面来个return直接就结束该函数了,省去了很多判断所需要耗费的时间。你上面提的那个中断中if不就是为真嘛,直接return,跳出中断。主程序上从哪里发生的中断就回到哪里去了呀~ 个人见解,不对的指正,共勉!
赞成。谢谢了!大神
赞成。谢谢了!大神
赞成。谢谢了!大神