基于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; } } } |
|