📄 main.lst
字号:
222 1 ch = FRESELE << 1;
223 1 SpiReadWrite(ch | 0x01);
224 1 CS = 0;
225 1 }
226 /*****************************************************************************************
227 //函数名:SetRxMode()
228 //输入:无
229 //输出:无
230 //功能描述:转为接收模式
231 /*****************************************************************************************/
232 void SetTxMode(void)
233 {
234 1 int8u ch;
235 1 CS = 1;
236 1 Delay100us(0);
237 1 ch = FRESELE << 1;
238 1 SpiReadWrite(ch);
239 1 CS = 0;
240 1 }
241
C51 COMPILER V7.08 MAIN 10/08/2005 16:00:17 PAGE 5
242 /*****************************************************************************************
243 //函数名:SendC()
244 //输入:发送的数据
245 //输出:无
246 //功能描述:串口初始化
247 /*****************************************************************************************/
248 void SendCh(char c)
249 {
250 1 TI = 0;
251 1 SBUF = c;
252 1 while(!TI);
253 1 TI = 0;
254 1 }
255
256 /*****************************************************************************************
257 //函数名:Nrf24E1Init()
258 //输入:无
259 //输出:无
260 //功能描述:Nrf24E1Init初始化,这里我们配置成32位地址。
261 /*****************************************************************************************/
262 void Nrf24E1Init()
263 {
264 1 int8u i;
265 1 SPICLK = 0; // Max SPI clock
266 1 SPI_CTRL = 0x02; // Connect internal SPI controller to Radio
267 1 CE = 0;
268 1 CS = 1; // RF SPI CS = 1
269 1 Delay100us(0);
270 1 SpiReadWrite(0x00); // We are not using the DuoCeiver functionallity
271 1 for(i=1;i<15;i++)
272 1 {
273 2 SpiReadWrite(RFConfig[i]);
274 2 }
275 1 CS = 0;
276 1
277 1 Delay100us(30);
278 1 }
279 /*****************************************************************************************
280 //函数名:int8u WaitAck(void)
281 //输入:无
282 //输出:返回应答信号
283 //功能描述:等待应答,并返回应答信号
284 /*****************************************************************************************/
285 int8u WaitAck(void)
286 {
287 1 int8u ack;
288 1 SetRxMode();
289 1 CE = 1;
290 1 ResetTimer(0);
291 1 while(DR1 == 0)
292 1 {
293 2 if (ReadTimer(0) > 10) // 3ms time-out/10MS
294 2 {
295 3 CE = 0;
296 3 return 0;
297 3 }
298 2 }
299 1 ack = SpiReadWrite(0);
300 1 while(DR1)
301 1 {
302 2 SpiReadWrite(0);
303 2 }
C51 COMPILER V7.08 MAIN 10/08/2005 16:00:17 PAGE 6
304 1 CE = 0;
305 1 return ack;
306 1 }
307 /*****************************************************************************************
308 //函数名:TransmitPacket(int8u *pBuf)
309 //输入:发送的数据
310 //输出:无
311 //功能描述:发送发送缓冲区的数据
312 /*****************************************************************************************/
313 TransmitPacket(int8u *pBuf,int8u crc)
314 {
315 1 int8u i;
316 1
317 1 SetTxMode();
318 1 CE = 1;
319 1 Delay100us(1);
320 1
321 1 for (i=0;i<ADDR_COUNT;i++)
322 1 {
323 2 SpiReadWrite(rfAddress[i]);
324 2 }
325 1 SpiReadWrite(crc);
326 1 for (i=0;i<4;i++)
327 1 {
328 2 SpiReadWrite(pBuf[i]);
329 2 }
330 1 CE = 0;
331 1 Delay100us(6); // Wait until finished transmitting (200us + 256us)//delay(5)
332 1 }
333
334
335 /******************************************************************************************
336 *******************************************************************************************
337 ************************************中断服务程序*******************************************
338 *******************************************************************************************
339 ******************************************************************************************/
340 void Timer0ISR (void) interrupt 1 using 1
341 {
342 1 TF0 = 0; // Clear Timer0 interrupt
343 1 TH0 = t0hrel; // Reload Timer0 high byte
344 1 TL0 = t0lrel; // Reload Timer0 low byte
345 1 timer[0]++; // Increment timer[0]
346 1 timer[1]++; // Increment timer[1
347 1 }
348
349 void UartISR (void) interrupt 4 using 2
350 {
351 1 int8u temp;
352 1
353 1 EA = 0;
354 1 if(RI)
355 1 {
356 2 temp = SBUF;
357 2 if(temp == '@')//
358 2 {
359 3 Rx.Buf[0] = '@';
360 3 Rx.Counter = 1;
361 3 }
362 2 else if(temp == '*')//?β
363 2 {
364 3 Rx.Buf[Rx.Counter] = temp;
365 3 Rx.Buf[Rx.Counter + 1] = '\0';
C51 COMPILER V7.08 MAIN 10/08/2005 16:00:17 PAGE 7
366 3 Rx.NewData = 1;
367 3 }
368 2 else if(Rx.Counter < 39){
369 3 Rx.Buf[Rx.Counter] = temp;
370 3 Rx.Counter += 1;
371 3 }
372 2 RI = 0;
373 2 }
374 1 if(TI)
375 1 {
376 2 TI = 0;
377 2 }
378 1 EA = 1;
379 1 }
380
381
382
383
384
385
386
387
388 /******************************************************************************************
389 *******************************************************************************************
390 ******************************************主程序*******************************************
391 *******************************************************************************************
392 ******************************************************************************************/
393 main(void)
394 {
395 1 static int8u cmd,crc;
396 1 SciInit();
397 1 TimerInit();
398 1 EA=1;
399 1 LEDR=0;
400 1 LEDG=0;
401 1
402 1 LEDR=1;
403 1 LEDG=1;
404 1 TxBuf[0] = 0x40;
405 1 TxBuf[1] = 0x41;
406 1 TxBuf[2] = 0x42;
407 1 TxBuf[3] = 0x43;
408 1
409 1 Nrf24E1Init();
410 1
411 1
412 1 while(1)
413 1 {
414 2
415 2 while(1)
416 2 {
417 3 cmd = (int8u)rand();
418 3 if(cmd != 0)break;
419 3 }
420 2 TransmitPacket(TxBuf,cmd);
421 2 crc = WaitAck();
422 2 if(cmd == crc)
423 2 {
424 3 LEDR=0;
425 3 LEDG=0;
426 3 delay(5000);
427 3 LEDR=1;
C51 COMPILER V7.08 MAIN 10/08/2005 16:00:17 PAGE 8
428 3 LEDG=1;
429 3 }
430 2 delay(60000);
431 2 delay(60000);
432 2 }
433 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 554 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 55 3
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 + -