不明白 return;语句的用法,退出到哪呢?

2019-07-15 17:28发布

本帖最后由 张全武5 于 2015-4-24 11:28 编辑

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 SettingsAdministratorApplication DataTencentUsers1319441689QQWinTempRichOle6E)_AKT2(NT6D1EEU4KS2GN.jpg

..... .....
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
HARRY007
2019-07-16 11:07
没有返回值的函数在最后加return和没有加的效果是一样的。在函数还没执行到最后提前加一个可以认为是提前退出本函数,函数中return后面的就执行不到了。好处在于,比方你有3个if判断语句,按顺序如果第一个为真,后两个就不需要判断了,你在第一个if里面来个return直接就结束该函数了,省去了很多判断所需要耗费的时间。你上面提的那个中断中if不就是为真嘛,直接return,跳出中断。主程序上从哪里发生的中断就回到哪里去了呀~   个人见解,不对的指正,共勉!

一周热门 更多>