📄 232_jieshou.lst
字号:
140 /****************************************************************************************************/
141 /*功能:NRF24L01读写寄存器函数
142 /****************************************************************************************************/
143 uint SPI_RW_Reg(uchar reg, uchar value)
144 {
145 1 uint status;
146 1
147 1 CSN = 0; // CSN low, init SPI transaction
148 1 status = SPI_RW(reg); // select register
149 1 SPI_RW(value); // ..and write value to it..
150 1 CSN = 1; // CSN high again
151 1
152 1 return(status); // return nRF24L01 status uchar
153 1 }
154 /****************************************************************************************************/
155 /*函数:uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)
156 /*功能: 用于读数据,reg:为寄存器地址,pBuf:为待读出数据地址,uchars:读出数据的个数
157 /****************************************************************************************************/
158 uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)
159 {
160 1 uint status,uchar_ctr;
161 1
162 1 CSN = 0; // Set CSN low, init SPI tranaction
163 1 status = SPI_RW(reg); // Select register to write to and read status uchar
164 1
165 1 for(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++)
166 1 pBuf[uchar_ctr] = SPI_RW(0); //
167 1
168 1 CSN = 1;
169 1
170 1 return(status); // return nRF24L01 status uchar
171 1 }
172 /*********************************************************************************************************
173 /*函数:uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)
174 /*功能: 用于写数据:为寄存器地址,pBuf:为待写入数据地址,uchars:写入数据的个数
175 /*********************************************************************************************************
-/
176 uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)
C51 COMPILER V8.02 232_JIESHOU 08/26/2010 08:57:32 PAGE 4
177 {
178 1 uint status,uchar_ctr;
179 1
180 1 CSN = 0; //SPI使能
181 1 status = SPI_RW(reg);
182 1 for(uchar_ctr=0; uchar_ctr<uchars; uchar_ctr++) //
183 1 SPI_RW(*pBuf++);
184 1 CSN = 1; //关闭SPI
185 1 return(status); //
186 1 }
187 /****************************************************************************************************/
188 /*函数:void SetRX_Mode(void)
189 /*功能:数据接收配置
190 /****************************************************************************************************/
191 void SetRX_Mode(void)
192 {
193 1 CE=0;
194 1 SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // IRQ收发完成中断响应,16位CRC ,主接收
195 1 CE = 1;
196 1 inerDelay_us(130);
197 1 }
198 /******************************************************************************************************/
199 /*函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
200 /*功能:数据读取后放如rx_buf接收缓冲区中
201 /******************************************************************************************************/
202 unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)
203 {
204 1 unsigned char revale=0;
205 1 sta=SPI_Read(STATUS); // 读取状态寄存其来判断数据接收状况
206 1 if(RX_DR) // 判断是否接收到数据
207 1 {
208 2 CE = 0; //SPI使能
209 2 SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
210 2 revale =1; //读取数据完成标志
211 2 }
212 1 SPI_RW_Reg(WRITE_REG+STATUS,sta); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写1来清楚中断标志
213 1 return revale;
214 1 }
215 /*********************************************************************************************************
-**
216 /*函数:void nRF24L01_TxPacket(unsigned char * tx_buf)
217 /*功能:发送 tx_buf中数据
218 /*********************************************************************************************************
-*/
219 void nRF24L01_TxPacket(unsigned char * tx_buf)
220 {
221 1 CE=0; //StandBy I模式
222 1 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // 装载接收端地址
223 1 SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); // 装载数据
224 1 SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); // IRQ收发完成中断响应,16位CRC,主发送
225 1 CE=1; //置高CE,激发数据发送
226 1 inerDelay_us(10);
227 1 }
228 //************************************串口初始化*********************************************************
229 void StartUART( void )
230 { //波特率4800
231 1 SCON = 0x50;
232 1 TMOD = 0x20;
233 1 TH1 = 0xFA;
234 1 TL1 = 0xFA;
235 1 PCON = 0x00;
236 1 TR1 = 1;
C51 COMPILER V8.02 232_JIESHOU 08/26/2010 08:57:32 PAGE 5
237 1 }
238 //************************************通过串口将接收到数据发送给PC端**************************************
239 void R_S_Byte(uchar R_Byte)
240 {
241 1 SBUF = R_Byte;
242 1 while( TI == 0 ); //查询法
243 1 TI = 0;
244 1 }
245 //************************************主函数************************************************************
246 void main(void)
247 {
248 1 uchar i,temp;
249 1 uchar RxBuf[32];
250 1 init_NRF24L01() ;
251 1 StartUART();
252 1 Delay(6000);
253 1 while(1)
254 1 {
255 2
256 2 SetRX_Mode();
257 2 if(nRF24L01_RxPacket(RxBuf))
258 2 {
259 3 LED=0;
260 3 temp++;
261 3 for(i=0;i<32;i++)
262 3 {
263 4 R_S_Byte(RxBuf[i]);
264 4 Delay(600);
265 4 }
266 3 }
267 2 LED=1;
268 2 Delay(600);
269 2 }
270 1
271 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 477 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 49
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 + -