⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 selectchannel.c

📁 SelectChannel.c,SelectChannel.h:无三阶信道选择的程序。
💻 C
字号:
#include "includes.h"

INT8U ChannelListA[79]={77,21,67,10,54,29,50,36,51,22,2,55,78,68,11,37,30,38,31,69,
			79,52,56,23,12,3,80,57,13,53,4,39,32,24,70,76,49,28,66,20,
			9,44,62,8,43,75,48,65,61,19,27,26,64,47,18,60,42,74,7,17,
			25,63,6,41,46,59,73,5,16,34,35,58,71,14,72,15,40,45,33};

INT8U ChannelListB[79]={10,21,29,36,50,54,67,77,2,11,22,30,37,51,55,68,78,3,12,23,
			31,38,52,56,69,79,4,13,24,32,39,53,57,70,80,9,20,28,44,49,
			62,66,76,8,19,27,43,48,61,65,75,7,18,26,42,47,60,64,74,6,
			17,25,41,46,59,63,73,5,16,34,35,58,71,14,15,33,40,45,72};

INT8U ChannelListC[78]={155,99,145,88,132,107,128,114,129,100,133,156,146,89,115,108,116,109,147,157,
			130,134,101,90,81,158,135,91,131,82,117,110,102,148,154,127,106,144,98,87,
			122,140,86,121,153,126,143,139,97,105,104,142,125,96,138,120,152,85,95,103,
			141,84,119,124,137,151,83,94,112,113,136,149,92,150,93,118,123,111};

INT8U ChannelListD[78]={88,99,107,114,128,132,145,155,89,100,108,115,129,133,146,156,81,90,101,109,
			116,130,134,147,157,82,91,102,110,117,131,135,148,158,87,98,106,122,127,140,
		        144,154,86,97,105,121,126,139,143,153,85,96,104,120,125,138,142,152,84,95,
		        103,119,124,137,141,151,83,94,112,113,136,149,92,93,111,118,123,150};
  
INT8U Talking3Minutes_sign = 0; //说话时间被限制为3分钟的标志为,1表示被限制,0表示不被限制

INT8U Timer_SecondValue(void)   //读取RTC计时器的秒值,之后返回秒值
{
  ;  // return ....
}
 
INT8U Check_ChanelIfIdle(INT8U Channel)  //检测参数所指定的那个信道,是不是空闲的。返回1表示空闲,0表示忙
{
  INT8U Idle = 0;
  //调用检测Rssi的函数来检测,参数所对应的信道是否空闲,返回0,1
  if (Idle == 1)
  {
    return 1 ;
  }
  else 
    return 0 ;
}

INT8U Idle_ChannelNum(void) //此函数用于返回空闲的信道号,以及设置了一个全局变量--3分钟限制
{  
  INT8U Random_Seed;
  INT8U Channel_Num;
  INT8U Channel_BlockNum;
  INT8U i;
  
  Talking3Minutes_sign = 0 ;                 //将3分钟限制清零
  Random_Seed = Timer_SecondValue() ;        //读取秒值
  Channel_Num = (Random_Seed*997+971)%79;   //计算开始检测的信道号
  Channel_BlockNum = (Random_Seed*997+971)%2; //从对等的两个模块里面选择一个
  
  
  if(Channel_BlockNum == 0)
  {
    if(Check_ChanelIfIdle(ChannelListA[Channel_Num++]) == 0) 
    { 
      Channel_Num %= 78;
      if(Check_ChanelIfIdle(ChannelListA[Channel_Num++]) == 0)
      { 
        Channel_Num %= 78;
        if(Check_ChanelIfIdle(ChannelListA[Channel_Num++]) == 0)
        {   
          goto  channel1;
        }
        else
        {
          return(ChannelListA[Channel_Num-1]);
        } 
      }
      else
      {
        return(ChannelListA[Channel_Num-1]);
      } 
    }
    else 
    {
      return(ChannelListA[Channel_Num-1]);
    }
  }  
  else 
  {
    if(Check_ChanelIfIdle(ChannelListB[Channel_Num++]) == 0) 
    { 
      Channel_Num %= 78;
      if(Check_ChanelIfIdle(ChannelListB[Channel_Num++]) == 0)
      { 
        Channel_Num %= 78;
        if(Check_ChanelIfIdle(ChannelListB[Channel_Num++]) == 0)
        {   
          goto  channel1;
        }
        else
        {
          return(ChannelListB[Channel_Num-1]);
        }
      
      }
      else
      {
        return(ChannelListB[Channel_Num-1]);
      } 
    }
    else 
    {
      return(ChannelListB[Channel_Num-1]);
    }
  }
  
channel1 : ;

  Random_Seed = Timer_SecondValue() ;
  Channel_Num = (Random_Seed*997+971)%78 ;
  Channel_BlockNum = (Random_Seed*997+971)%2;
 
    if(Channel_BlockNum == 0)
  {
    if(Check_ChanelIfIdle(ChannelListC[Channel_Num++]) == 0) 
    { 
      Channel_Num %= 77;
      if(Check_ChanelIfIdle(ChannelListC[Channel_Num++]) == 0)
      { 
        Channel_Num %= 77;
        if(Check_ChanelIfIdle(ChannelListC[Channel_Num++]) == 0)
        { 
          Channel_Num %= 77;
          if(Check_ChanelIfIdle(ChannelListC[Channel_Num++]) == 0)
            goto  channel2;
          else
            return(ChannelListC[Channel_Num-1]);  
        }
        else
        {
          return(ChannelListC[Channel_Num-1]);
        }
      
      }
      else
      {
        return(ChannelListC[Channel_Num-1]);
      } 
    }
    else 
    {
      return(ChannelListC[Channel_Num-1]);
    }
  }  
  else 
  { 
    if(Check_ChanelIfIdle(ChannelListD[Channel_Num++]) == 0) 
    { 
      Channel_Num %= 77;
      if(Check_ChanelIfIdle(ChannelListD[Channel_Num++]) == 0)
      { 
        Channel_Num %= 77;
        if(Check_ChanelIfIdle(ChannelListD[Channel_Num++]) == 0)
        { 
          Channel_Num %= 77;
          if(Check_ChanelIfIdle(ChannelListD[Channel_Num++]) == 0)
            goto  channel2;
          else
            return(ChannelListD[Channel_Num-1]);  
        }
        else
        {
          return(ChannelListD[Channel_Num-1]);
        }
      
      }
      else
      {
        return(ChannelListD[Channel_Num-1]);
      } 
    }
    else 
    {
      return(ChannelListD[Channel_Num-1]);
    }
  }
channel2 : ;

  Random_Seed = Timer_SecondValue() ;
  Channel_Num = (Random_Seed*997+971)%79 ;
  Channel_BlockNum = (Random_Seed*997+971)%2;
  
  if(Channel_BlockNum == 0)
  {
    if(Check_ChanelIfIdle(ChannelListA[Channel_Num++]) == 0) 
    { 
      Channel_Num %= 78;
      if(Check_ChanelIfIdle(ChannelListA[Channel_Num++]) == 0)
      { 
        Channel_Num %= 78;
        if(Check_ChanelIfIdle(ChannelListA[Channel_Num++]) == 0)
        { 
          Channel_Num %= 78;
          if(Check_ChanelIfIdle(ChannelListA[Channel_Num++]) == 0)
            goto  channel3 ;
          else
            return(ChannelListA[Channel_Num-1]);  
        }
        else
        {
          return(ChannelListA[Channel_Num-1]);
        }
      
      }
      else
      {
        return(ChannelListA[Channel_Num-1]);
      } 
    }
    else 
    {
      return(ChannelListA[Channel_Num-1]);
    }
  }  
  else 
  { 
    if(Check_ChanelIfIdle(ChannelListB[Channel_Num++]) == 0) 
    { 
      Channel_Num %= 78;
      if(Check_ChanelIfIdle(ChannelListB[Channel_Num++]) == 0)
      { 
        Channel_Num %= 78;
        if(Check_ChanelIfIdle(ChannelListB[Channel_Num++]) == 0)
        {   
          Channel_Num %= 78;
          if(Check_ChanelIfIdle(ChannelListB[Channel_Num++]) == 0)
            goto  channel3;
          else
            return(ChannelListB[Channel_Num-1]);  
        }
        else
        {
          return(ChannelListB[Channel_Num-1]);
        }
      
      }
      else
      {
        return(ChannelListB[Channel_Num-1]);
      } 
    }
    else 
    {
      return(ChannelListB[Channel_Num-1]);
    }
  }
channel3 : ;

  Random_Seed = Timer_SecondValue() ;
  Channel_Num = (Random_Seed*997+971)%78 ;
  Channel_BlockNum = (Random_Seed*997+971)%2;
  
  if(Channel_BlockNum == 0)
  { 
    while(1)
     {
       if(Check_ChanelIfIdle(ChannelListC[Channel_Num++]) == 0)
       {
         Channel_Num %= 77 ;
         i++;
       }
       else
       {
         i++;
         if(i>=5)
         Talking3Minutes_sign = 1 ;
         return(ChannelListC[Channel_Num-1]); 
       }
     } 
  }
  else
  { 
    while(1)
     {
       if(Check_ChanelIfIdle(ChannelListD[Channel_Num++]) == 0)
       {
         Channel_Num %= 77 ;
         i++;
       }
       else
       {
         i++;
         if(i>=5)
         Talking3Minutes_sign = 1 ;
         return(ChannelListD[Channel_Num-1]); 
       }
     } 
  } 
}
















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -