乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      nRF905

       劉曦的書房 2016-06-12

      基于nRF905 模塊的AT89S 單片機無線收發(fā)系統(tǒng)設計

      管腳 名稱 管腳功能 說明

      1 VCC 電源 電源+3.3~3.6V DC

      2 TX_EN 數(shù)字輸入 工作模式選擇

      3 TRX_CE 數(shù)字輸入 使能芯片發(fā)射或接收

      4 PWR_UP 數(shù)字輸入 芯片上電

      5 uCLK 時鐘輸出 (未使用)

      6 CD 數(shù)字輸出 載波檢測

      7 AM 數(shù)字輸出 地址匹配

      8 DR 數(shù)字輸出 接收或發(fā)射數(shù)據(jù)完成

      9 MISO SPI 接口 SPI 輸出

      10 MOSI SPI 接口 SPI 輸入

      11 SCK SPI 時鐘 SPI 時鐘

      12 CSN SPI 使能 SPI 使能

      13、14 GND 地 接地

      下面為典型的 nRF905 模塊數(shù)據(jù)發(fā)送流程[3]:

      (1)當微控制器要發(fā)送數(shù)據(jù)時,將接收機的地址和發(fā)

      送數(shù)據(jù)通過SPI 接口傳輸給nRF905 模塊;

      (2)微控制器設置TRX_CE 和TX_EN 管腳同時置為

      高電平,啟動發(fā)送端的nRF905 模塊為發(fā)送模式;

      (3)發(fā)送端的nRF905 模塊發(fā)送過程處理:

      a)射頻寄存器開啟;

      b)數(shù)據(jù)打包(加字頭和CRC 校驗碼);

      c)數(shù)據(jù)包發(fā)送;

      d)當數(shù)據(jù)包發(fā)送結束,將數(shù)據(jù)發(fā)送完成管腳(DR 管腳)

      置為高電平;

      (4)如果AUTO_RETRAN 被設置為高,nRF905 模塊

      將連續(xù)地發(fā)送數(shù)據(jù)包,直到TRX_CE 被設置為低;

      (5)TRX_CE 被設置為低時,nRF905 模塊數(shù)據(jù)包發(fā)送

      過程結束并回到待機模式。

      AT89S單片機控制nRF905 模塊數(shù)據(jù)發(fā)送流程圖如圖3

      所示。

      下面為典型的 nRF905 模塊數(shù)據(jù)接收流程[4]:

      (1)微控制器控制TRX_CE 為高電平、TX_EN 為低電

      平,nRF905 模塊進入接收模式;

      (2)650us 后,nRF905 模塊監(jiān)測空中的信息,等待接

      收數(shù)據(jù);

      (3)當nRF905 模塊檢測到與接收頻率相同的載波時,

      設置載波檢測管腳(CD 管腳)為高電平;

      (4)當nRF905 模塊接收到有效的地址時,設置地址匹

      配管腳(AM 管腳)為高電平;

      (5)當一個正確的數(shù)據(jù)包接收完畢后,nRF905 模塊自

      動去掉數(shù)據(jù)包的字頭、地址和CRC 校驗碼,然后將數(shù)據(jù)接

      受完成管腳置為高電平;

      (6)微控制器將TRX_CE 設置為低電平;

      (7)微控制器通過SPI 接口以一定的速率提取數(shù)據(jù)包

      中的有效接收數(shù)據(jù);

      (8)當所有的有效數(shù)據(jù)接收完畢,微控制器控制nRF905

      模塊數(shù)據(jù)接收完成管腳(DR 管腳)和地址匹配管腳(AM

      管腳)為低電平;

      (9)nRF905 進入待機模式。

      說明:(1)VCC電壓范圍為DC 3.3V~3.6V之間,不能超過3.6V否則會燒壞模塊。

      (2)模塊

      附加更加詳細的收發(fā)程序,包括解釋:

      ////////////////////////////////////////////整體參數(shù)////////////////////////////////////////////////////

      //NewMsg-RF905-共有四種工作模式,其中有兩種活動RX/TX模式和兩種節(jié)電模式。

      //活動模式

      // ShockBurst RX

      //ShockBurst TX

      //節(jié)電模式

      //掉電和SPI編程

      //工作模式:

      //┏━━━━┳━━━━┳━━━━┳━━━━━━━━━━━━━━━━┓

      //┃PWR UP ┃ TRX CE ┃ TX_EN ┃工作模式 ┃

      //┣━━━━╋━━━━╋━━━━╋━━━━━━━━━━━━━━━━┫

      //┃0 ┃ x ┃ x ┃掉電和SPI編程 ┃

      //┣━━━━╋━━━━╋━━━━╋━━━━━━━━━━━━━━━━┫

      //┃1 ┃ 0 ┃ x ┃ Standby和SPI編程 ┃

      //┣━━━━╋━━━━╋━━━━╋━━━━━━━━━━━━━━━━┫

      //┃1 ┃ 1 ┃ O ┃ShockB urst RX ┃

      //┣━━━━╋━━━━╋━━━━╋━━━━━━━━━━━━━━━━┫

      //┃ 1 ┃ l ┃ 1 ┃ShockBurst T X ┃

      //┗━━━━┻━━━━┻━━━━┻━━━━━━━━━━━━━━━━?

      //ShockBurst TX發(fā)送流程:

      //典型的RF905發(fā)送流程分以下幾步:

      //A.當微控制器有數(shù)據(jù)要發(fā)送時,通過SPI接口,按時序把接收機的地址和要發(fā)送的數(shù)據(jù)送傳給RF905,

      //SPI接口的速率在通信協(xié)議和器件配置時確定;

      //B.微控制器置高TRX_CE和TX_EN,激發(fā)RF905的ShockBurs發(fā)送模式;

      //C.RF905的ShockBurs tTMI發(fā)送:

      //(1)射頻寄存器自動開啟;

      //(2)數(shù)據(jù)打包(加字頭和CRC校驗碼);

      //(3)發(fā)送數(shù)據(jù)包;

      //(4)當數(shù)據(jù)發(fā)送完成,數(shù)據(jù)準備好引腳被置高;

      //D.AUTO_REI'RAN被置高,RF905不斷重發(fā),直到TRX_CE被置低;

      //E.當TRX-CE被置低,RF905發(fā)送過程完成,自動進入空閑模式。

      //注意:ShockBurs tTM工作模式保證,一旦發(fā)送數(shù)據(jù)的過程開始,無

      // 論TRX_EN和TX-EN引腳是高或低,發(fā)送過程都會被處理完。只有

      // 在前一個數(shù)據(jù)包被發(fā)送完畢,RF905才能接受下一個發(fā)送數(shù)據(jù)包

      //ShockBurst RX接收流程

      // 接收流程

      //A.當TRX_CE為高、TX_EN為低時,RF905進入ShockBurs tTM接收模式;

      //B.650us后,RF905不斷監(jiān)測,等待接收數(shù)據(jù);

      //C.當RF905檢測到同一頻段的載波時,載波檢測引腳被置高;

      //D.當接收到一個相匹配的地址,AM引腳被置高;

      //E.當一個正確的數(shù)據(jù)包接收完畢,RF905自動穆去字頭、地址和CRC

      // 校驗位,然后把DR引腳置高

      //F.微控制器把TRX_CE置低,nRF905進入空閑模式;

      //G.微控制器通過SPI口,以一定的速率把數(shù)據(jù)穆到微控制器內(nèi);

      //H.彼?械氖?萁郵脹甌?,nRF905把DR引腳和AM引腳置低;

      //當正在接收一個數(shù)據(jù)包時,TRX_CE或TX_EN引腳的狀態(tài)發(fā)生改變,

      //RF905立即把其工作模式改變,數(shù)據(jù)包則丟失。當微處理器接到AM

      //引腳的信號之后, 其就知道RF905正在接收數(shù)據(jù)包,其可以決定是

      //讓RF905繼續(xù)接收該數(shù)據(jù)包還是進入另一個工作模式。

      ///////節(jié)能模式

      //RF905的節(jié)能模式包括關機模式和節(jié)能模式。

      //在關機模式,RF905的工作電流最小,一般為2.SuA。進入關機模

      //式后,RF905保持配置字中的內(nèi)容,但不會接收或發(fā)送任何數(shù)據(jù)。空

      //閑模式有利于減小工作電流,其從空閑模式到發(fā)送模式或接收模式的

      //啟動時間也比較短。在空闌模式下,RF905內(nèi)部的部分晶體振蕩器處

      //于工作狀態(tài)?

      //五、配置NeWMsg-RF905模塊

      //所有配置字都是通過SPlI接口送給RF905。SIP接口的工作方式可

      //通過SPlI指令進行設置。當RF905處于空閑模式或關機模式時,SPI

      //按口可以保持在工作狀?

      //SPI寄存器配置

      //SPI接口由5個內(nèi)部寄存器組成。執(zhí)行寄存器的回讀模式來確認寄存器的內(nèi)容。

      //狀態(tài)寄存器(Status-Register)

      //寄存器包含數(shù)據(jù)就緒(DR)和地址匹配(AM)狀態(tài)。

      //RF配置寄存器(RF-Configuration Register)

      //寄存器包含收發(fā)器的頻率,輸出功率等配置信息。

      //發(fā)送地址(IX-Address)

      //寄存器包含目標器件地址,字節(jié)長度由配置寄存器設置。

      //發(fā)送有效數(shù)據(jù)( IX-Payload)

      //寄存器包含發(fā)送的有效ShockBurst數(shù)據(jù)包數(shù)據(jù),字節(jié)長度由配置寄存器設置。

      //接收有效數(shù)據(jù)( IX-Payload)

      //寄存器包含接收到的有效ShockBurst數(shù)據(jù)包數(shù)據(jù),字節(jié)長度由配置寄存器設置。在寄存器中的有效數(shù)據(jù)由

      //數(shù)據(jù)準備就緒(DR)指荊

      //SPI指令設置

      //用于SPI接口的有用命令見下表。當CSN為低時,SPI接口開始等待一條指令,任何一條新指令均由CSN

      //的由高到低的轉換開始。

      //┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓

      //┃ SPI串行接口指令 ┃

      //┣━━━━━━┳━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫

      //┃指令名稱 ┃指令格式 ┃操作 ┃

      //┣━━━━━━╋━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫

      //┃W CONFIG ┃ OOOOAAAA ┃寫配置寄存器。AAAA指出寫操作的開始字節(jié),字節(jié)數(shù)量取決于 ┃

      //┃(WC) ┃ ┃AAAA指出的開始地址。 ┃

      //┣━━━━━━╋━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫

      //┃R CONFIG ┃ OOOIAAAA ┃讀配置寄存器。AAAA指出讀操作的開始字節(jié),字節(jié)數(shù)量取決于 ┃

      //┃(RC) ┃ ┃AAAA指出的開始地址。 ┃

      //┣━━━━━━╋━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫

      //┃W TX PAYLOA ┃ 00100000 ┃寫TX有效數(shù)據(jù):1-32字節(jié)。寫操作全部從字節(jié)o開始。 ┃

      //┃D ┃ ┃ ┃

      //┃(WTP) ┃ ┃ ┃

      //┣━━━━━━╋━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫

      //┃R TX PAYLOA ┃ 00100001 ┃讀TX有效數(shù)據(jù):1-32字節(jié)。讀操作全部從字節(jié)o開始。 ┃

      //┃D ┃ ┃ ┃

      //┃(RTP) ┃ ┃ ┃

      //┣━━━━━━╋━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫

      //┃W TX ADDRES ┃00100010 ┃寫TX地址:1-4字節(jié)。寫操作全部從字節(jié)o開始 ┃

      //┃S ┃ ┃ ┃

      //┃(WTA) ┃ ┃ ┃

      //┣━━━━━━╋━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫

      //┃R TX ADDRES ┃0010001 1 ┃讀TX地址:1-4字節(jié)。讀操作全部從字節(jié)o開始。 ┃

      //┃S ┃ ┃ ┃

      //┃(RTA) ┃ ┃ ┃

      //┣━━━━━━╋━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫

      //┃R RX PAYLOA ┃ 001 001 00 ┃讀RX有效數(shù)據(jù):1-32字節(jié)。讀操作全部從字節(jié)o開始。 ┃

      //┃D ┃ ┃ ┃

      //┃(RRP) ┃ ┃ ┃

      //┣━━━━━━╋━━━━━━╋━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫

      //┃CHANNEL CON ┃lOOOpphc ┃快速設置配置寄存器中CH NO,HFREQ_PLL和PA PWR的專用 ┃

      //┃FIG ┃cccccccc ┃命令_ CH NO=ccccccccc: HFREQ_PLL=h: PA_PWR=pp ┃

      //┃(CC) ┃ ┃ ┃

      //┗━━━━━━┻━━━━━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━タ

      #include <reg52.h>

      //#include <ABSACC.h>

      //#include <intrins.h>

      //#include <stdio.h>

      ////----------------------------------------------------------------------------------------------------------------

      #define uint unsigned int

      #define uchar unsigned char

      //----------------------------------------------------------------------------------------------------------------

      #define BYTE_BIT00x01

      #define BYTE_BIT1 0x02

      #define BYTE_BIT2 0x04

      #define BYTE_BIT3 0x08

      #define BYTE_BIT4 0x10

      #define BYTE_BIT5 0x20

      #define BYTE_BIT6 0x40

      #define BYTE_BIT70x80

      //----------------------------------------------------------------------------------------------------------------

      bdata unsigned char DATA_BUF;//可位尋址的片內(nèi)RAN

      #define DATA7((DATA_BUF&BYTE_BIT7) != 0)

      #define DATA0 ((DATA_BUF&BYTE_BIT0) != 0)

      sbitflag=DATA_BUF^7;

      sbitflag1=DATA_BUF^0;

      //------------------------------------ 發(fā)送數(shù)據(jù)緩沖區(qū)-------------------------------------------------

      #define TxRxBuf_Len 4

      unsigned char TxRxBuf[TxRxBuf_Len]={0x29,0x30,0x31,0x32,};

      code TxAddress[4]={0xcc,0xcc,0xcc,0xcc};

      char tf;

      //----------------------------------------NRF905工作模式控制端口------------------------------------------------------

      sbitTXEN=P2^4;//發(fā)射使能

      sbitTRX_CE=P3^2;//發(fā)射接收使能

      sbitPWR=P2^3;

      //----------------------------------------LED顯示端口---------------------------------------------------

      sbit LED=P1^0;

      //----------------------------------------NRF905 數(shù)據(jù)交換端口(SPI)---------------------------------------------------

      sbitMISO=P2^6;//輸出

      sbitMOSI=P2^1;//輸入

      sbitSCK=P2^5;//時鐘

      sbitCSN=P2^0;//使能

      //----------------------------------------nrf905狀態(tài)端口---------------------------------------------------------

      sbitAM=P2^7;

      sbitDR=P3^3;

      sbitCD=P2^2;

      //---------------------------------------------------------------------------------------------------------------

      //----------------------------------------按鍵端口-------------------------------------------------------

      sbitKEY=P3^7;

      //---------------------nrf905控制指令-------------------------------------------

      #define WC0x00 //寫配置寄存器

      #define RC0x10 //讀配置寄存器

      #define WTP0x20 //向TX-Payload寄存器寫入發(fā)送有效數(shù)據(jù)

      #define RTP0x21 //向TX-Payload寄存器讀取發(fā)送有效數(shù)據(jù)

      #define WTA0x22 //向TX-Addtess寄存器寫入發(fā)送地址

      #define RTA0x23 //向TX-Addtess寄存器讀取發(fā)送地址

      #define RRP0x24 //從RX-Payload寄存器讀取接收到的有效數(shù)據(jù)

      //------------------------------------------NRF905寄存器配置------------------------------------------------

      unsigned char idata RFConf[11]=

      {

      0x00, //配置命令//

      0x4c, //CH_NO,配置頻段在430MHZ字節(jié)0,配置頻段

      0x0c, //輸出功率為10db,不重發(fā),節(jié)電為正常模式 字節(jié)1,000 1100

      0x44, //地址寬度設置,為4字節(jié)字節(jié)2,6:4 是TX地址寬度, 2:0是RX地址寬度

      0x04,0x04, //接收發(fā)送有效數(shù)據(jù)長度為4字節(jié)字節(jié)3(RX),字節(jié)(TX):可設置為1,2,4,8,16,32 字節(jié),其中6,7 兩位為空,寫00,則4字節(jié)為:0000 0100 : 0x04 依次類推

      0xCC,0xCC,0xCC,0xCC, //接收地址字節(jié)5到字節(jié)8

      0x58, //CRC充許,8位CRC校驗,外部時鐘信號不使能,16M晶振 字節(jié)9,

      };

      //================================================延時===========================================================

      void nrf905_Delay(int n)

      {

      uint i;

      while(n--)

      for(i=0;i<80;i++);

      }

      //=================================================SPI讀函數(shù)=======================================================

      //步驟一:MISO線準備好需要發(fā)送的數(shù)據(jù)位

      //步驟二:SCK置高,主機讀取MISO線上的數(shù)據(jù)

      //步驟三:SCK置低,準備接收數(shù)據(jù)的下一位

      // 以上步驟循環(huán)執(zhí)行8次,通過SPI從器件上讀取數(shù)據(jù)完成!

      //數(shù)據(jù)傳送時候。高位在前,低位在后。

      unsigned char SpiRead(void)

      {

      unsigned char j;

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

      {

      DATA_BUF=DATA_BUF<<1;

      SCK=1;

      if (MISO)//讀取最高位,保存至最末尾,通過左移位完成整個字節(jié)

      {

      DATA_BUF|=BYTE_BIT0;

      }

      else

      {

      DATA_BUF&=~BYTE_BIT0;

      }

      SCK=0;

      }

      return DATA_BUF;

      }

      //===========================================SPI寫函數(shù)===============================================================

      //步驟一:MOSI線準備好需要發(fā)送的數(shù)據(jù)位

      //步驟二:SCK置高,器件讀取MOSI線上的數(shù)據(jù)

      //步驟三:SCK置低,準備發(fā)送數(shù)據(jù)的下一位

      // 以上步驟循環(huán)執(zhí)行8次,通過SPI從器件上發(fā)送數(shù)據(jù)完成!

      //數(shù)據(jù)傳送時候。低位在前,高位在后。

      void SpiWrite(unsigned char send)

      {

      unsigned char i;

      DATA_BUF=send;

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

      {

      if (DATA7)//總是發(fā)送最高位

      {

      MOSI=1;//SPI輸入,主機寫操作

      }

      else

      {

      MOSI=0;

      }

      SCK=1;

      DATA_BUF=DATA_BUF<<1;

      SCK=0;

      }

      }

      //--------------------------------------初始化nRF905---------------------------------------------

      void nRF905Init(void)

      {

      CSN=1;// Spi disable

      SCK=0;// Spi clock line init low

      DR=1;// Init DR for input

      AM=1;// Init AM for input

      CD=1;// Init CD for input

      PWR=1;// nRF905 power on

      TRX_CE=0;// Set nRF905 in standby mode

      TXEN=0;// set radio in Rx mode

      }

      //-----------------------------------------------------初始化寄存器-----------------------------------------------

      //步驟一:CSN置低電平,SPI接口開始等待第一條命令

      //步驟二:調(diào)用SpiWrite函數(shù),向nrf905發(fā)送WC指令,準備寫入配置信息

      //步驟三:反復調(diào)用SpiWrite函數(shù),向器件配置寄存器寫入配置信息

      //步驟四:CSN置高電平,結束SPI通訊。即nrf905配置完成!

      void Config905(void)

      {

      uchar i;

      CSN=0;// CSN片選信號,SPI使能

      //SpiWrite(WC);// 向905芯片寫配置命令

      for (i=0;i<11;i++)// 循環(huán)寫入配置信息

      {

      SpiWrite(RFConf[i]); //RxTxConf保存預先設置好的配置信息

      }

      CSN=1;// 結束SPI數(shù)據(jù)傳輸

      }

      //-------------------------------發(fā)送數(shù)據(jù)打包---------------------------------------------------

      //步驟一:通過SpiWrite函數(shù)發(fā)送WTP命令,準備寫入TX有效數(shù)據(jù)

      //步驟二:循環(huán)調(diào)用SpiWrite向TX-Payload寄存器寫入有效數(shù)據(jù)(中間必須夾有CSN電平變化)

      //步驟三:延時

      //步驟四: 通過SpiWrite函數(shù)發(fā)送WTA命令,準備寫入TX地址

      //步驟五:循環(huán)調(diào)用SpiWrite向TX-Address寄存器寫入TX地址

      //步驟六:TRC_CE=1;開始發(fā)送數(shù)據(jù),延時,nrf905數(shù)據(jù)發(fā)送完成,

      //當nrf905接收到一條完成的信息時,會將DR引腳置高。

      void TxPacket(uchar *TxRxBuf)

      {

      uchar i;

      //Config905();

      CSN=0;

      SpiWrite(WTP);// Write payload command

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

      {

      SpiWrite(TxRxBuf[i]);// 寫入32直接發(fā)送數(shù)據(jù)

      }

      CSN=1;

      nrf905_Delay(1);// 關閉SPI,保存寫入的數(shù)據(jù)

      CSN=0;// SPI使能,保存寫入的數(shù)據(jù)

      SpiWrite(WTA);// 寫數(shù)據(jù)至地址寄存器

      for (i=0;i<4;i++)// 寫入四字節(jié)地址 寫入與對方地址一樣的地址

      {

      SpiWrite(TxAddress[i]);

      }

      CSN=1;// 關閉SPI

      TRX_CE=1;// 進入發(fā)送模式,啟動射頻發(fā)送

      nrf905_Delay(1);//進入ShockBurst發(fā)送模式后,芯片保存數(shù)據(jù)

      TRX_CE=0;// 發(fā)送完成后返回ATANDBY模式 while (DR!=1);

      }

      //----------------------------------------------設置發(fā)送初始狀態(tài)---------------------------------------------

      void SetTxMode(void)

      {

      TRX_CE=0;

      TXEN=1;

      nrf905_Delay(1); // nrf905_Delay for mode change(>=650us)

      }

      //步驟一:TRX_ce=0;必須將次引腳置低,使905進入standby模式

      //步驟二:發(fā)送RRP指令

      //步驟三:循環(huán)調(diào)用SpiWrite函數(shù),讀取接收到的數(shù)據(jù)

      //步驟四:等待DR和AM引腳復位為低電平

      // AM 地址匹配,接收到有效地址,被置高

      // DR 接收到有效數(shù)據(jù)包,并解碼后,被置高,當所有有效數(shù)據(jù)被讀取后,

      // nrf905降AM和DR置低,最后需要注意的是,必須首先設置器件的

      // 發(fā)送/接收模式才能保證有效的數(shù)據(jù)發(fā)生接收

      //-----------------------------------------------設置nrf905進入接收模式---------------------------------------------------

      void SetRxMode(void)

      {

      TXEN=0;

      TRX_CE=1;

      nrf905_Delay(1); // nrf905_Delay for mode change(>=650us)

      }

      //-------------------------------------判斷數(shù)據(jù)接收狀態(tài)-----------------------------------------------------

      unsigned char CheckDR(void)//檢查是否有新數(shù)據(jù)傳入 Data Ready

      {

      DR=1;

      //通過對端口寫1,可以使端口為輸入狀態(tài),這51的 特性。不熟悉者可以參閱51相關書籍作證(將DR端口設置為輸入狀態(tài)。)

      if (DR==1)

      {

      DR=0;

      return 1;

      }

      else

      {

      return 0;

      }

      }

      //----------------------------NRF905接收到數(shù)據(jù)后讀取保存------------------------------------------------------------

      void RxPacket(void)

      {

      uchar i;

      nrf905_Delay(1);

      //TRX_CE=0;// 設置905進入待機模式

      nrf905_Delay(100);

      TRX_CE=0;

      CSN=0;// 使能SPI

      nrf905_Delay(1);

      SpiWrite(RRP); //準備讀取接收到的數(shù)據(jù)

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

      {

      TxRxBuf[i]=SpiRead();// 通過SPI接口從905芯片讀取數(shù)據(jù)

      }

      CSN=1;//禁用SPI

      nrf905_Delay(10);

      TRX_CE=1;

      }

      //--------------------------------------------------------數(shù)據(jù)接收------------------------------------------------

      void RX(void)

      {

      SetRxMode();

      // while (CheckDR()==0); 為了實現(xiàn)雙向通信,就不能一直處于接收等待狀態(tài),所以注釋掉

      nrf905_Delay(10);

      RxPacket();

      if(TxRxBuf[0]==0x29)

      {

      LED=0;

      nrf905_Delay(300);

      LED=1;

      nrf905_Delay(300);//接收到數(shù)據(jù) 后閃爍

      }

      }

      //-----------------------------------------------------------------------------------------------------------------

      void main(void)

      {

      nRF905Init();

      Config905();

      LED=1;

      while(1)

      {

      RX();

      if(KEY ==0 )

      {

      while(KEY==0);

      tf = 1 ;

      TxRxBuf[0]=0x29;

      }

      if (tf==1)

      {

      SetTxMode();

      TxPacket(TxRxBuf);// 發(fā)送命令數(shù)據(jù)

      LED=0;

      nrf905_Delay(300);

      LED=1;

      nrf905_Delay(300);//發(fā)送后LED閃爍

      tf = 0;

      }

      }

      }

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多