? 無線模塊專業網站!安陽市新世紀電子研究所專業研發生產小體積低功耗 無線模塊 無線收發模塊 2.4G無線模塊 無線遙控器 無線接收器 無線控制器

<delect id="800et"></delect>
<xmp id="800et"><strong id="800et"></strong>
    <noframes id="800et">

    <dd id="800et"></dd>
  1. <menuitem id="800et"><strong id="800et"><acronym id="800et"></acronym></strong></menuitem>
    1. <menuitem id="800et"></menuitem>
      全國服務熱線:0372-5968708
      ?
      產品目錄
      市場部聯系電話:
      0372-5968708
      傳真:0372-5968993
      郵箱:ay5968708@163.com
      中國﹒河南省安陽市文峰大道與朝陽路口國貿大廈A座9F
      歡迎咨詢市場部在線客服!
      技術支持
      您當前位置:首頁 > 技術支持
      JF24D如何設置頻率及數據通道
      發布:xsj  發布日期:2012-03-06 15:06:01  瀏覽:5384次

      ** File name:           JF24D.c

      ** Last modified Date:  2010-11-6

      ** Last Version:        2.0

      ** Descriptions:        Every project should include a copy of this file.

      **------------------------------------------------------------------------------------------------------

      ** Created by:          lizhiyuan

      ** Created date:        2010-11-6

      ** Version:            2.0

      ** Descriptions:        The original version

      **------------------------------------------------------------------------------------------------------

      ** Modified by:

      ** Modified date:

      ** Version:

      ** Descriptions:JF24D新版本程序2.0

      ********************************************************************************************************/

      #include"JF24D.h"

      //寄存器組1  0-13號寄存器的初始值  

      code UINT32 RegArrFSKAnalog[]={

      0xE2014B40,

      0x00004B40,

      0x028CFCD0,

      0x41390099,

      0x0B869EC1,

      0xA67F0224,

      0x00400000,  

      0x00000000,

      0x00000000,

      0x00000000,

      0x00000000,

      0x00000000,

      0x001A7300,

      0x36B48000,

      };

       

      //寄存器組1  14號寄存器的初始值  

      code UINT8 RegArrFSKAnalogReg14[]=

      {

      0x41,0x20,0x08,0x04,0x81,0x20,0xCF,0xF7,0xFE,0xFF,0xFF

      };

       

      //寄存器組0初始值

      code UINT8 RegArrFSK[][2]={

      {0,0x0F}, //配置寄存器

      {1,0x3F},

      {2,0x3F}, //使能接收地址

      {3,0x03}, //信道的數據長度

      {4,0xff},

      {5,0x17},    //頻道選擇寄存器 (更改17 可以改變2.4G 的頻率,改為181M 一共可以設置80個通道)

      {6,0x17}, 

      {7,0x07},     //狀態寄存器

      {8,0x00}, //射頻設置寄存器

      {9,0x00},

      {12,0xc3},

      {13,0xc4},

      {14,0xc5},

      {15,0xc6},

      {17,0x20},

      {18,0x20},

      {19,0x20},

      {20,0x20},

      {21,0x20},

      {22,0x20},

      {23,0x00},

      {28,0x3F},

      {29,0x07}

      };

       

      code UINT8 RX0_Address[]={0x12,0x34,0x56,0x78,0x01}; //接收通道0的地址

      說明:改變0X后面5組數字的任一組數可以更改每套模塊的IP地址,比如0x12 可以改為0x13,其他不變{0x13,0x34,0x56,0x78,0x01} 2只模塊地址一樣即可通訊 和其他不同的地址不能通訊,也互不干擾。改變地址可以數據通道。遙控可以,傳數據會誤碼。

      code UINT8 RX1_Address[]={0xc2,0x56,0x34,0x12,0x02}; //接收通道1的地址

       

      /************************************************************************************

      **函數名稱:SPI_RW()

      **函數描述:寫一個字節到JF24D,并返回讀出的字節

      平時低電平,上升沿讀數據,下降沿寫數據

      **入口參數:命令或地址

      **出口參數:讀出的字節

      ************************************************************************************/       

      UINT8 SPI_RW(UINT8 _byte)

      {

      UINT8 bit_ctr;

      for(bit_ctr=0;bit_ctr<8;bit_ctr++)   

      {

      MOSI = (_byte & 0x80);         // 輸出,先輸出高位

      _byte = (_byte << 1);// 下一位輸出值移位到高位

      SCK = 1;// SCK置位

      _byte |= MISO;        // MISO當前值    

      SCK = 0;  // SCK清零 

      }

      return(_byte);  // 返回讀出的值

      }

       

      /**************************************************************

      **函數名稱:SPI_Write_Reg()

      **函數描述:寫寄存器的值

      **入口參數:寄存器地址+命令,寄存器的值

      **出口參數:無

      **************************************************************/

      void SPI_Write_Reg(UINT8 reg, UINT8 value)                 

      {

      CSN = 0;// 清零CSN,使能SPI

      SPI_RW(reg);// 寫寄存器地址+命令

      SPI_RW(value);// 寫相應的值

      CSN = 1;                   // 置位CSN,禁止SPI

      }

      /**************************************************************

      **函數名稱:SPI_Read_Reg()

      **函數描述:讀寄存器的值

      **入口參數:寄存器地址+命令

      **出口參數:寄存器的值

      **************************************************************/

      UINT8 SPI_Read_Reg(UINT8 reg)

      {

      BYTE value;

      CSN = 0;                // 清零CSN,使能SPI

      SPI_RW(reg);            // 寫寄存器地址+命令

      value = SPI_RW(0);      // 讀寄存器的值

      CSN = 1;// 置位CSN,禁止SPI

       

      return(value);         // 返回寄存器的值

      }

      /**************************************************************

      **函數名稱:SPI_Read_Buf()

      **函數描述:讀多字節寄存器的值

      **入口參數:寄存器地址+命令,返回值的地址,寄存器值的長度

      **出口參數:無

      **************************************************************/  

      void SPI_Read_Buf(UINT8 reg, UINT8 *pBuf, UINT8 bytes)     

      {

      UINT8 byte_ctr;&

      CSN = 0;// 清零CSN,使能SPI

      SPI_RW(reg);       // 寫寄存器地址+命令

      for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)

      pBuf[byte_ctr] = SPI_RW(0);    // 讀寄存器的值

      CSN = 1;// 置位CSN,禁止SPI

      }

      /**************************************************************

      **函數名稱:SPI_Write_Buf()

      **函數描述:寫多字節寄存器的值

      **入口參數:寄存器地址+命令,寫入值的地址,寄存器值的長度

      **出口參數:無

      ***************************************************************/     

      void SPI_Write_Buf(UINT8 reg, UINT8 *pBuf, UINT8 bytes) reentrant    

      {

      UINT8 byte_ctr;

      CSN = 0;// 清零CSN,使能SPI

      SPI_RW(reg);    // 寫寄存器地址+命令

      for(byte_ctr=0; byte_ctr<bytes; byte_ctr++) // 寫寄存器的值 

      SPI_RW(*(pBuf+byte_ctr)); 

      CSN = 1;// 置位CSN,禁止SPI      

      }

       

      /**************************************************************

      **函數名稱:Enter_PRX()

      **函數描述:切換到PRX模式

      **入口參數:無

      **出口參數:無

      ***************************************************************/

      void Enter_PRX()

      {

      UINT8 value;

       

      SPI_Write_Reg(FLUSH_RX,0);//清空接收FIFO

       

      value=SPI_Read_Reg(STATUS);              // STATUS寄存器

      SPI_Write_Reg(WRITE_REG+STATUS,value);    // 清零RX_DR、TX_DS、MAX_RT標志

       

      value=SPI_Read_Reg(CONFIG);              // CONFIG寄存器

       

      value=value&0xfd;//1清零

        SPI_Write_Reg(WRITE_REG + CONFIG, value); // 清零PWR_UP位,進入POWER_DOWN模式

       

      value=value|0x03;//置位位1,位0

        SPI_Write_Reg(WRITE_REG + CONFIG, value); // 置位PWR_UP,PRIM_RX,進入PRX模式

      }

       

      /**************************************************************

      **函數名稱:Enter_PTX()

      **函數描述:切換到PTX模式

      **入口參數:無

      **出口參數:無

      ***************************************************************/

      void Enter_PTX()

      {

      UINT8 value;

       

      SPI_Write_Reg(FLUSH_TX,0);//清空接收FIFO

       

      value=SPI_Read_Reg(STATUS);           // STATUS寄存器

      SPI_Write_Reg(WRITE_REG+STATUS,value); // 清零RX_DR、TX_DS、MAX_RT標志

      value=SPI_Read_Reg(CONFIG);           // CONFIG寄存器

      value=value&0xfd;//1清零

      SPI_Write_Reg(WRITE_REG+CONFIG, value);// 清零PWR_UP位,進入POWER_DOWN模式

       

      value=value|0x02;//置位位1

      value=value&0xfe;//0清零

      SPI_Write_Reg(WRITE_REG + CONFIG, value); // 置位PWR_UP,清零PRIM_RX,進入PTX模式

      }

       

      /**************************************************************

      **函數名稱:SwitchCFG()

      **函數描述:切換寄存器組

      **入口參數:將要切換到寄存器組,01

      **出口參數:無

      ***************************************************************/

      void SwitchCFG(char _cfg)

      {

      UINT8 Tmp;

       

      Tmp=SPI_Read_Reg(STATUS);//STATUS寄存器

       

      Tmp=Tmp&0x80;

       

      if( ( Tmp&&(_cfg==0) )

      ||( (Tmp==0)&&_cfg ) ) //判斷當前寄存器組是否是將要切換的

      {

      SPI_Write_Reg(ACTIVATE_CMD,0x53);   //執行切換

      }

      }

       

      /**************************************************************

      **函數名稱:Send_Packet()

      **函數描述:發射數據包

      **入口參數:寫發射FIFO命令,寫入值的地址,寄存器值的長度

      **出口參數:無

      ***************************************************************/

      void Send_Packet(UINT8 type,UINT8* pbuf,UINT8 len)

      {

      UINT8 fifo_sta;

       

      fifo_sta=SPI_Read_Reg(FIFO_STATUS);  // 讀寄存器FIFO_STATUS

       

      if((fifo_sta&FIFO_STATUS_TX_FULL)==0) //判斷發射FIFO是否滿

        SPI_Write_Buf(type, pbuf, len);   // 寫發射FIFO

      }

       

      /**************************************************************

      **函數名稱:Receive_Packet()

      **函數描述:接收數據包

      **入口參數:讀接收FIFO命令,讀出值的地址

      **出口參數:數據包的長度

      ***************************************************************/

      UINT8 Receive_Packet(UINT8 rx_buf[MAX_PACKET_LEN])

      {

      UINT8 len,fifo_sta;

       

      do

      {

      len=SPI_Read_Reg(R_RX_PL_WID_CMD);// 讀數據包長度

       

      if(len<=MAX_PACKET_LEN)

      {

      SPI_Read_Buf(RD_RX_PLOAD,rx_buf,len);// 讀接收FIFO

      }

      else

      {

      SPI_Write_Reg(FLUSH_RX,0);//數據包長度大于最大長度,清空FIFO

      }

       

      fifo_sta=SPI_Read_Reg(FIFO_STATUS);//讀寄存器FIFO_STATUS

      }while((fifo_sta&FIFO_STATUS_RX_EMPTY)==0); //如果不為空,繼續讀

      return(len);//返回數據包長度

      }

       

      /**************************************************************

      **函數名稱:JF24D_Init()

      **函數描述:初始化JF24D

      **入口參數:無

      **出口參數:無

      ***************************************************************/  

      void JF24D_Init()

      {

      INT8 i,j;

      UINT8 WriteArr[4];

       

      /************************初始化寄存器組1*********************************/

       SwitchCFG(1);   //切換到寄存器組1

       

       for(i=0;i<=8;i++) //寫前0-8號寄存器

       

        for(j=0;j<4;j++) 

      {   

          WriteArr[j]=(RegArrFSKAnalog[i]>>(8*(j) ) )&0xff;  //將寄存器值存放到數組中,先高字節

         

        SPI_Write_Buf((WRITE_REG|i),&(WriteArr[0]),4); //寫寄存器

       

       

       for(i=9;i<=13;i++) //9-13號寄存器

       

        for(j=0;j<4;j++) 

          WriteArr[j]=(RegArrFSKAnalog[i]>>(8*(3-j) ) )&0xff; //將寄存器值存放到數組中,先低字節

         

        SPI_Write_Buf((WRITE_REG|i),&(WriteArr[0]),4); //寫寄存器

       }

       

      SPI_Write_Buf((WRITE_REG|14),&(RegArrFSKAnalogReg14[0]),11); //14號寄存器

       

      /***************REG4[0]=0,REG4[1]=0,REG4[3]=0,REG4[23]=0 **************/

       for(j=0;j<4;j++) 

         WriteArr[j]=(RegArrFSKAnalog[4]>>(8*(j) ) )&0xff; 

        

       WriteArr[3]=WriteArr[3]&0xf4; 

       WriteArr[1]=WriteArr[1]&0x7F; 

       SPI_Write_Buf((WRITE_REG|4),&(WriteArr[0]),4); 

       

      /***********REG4[25]=1,寫REG4[26]=1 *********************************/

       WriteArr[0]=WriteArr[0]|0x06; 

       SPI_Write_Buf((WRITE_REG|4),&(WriteArr[0]),4); 

       

      /*************REG4[25]=0,寫REG4[26]=0*****************************/ 

      WriteArr[0]=WriteArr[0]&0xf9; 

       SPI_Write_Buf((WRITE_REG|4),&(WriteArr[0]),4); 

       

      /************REG4[0]=1,REG4[1]=1,REG4[3]=1,REG4[23]=1***********/

       for(j=0;j<4;j++) 

         WriteArr[j]=(RegArrFSKAnalog[4]>>(8*(j) ) )&0xff; 

        

       SPI_Write_Buf((WRITE_REG|4),&(WriteArr[0]),4); 

       

      /******************初始化寄存器組0**********************************/

       SwitchCFG(0); //切換到寄存器組0

       

       for(i=20;i>=0;i--) 

         SPI_Write_Reg((WRITE_REG|RegArrFSK[i][0]),RegArrFSK[i][1]);    //初始化前面定義的寄存器

        

       

       SPI_Write_Buf((WRITE_REG+RX_ADDR_P0),RX0_Address,5); //寫寄存器10,通道0地址   寄存器地址+命令,返回值的地址,寄存器值的長度

         

       SPI_Write_Buf((WRITE_REG+RX_ADDR_P1),RX1_Address,5); //寫寄存器11,通道1地址,及其余通道高位地址

        

       SPI_Write_Buf((WRITE_REG+TX_ADDR),RX0_Address,5); //寫寄存器16,發射通道地址

       

       i=SPI_Read_Reg(29); //讀寄存器29

       if(i==0) //是否需要激活

         SPI_Write_Reg(ACTIVATE_CMD,0x73);  //激活寄存器29

       for(i=22;i>=21;i--) 

         SPI_Write_Reg((WRITE_REG|RegArrFSK[i][0]),RegArrFSK[i][1]); //寫寄存器28、29

        }

       

      /************************發射連續波CW*****************************/

      #ifdef TX_CW

      SwitchCFG(1); 

       WriteArr[0] = 0x41; 

       WriteArr[1] = 0x11; 

       WriteArr[2] = 0x04; 

       WriteArr[3] = 0x21; 

          SPI_Write_Buf((WRITE_REG|4),&(WriteArr[0]),4); 

       while(1); 

      #endif

      }

      ?
      安陽市新世紀電子研究所有限公司 電話:0372-5968708  豫ICP備05021267號-1  豫公安網備 41050202000031號

      <delect id="800et"></delect>
      <xmp id="800et"><strong id="800et"></strong>
        <noframes id="800et">

        <dd id="800et"></dd>
      1. <menuitem id="800et"><strong id="800et"><acronym id="800et"></acronym></strong></menuitem>
        1. <menuitem id="800et"></menuitem>
          青青国产万部在线视频高清|日本熟妇色一本在线看|中文字幕av无码免费久久|国产精品激情欧美可乐视频|丁五月综合缴情综合久久