日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

nRF905

 劉曦的書房 2016-06-12

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

管腳 名稱 管腳功能 說明

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)當(dāng)微控制器要發(fā)送數(shù)據(jù)時,將接收機的地址和發(fā)

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

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

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

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

a)射頻寄存器開啟;

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

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

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

置為高電平;

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

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

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

過程結(jié)束并回到待機模式。

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

所示。

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

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

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

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

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

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

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

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

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

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

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

受完成管腳置為高電平;

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

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

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

(8)當(dāng)所有的有效數(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.當(dāng)微控制器有數(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)當(dāng)數(shù)據(jù)發(fā)送完成,數(shù)據(jù)準(zhǔn)備好引腳被置高;

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

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

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

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

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

//ShockBurst RX接收流程

// 接收流程

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

//五、配置NeWMsg-RF905模塊

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

//通過SPlI指令進行設(shè)置。當(dāng)RF905處于空閑模式或關(guān)機模式時,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)

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

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

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

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

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

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

//SPI指令設(shè)置

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

//的由高到低的轉(zhuǎn)換開始。

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

//┃ 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 ┃快速設(shè)置配置寄存器中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, //地址寬度設(shè)置,為4字節(jié)字節(jié)2,6:4 是TX地址寬度, 2:0是RX地址寬度

0x04,0x04, //接收發(fā)送有效數(shù)據(jù)長度為4字節(jié)字節(jié)3(RX),字節(jié)(TX):可設(shè)置為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線準(zhǔn)備好需要發(fā)送的數(shù)據(jù)位

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

//步驟三:SCK置低,準(zhǔn)備接收數(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線準(zhǔn)備好需要發(fā)送的數(shù)據(jù)位

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

//步驟三:SCK置低,準(zhǔn)備發(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指令,準(zhǔn)備寫入配置信息

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

//步驟四:CSN置高電平,結(jié)束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保存預(yù)先設(shè)置好的配置信息

}

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

}

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

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

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

//步驟三:延時

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

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

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

//當(dāng)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);// 關(guān)閉SPI,保存寫入的數(shù)據(jù)

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

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

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

{

SpiWrite(TxAddress[i]);

}

CSN=1;// 關(guān)閉SPI

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

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

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

}

//----------------------------------------------設(shè)置發(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引腳復(fù)位為低電平

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

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

// nrf905降A(chǔ)M和DR置低,最后需要注意的是,必須首先設(shè)置器件的

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

//-----------------------------------------------設(shè)置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相關(guān)書籍作證(將DR端口設(shè)置為輸入狀態(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;// 設(shè)置905進入待機模式

nrf905_Delay(100);

TRX_CE=0;

CSN=0;// 使能SPI

nrf905_Delay(1);

SpiWrite(RRP); //準(zhǔn)備讀取接收到的數(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)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多