📄 nrf24l01-
字号:
153 1 return(status); // return nRF24L01 status uchar
154 1 }
155 /****************************************************************************************************/
156 /*函数:uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)
157 /*功能: 用于读数据,reg:为寄存器地址,pBuf:为待读出数据地址,uchars:读出数据的个数
158 /****************************************************************************************************/
159 uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)
160 {
161 1 uint status,uchar_ctr;
162 1
163 1 CSN = 0; // Set CSN low, init SPI tranaction
164 1 status = SPI_RW(reg); // Select register to write to and read status uchar
165 1
166 1 for(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++)
167 1 pBuf[uchar_ctr] = SPI_RW(0); //
168 1
169 1 CSN = 1;
170 1
171 1 return(status); // return nRF24L01 status uchar
172 1 }
173 /*********************************************************************************************************
174 /*函数:uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)
175 /*功能: 用于写数据:为寄存器地址,pBuf:为待写入数据地址,uchars:写入数据的个数
176 /*********************************************************************************************************
-/
C51 COMPILER V9.01 TEST 08/24/2011 08:23:59 PAGE 4
177 uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)
178 {
179 1 uint status,uchar_ctr;
180 1
181 1 CSN = 0; //SPI使能
182 1 status = SPI_RW(reg);
183 1 for(uchar_ctr=0; uchar_ctr<uchars; uchar_ctr++) //
184 1 SPI_RW(*pBuf++);
185 1 CSN = 1; //关闭SPI
186 1 return(status); //
187 1 }
188 /****************************************************************************************************/
189 /*函数:void SetRX_Mode(void)
190 /*功能:数据接收配置
191 /****************************************************************************************************/
192 void SetRX_Mode(void)
193 {
194 1 CE=0;
195 1 SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // IRQ收发完成中断响应,16位CRC ,主接收
196 1 CE = 1;
197 1 inerDelay_us(130);
198 1 }
199 /******************************************************************************************************/
200 /*函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
201 /*功能:数据读取后放如rx_buf接收缓冲区中
202 /******************************************************************************************************/
203 unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
204 {
205 1 unsigned char revale=0;
206 1 sta=SPI_Read(STATUS); // 读取状态寄存其来判断数据接收状况
207 1 if(RX_DR) // 判断是否接收到数据
208 1 {
209 2 CE = 0; //SPI使能
210 2 SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
211 2 revale =1; //读取数据完成标志
212 2 }
213 1 SPI_RW_Reg(WRITE_REG+STATUS,sta); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志
214 1 return revale;
215 1 }
216 /*********************************************************************************************************
-**
217 /*函数:void nRF24L01_TxPacket(unsigned char * tx_buf)
218 /*功能:发送 tx_buf中数据
219 /*********************************************************************************************************
-*/
220 void nRF24L01_TxPacket(unsigned char * tx_buf)
221 {
222 1 CE=0; //StandBy I模式
223 1 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址
224 1 SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); // 装载数据
225 1 SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // IRQ收发完成中断响应,16位CRC,主发送
226 1 CE=1; //置高CE,激发数据发送
227 1 inerDelay_us(10);
228 1 }
229 //************************************主函数************************************************************
230 void main(void)
231 {
232 1 unsigned char tf =0;
233 1 unsigned char TxBuf[20]={0}; //
234 1 unsigned char RxBuf[20]={0};
235 1 init_NRF24L01() ;
236 1 led1=1;led2=1;
C51 COMPILER V9.01 TEST 08/24/2011 08:23:59 PAGE 5
237 1 P0=0x00;
238 1 TxBuf[1] = 1 ;
239 1 TxBuf[2] = 1 ;
240 1 nRF24L01_TxPacket(TxBuf); // Transmit Tx buffer data
241 1 Delay(6000);
242 1 P0=0xBF;
243 1 while(1)
244 1 {
245 2 if(KEY1 ==0 )
246 2 {
247 3 TxBuf[1] = 1 ;
248 3 tf = 1 ;
249 3 led1=0;
250 3 Delay(120);
251 3 led1=1;
252 3 Delay(120);
253 3 }
254 2 if(KEY2 ==0 )
255 2 {
256 3 TxBuf[2] =1 ;
257 3 tf = 1 ;
258 3 led2=0;
259 3 Delay(120);
260 3 led2=1;
261 3 Delay(120);
262 3 }
263 2 if (tf==1)
264 2 {
265 3 nRF24L01_TxPacket(TxBuf); // Transmit Tx buffer data
266 3 TxBuf[1] = 0x00;
267 3 TxBuf[2] = 0x00;
268 3 tf=0;
269 3 Delay(1000);
270 3 }
271 2 SetRX_Mode();
272 2 RxBuf[1] = 0x00;
273 2 RxBuf[2] = 0x00;
274 2 Delay(1000);
275 2 nRF24L01_RxPacket(RxBuf);
276 2 if(RxBuf[1]|RxBuf[2])
277 2 {
278 3 if( RxBuf[1]==1)
279 3 {
280 4 led1=0;
281 4 }
282 3 if( RxBuf[2]==1)
283 3 {
284 4 led2=0;
285 4 }
286 3 Delay(6000); //old is '1000'
287 3 }
288 2
289 2 RxBuf[1] = 0x00;
290 2 RxBuf[2] = 0x00;
291 2 led1=1;
292 2 led2=1;
293 2 }
294 1
295 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V9.01 TEST 08/24/2011 08:23:59 PAGE 6
CODE SIZE = 589 ----
CONSTANT SIZE = 40 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 57
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -