📄 main.lst
字号:
C51 COMPILER V7.08 MAIN 10/13/2006 13:38:11 PAGE 5
242 1 Delay100us(0);
243 1 ch = FRESELE << 1;
244 1 SpiReadWrite(ch);
245 1 CS = 0;
246 1 }
247 /*****************************************************************************************
248 //函数名:SendC()
249 //输入:发送的数据
250 //输出:无
251 //功能描述:串口初始化
252 /*****************************************************************************************/
253 void SendCh(char c)
254 {
255 1 TI = 0;
256 1 SBUF = c;
257 1 while(!TI);
258 1 TI = 0;
259 1 }
260
261 /*****************************************************************************************
262 //函数名:Nrf24E1Init()
263 //输入:无
264 //输出:无
265 //功能描述:Nrf24E1Init初始化,这里我们配置成32位地址。
266 /*****************************************************************************************/
267 void Nrf24E1Init()
268 {
269 1 int8u i;
270 1 SPICLK = 0; // Max SPI clock
271 1 SPI_CTRL = 0x02; // Connect internal SPI controller to Radio
272 1 CE = 0;
273 1 CS = 1; // RF SPI CS = 1
274 1 Delay100us(0);
275 1 SpiReadWrite(0x00); // We are not using the DuoCeiver functionallity
276 1 for(i=1;i<15;i++)
277 1 {
278 2 SpiReadWrite(RFConfig[i]);
279 2 }
280 1 CS = 0;
281 1
282 1 Delay100us(30);
283 1 }
284
285
286 /*****************************************************************************************
287 //函数名:TransmitPacket(int8u *pBuf)
288 //输入:发送的数据
289 //输出:无
290 //功能描述:发送发送缓冲区的数据
291 /*****************************************************************************************/
292 TransmitPacket(int8u *pBuf)
293 {
294 1 int8u i;
295 1
296 1 SetTxMode();
297 1 CE = 1;
298 1 Delay100us(1);
299 1
300 1 for (i=0;i<ADDR_COUNT;i++)
301 1 {
302 2 SpiReadWrite(rfAddress[i]);
303 2 }
C51 COMPILER V7.08 MAIN 10/13/2006 13:38:11 PAGE 6
304 1 SpiReadWrite(1);
305 1 for (i=0;i<4;i++)
306 1 {
307 2 SpiReadWrite(pBuf[i]);
308 2 }
309 1 CE = 0;
310 1 Delay100us(13); // Wait until finished transmitting (200us + 256us)//delay(5
-)
311 1 }
312
313
314 /*****************************************************************************************
315 //函数名:void SendAck(unsigned char msgid)
316 //输入:发送的数据
317 //输出:无
318 //功能描述:发送发送缓冲区的数据
319 /*****************************************************************************************/
320 void SendAck(unsigned char msgid)
321 {
322 1
323 1 int8u i;
324 1
325 1 SetTxMode();
326 1 CE = 1;
327 1 Delay100us(2);
328 1
329 1 for (i=0;i<4;i++)
330 1 {
331 2 SpiReadWrite(rfAddress[i]);
332 2 }
333 1 SpiReadWrite(msgid);
334 1 CE = 0;
335 1 Delay100us(1);
336 1
337 1 }
338 /*****************************************************************************************
339 //函数名:int8u ReceivePacket(int8u *pBuf)
340 //输入:接收数据缓冲区
341 //输出:成功返回1,否则返回0
342 //功能描述:接收数据存在缓冲区内
343 /*****************************************************************************************/
344 int8u ReceivePacket(int8u *pBuf)
345 {
346 1 int8u i,cmd;
347 1
348 1 SetRxMode();
349 1 CE = 1;
350 1 ResetTimer(1);
351 1 while(DR1 == 0)
352 1 {
353 2 if (ReadTimer(1) > 1000)
354 2 {
355 3 CE = 0;
356 3 return 0;
357 3 }
358 2 }
359 1 cmd = SpiReadWrite(0);
360 1 i = 0;
361 1 while(DR1)
362 1 {
363 2 pBuf[i] = SpiReadWrite(0);
364 2 i++;
C51 COMPILER V7.08 MAIN 10/13/2006 13:38:11 PAGE 7
365 2 if (i == 5)
366 2 break;
367 2 }
368 1 while(DR1)
369 1 {
370 2 SpiReadWrite(0);
371 2 }
372 1 CE = 0;
373 1 return cmd;
374 1 }
375
376 /******************************************************************************************
377 *******************************************************************************************
378 ************************************中断服务程序*******************************************
379 *******************************************************************************************
380 ******************************************************************************************/
381 void Timer0ISR (void) interrupt 1 using 1 //定时器0中断
382 {
383 1 TF0 = 0; // Clear Timer0 interrupt
384 1 TH0 = t0hrel; // Reload Timer0 high byte
385 1 TL0 = t0lrel; // Reload Timer0 low byte
386 1 timer[0]++; // Increment timer[0]
387 1 timer[1]++; // Increment timer[1
388 1 }
389
390 void UartISR (void) interrupt 4 using 2 //串口中断
391 {
392 1 int8u temp;
393 1
394 1 EA = 0;
395 1 if(RI)
396 1 {
397 2 temp = SBUF;
398 2 if(temp == '@') //帧头
399 2 {
400 3 Rx.Buf[0] = '@';
401 3 Rx.Counter = 1;
402 3 }
403 2 else if(temp == '*') //帧尾
404 2 {
405 3 Rx.Buf[Rx.Counter] = temp;
406 3 Rx.Buf[Rx.Counter + 1] = '\0';
407 3 Rx.NewData = 1;
408 3 }
409 2 else if(Rx.Counter < 39){
410 3 Rx.Buf[Rx.Counter] = temp;
411 3 Rx.Counter += 1;
412 3 }
413 2 RI = 0;
414 2 }
415 1 if(TI)
416 1 {
417 2 TI = 0;
418 2 }
419 1 EA = 1;
420 1 }
421
422
423 /******************************************************************************************
424 *******************************************************************************************
425 ******************************************主程序*******************************************
426 *******************************************************************************************
C51 COMPILER V7.08 MAIN 10/13/2006 13:38:11 PAGE 8
427 ******************************************************************************************/
428 void main(void)
429 {
430 1 unsigned char temp;
431 1 unsigned char i;
432 1
433 1 SciInit();
434 1 TimerInit();
435 1 EA=1;
436 1 LEDR=0;
437 1 LEDG=0;
438 1 delay(10000);
439 1 LEDR=1;
440 1 LEDG=1;
441 1
442 1 Nrf24E1Init();
443 1 PWMINIT();
444 1
445 1 while(1)
446 1 {
447 2 for(i=0;i<256;i++)
448 2 {
449 3 //PWMDUTY=i;
450 3 delay(10);
451 3 }
452 2
453 2
454 2 }
455 1
456 1 while(1)
457 1 {
458 2 for(i=0;i<100;i++) SendCh(0xaa);
459 2
460 2
461 2 temp = ReceivePacket(buf);
462 2 if(temp != 0)
463 2 {
464 3 SendAck(temp);
465 3 LEDR=0;
466 3 LEDG=0;
467 3 delay(5000);
468 3 LEDR=1;
469 3 LEDG=1;
470 3 }
471 2
472 2 }
473 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 585 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 53 8
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 + -