📄 main.lst
字号:
290 // Other info :
291 //--------------------------------------------------------------------------
292 static void uPSD_uart0_isr (void) interrupt SIO_VECTOR using 2
293 {
294 1 /*------------------------------------------------
295 1 comm1 Received data interrupt.
296 1 ------------------------------------------------*/
297 1 if ( RI != 0 )
298 1 {
299 2 RI = 0;
300 2
301 2 Comm1Recv [nComm1Recv_End].Buff[(Comm1Recv [nComm1Recv_End].Len)++] = SBUF;
302 2 if ( Comm1Recv [nComm1Recv_End].Len >= MAX_RECV_BUFF )
303 2 {
C51 COMPILER V7.06 MAIN 05/18/2006 09:36:31 PAGE 6
304 3 Comm1Recv [nComm1Recv_End].Len = 0;
305 3 }
306 2
307 2 Comm1Recv_Flag = RECV_ONEBYTE;
308 2 }
309 1
310 1 /*------------------------------------------------
311 1 comm1 Transmitted data interrupt.
312 1 ------------------------------------------------*/
313 1
314 1 if ( TI != 0 )
315 1 {
316 2 TI = 0;
317 2 if ( nComm1Send_Idx < Comm1Send.Len )
318 2 {
319 3 SBUF = Comm1Send.Buff [ nComm1Send_Idx ];
320 3 nComm1Send_Idx++;
321 3 }
322 2 else
323 2 {
324 3 if ( Comm1Send.Buff[0] != 0x00 )
325 3 {
326 4 Comm1State = WAITING;
327 4 }
328 3 }
329 2 }
330 1 }
331 //--------------------------------------------------------------------------
332 // Function : main
333 // Input Para : void
334 // Output Para : void
335 // Retun Val : void
336 // Description : main function
337 // Call : InitCPU, My7132Init, CRC,
338 // call By : Null
339 // DateTime : 2005-7-30
340 // Author : liuweiming@gmail.com
341 // Other info :
342 //--------------------------------------------------------------------------
343 void main(void)
344 {
345 1 unsigned short usCRC = 0xffff;
346 1 unsigned short usLen = 0;
347 1 unsigned char status;
348 1 unsigned char i;
349 1
350 1 unsigned char sndidx = 0;
351 1 unsigned char rcvidx = 0;
352 1 unsigned char erridx = 0;
353 1
354 1 WDKEY = 0x55;
355 1 EA = 0;
356 1 delay(100);
357 1
358 1 status = Sja_1000_Init();
359 1 delay(100);
360 1 InitCPU();
361 1 My7132Init( ADDR_7132_ZERO );
362 1
363 1 flag_init = 0x00; //initialize Sja1000
364 1
365 1 PSD3200_reg.CONTROL_A = 0xff;
C51 COMPILER V7.06 MAIN 05/18/2006 09:36:31 PAGE 7
366 1 PSD3200_reg.DIRECTION_A = 0xff;
367 1
368 1 pComm1RecvCtrl = (struct tagRecvCtrl*)(p7132 + COMM1_RECV_CTRL);
369 1 pComm2RecvCtrl = (struct tagRecvCtrl*)(p7132 + COMM2_RECV_CTRL);
370 1 pComm1SendCtrl = (struct tagSendCtrl*)(p7132 + COMM1_SEND_CTRL);
371 1 pComm2SendCtrl = (struct tagSendCtrl*)(p7132 + COMM2_SEND_CTRL);
372 1
373 1 EA = 1;
374 1
375 1 Comm1Send.Len = 8;
376 1 Comm1Send.Buff[0] = 'C';
377 1 Comm1Send.Buff[1] = 'A';
378 1 Comm1Send.Buff[2] = 'N';
379 1 Comm1Send.Buff[3] = status;
380 1 Comm1Send.Buff[4] = 'I';
381 1 Comm1Send.Buff[5] = 'N';
382 1 Comm1Send.Buff[6] = 'I';
383 1 Comm1Send.Buff[7] = 'T';
384 1
385 1 nComm1Send_Idx = 0;
386 1 TI = 1;
387 1
388 1 while ( 1 )
389 1 {
390 2 P1_5 = 0;
391 2 P1_5 = 1;
392 2
393 2 //Comm1Recv FLAG
394 2 switch ( Comm1Recv_Flag )
395 2 {
396 3 case RECV_READY:
397 3 break;
398 3 case RECV_ONEBYTE:
399 3 nComm1Recv_Cnt = 0;
400 3 Comm1Recv_Flag = RECV_COUNT;
401 3 break;
402 3 case RECV_COUNT:
403 3 break;
404 3 case RECV_TIMEOUT:
405 3 default:
406 3 nComm1Recv_Cnt = 0;
407 3 Comm1Recv_Flag = RECV_READY;
408 3 break;
409 3 }
410 2 //Comm2Recv FLAG
411 2 switch ( Comm2Recv_Flag )
412 2 {
413 3 case RECV_READY:
414 3 break;
415 3 case RECV_ONEBYTE:
416 3 nComm2Recv_Cnt = 0;
417 3 Comm2Recv_Flag = RECV_COUNT;
418 3 break;
419 3 case RECV_COUNT:
420 3 break;
421 3 case RECV_TIMEOUT:
422 3 default:
423 3 nComm2Recv_Cnt = 0;
424 3 Comm2Recv_Flag = RECV_READY;
425 3 break;
426 3 }
427 2
C51 COMPILER V7.06 MAIN 05/18/2006 09:36:31 PAGE 8
428 2 if ( nTest_Cnt >= MAX_TEST_CNT )
429 2 {
430 3 nTest_Cnt = 0;
431 3 sndidx++;
432 3
433 3 Comm1Send.Buff[0] = 'S';
434 3 Comm1Send.Buff[1] = 'E';
435 3 Comm1Send.Buff[2] = 'N';
436 3
437 3 while( REG_Status & 0x08 == 1); //正在接收
438 3 while( REG_Status & 0x04 == 0); //上次发送是否完成
439 3 while( REG_Status & 0x02 == 0); //缓冲区是否锁定
440 3
441 3 REG_TxFramInfo = 0x86;
442 3 REG_TxBuffer1 = 0xaa;
443 3 REG_TxBuffer2 = 0xbb;
444 3 REG_TxBuffer3 = 0xcc;
445 3 REG_TxBuffer4 = 0xdd;
446 3 REG_TxBuffer5 = '1';
447 3 REG_TxBuffer6 = '2';
448 3 REG_TxBuffer7 = '3';
449 3 REG_TxBuffer8 = '4';
450 3 REG_TxBuffer9 = '5';
451 3 REG_TxBuffer10 = '6';
452 3 //REG_TxBuffer11 = '7';
453 3 //REG_TxBuffer12 = '8';
454 3
455 3 REG_Command = 0x01;
456 3
457 3 Comm1Send.Buff[3] = sndidx;
458 3 Comm1Send.Buff[4] = 'D';
459 3
460 3 Comm1Send.Len = 5;
461 3 nComm1Send_Idx = 0;
462 3 TI = 1;
463 3 }
464 2
465 2 if ( nComm1Recv_Bgn != nComm1Recv_End )
466 2 {
467 3 Comm1Send.Len = Comm1Recv[nComm1Recv_Bgn].Len + 3;
468 3 Comm1Send.Buff[0] = nComm1Recv_Bgn;
469 3 Comm1Send.Buff[1] = nComm1Recv_End;
470 3 Comm1Send.Buff[2] = Comm1Send.Len;
471 3
472 3 memcpy((Comm1Send.Buff+3), Comm1Recv[nComm1Recv_Bgn].Buff, Comm1Recv[nComm1Recv_Bgn].Len);
473 3 //Comm1Recv[nComm1Recv_Bgn].Len = 0;
474 3
475 3 nComm1Recv_Bgn++;
476 3 if (nComm1Recv_Bgn >= MAX_RECV_SUIT )
477 3 {
478 4 nComm1Recv_Bgn = 0;
479 4 }
480 3
481 3 nComm1Send_Idx = 0;
482 3 TI = 1;
483 3 }
484 2
485 2 if ( nComm2Recv_Bgn != nComm2Recv_End )
486 2 {
487 3 Comm2Send.Len = Comm2Recv[nComm2Recv_Bgn].Len + 3;
488 3 Comm2Send.Buff[0] = nComm2Recv_Bgn;
489 3 Comm2Send.Buff[1] = nComm2Recv_End;
C51 COMPILER V7.06 MAIN 05/18/2006 09:36:31 PAGE 9
490 3 Comm2Send.Buff[2] = Comm2Send.Len;
491 3
492 3 memcpy((Comm2Send.Buff+3), Comm2Recv[nComm2Recv_Bgn].Buff, Comm2Recv[nComm2Recv_Bgn].Len);
493 3 //Comm2Recv[nComm2Recv_Bgn].Len = 0;
494 3
495 3 nComm2Recv_Bgn++;
496 3 if (nComm2Recv_Bgn >= MAX_RECV_SUIT )
497 3 {
498 4 nComm2Recv_Bgn = 0;
499 4 }
500 3
501 3 nComm2Send_Idx = 0;
502 3 SCON2 |= 0x02; //TI2 = 1;
503 3 }
504 2
505 2 if ( rcv_flag ) //if there is receive interrupt
506 2 {
507 3 rcv_flag = 0;
508 3 rcvidx++;
509 3
510 3 if ( ( REG_Status & 0x01) == 0 ) //判断报文是否有效
511 3 {
512 4 rcv_len = 0;
513 4 }
514 3
515 3 Comm1Send.Buff[0] = 'R';
516 3 Comm1Send.Buff[1] = 'C';
517 3 Comm1Send.Buff[2] = 'V';
518 3 Comm1Send.Buff[3] = rcvidx;
519 3
520 3 rcv_data[0] = REG_RxFramInfo;
521 3 rcv_data[1] = REG_RxBuffer1;
522 3 rcv_data[2] = REG_RxBuffer2;
523 3 rcv_data[3] = REG_RxBuffer3;
524 3 rcv_data[4] = REG_RxBuffer4;
525 3 rcv_data[5] = REG_RxBuffer5;
526 3 rcv_data[6] = REG_RxBuffer6;
527 3 rcv_data[7] = REG_RxBuffer7;
528 3 rcv_data[8] = REG_RxBuffer8;
529 3 rcv_data[9] = REG_RxBuffer9;
530 3 rcv_data[10] = REG_RxBuffer10;
531 3 rcv_data[11] = REG_RxBuffer11;
532 3 rcv_data[12] = REG_RxBuffer12;
533 3
534 3 REG_Command = 0x04;
535 3
536 3 Comm1Send.Len = (rcv_data[0] & 0x0f) + 9;
537 3
538 3 for (i=0; i< (rcv_data[0] & 0x0f) + 5; i++)
539 3 {
540 4 Comm1Send.Buff[4+i] = rcv_data[i];
541 4 }
542 3
543 3 nComm1Send_Idx = 0;
544 3 TI = 1;
545 3 }
546 2
547 2 if ( err_flag )
548 2 {
549 3 err_flag = 0;
550 3 REG_Interrupt = REG_Interrupt & 0x00;
551 3
C51 COMPILER V7.06 MAIN 05/18/2006 09:36:31 PAGE 10
552 3 erridx++;
553 3
554 3 Comm1Send.Len = 7;
555 3 Comm1Send.Buff[0] = 'C';
556 3 Comm1Send.Buff[1] = 'A';
557 3 Comm1Send.Buff[2] = 'N';
558 3 Comm1Send.Buff[3] = erridx;
559 3 Comm1Send.Buff[4] = 'E';
560 3 Comm1Send.Buff[5] = 'R';
561 3 Comm1Send.Buff[6] = 'R';
562 3
563 3 nComm1Send_Idx = 0;
564 3 TI = 1;
565 3
566 3 Sja_1000_Init();
567 3 }
568 2 }
569 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2148 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 15937 8
PDATA SIZE = ---- ----
DATA SIZE = 41 ----
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 + -