微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 不明白 return;语句的用法,退出到哪呢?

不明白 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,跳出中断。主程序上从哪里发生的中断就回到哪里去了呀~   个人见解,不对的指正,共勉!

赞成。谢谢了!大神

赞成。谢谢了!大神

赞成。谢谢了!大神

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top