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