📄 main.lst
字号:
431 void Changetoadr(void)
432 {
433 1 unsigned char i,temp[4];
434 1 for(i=0;i<4;i++)
435 1 temp[i]=TCandata[i+1];
436 1 TCandata[1] = temp[0]>>3;
437 1 TCandata[2] = (temp[0]<<5 | temp[1]>>3);
438 1 TCandata[3] = (temp[1]<<5 | temp[2]>>3);
439 1 TCandata[4] = (temp[2]<<5 | temp[3]>>3);
440 1 }
441
442 /*
443 *********************************************************************************************************
444 *
445 * 函数名称:main
446 *
447 * 输入变量:无
448 *
449 * 输出变量:无
450 *
451 * 功能描述:主循环函数,通常是一个无限循环
452 *
453 *********************************************************************************************************
454 */
455 void main(void)
456 {
457 1 unsigned char i;
458 1 DisableInterrupt();
459 1 AUXR = 0x00;
460 1 CpuInit();
461 1 SjaInit();
462 1 EnalbeInterrupt();
463 1
464 1 AUXR = 0x01;
465 1 ucCircle = 0;
466 1 bSjaReceived = FALSE;
467 1 int_flag_232 = 1;
468 1 int_flag_485 = 1;
469 1 int_232=0;
470 1 int_485=0;
471 1 rx_232=0;
472 1 rx_232=0;
473 1 rx_flag_232 = 0;
474 1 rx_flag_485 = 0;
475 1 length_485 = 0;
476 1 length_232 = 0;
477 1 Control485=0;
478 1 LED=0;
479 1 while (1)
480 1 {
481 2 LED^=1; //喂狗
482 2 /////////////////////////////从232接收,发送到can,485///////////////////////////////////
483 2 if (rx_flag_232 == 1 || RCount_232 > TCount_232) //232接收完成或还存在没发送出去的数据
484 2 {
485 3 if(int_flag_485) //一帧完整的数据通过485发送完了吗?
486 3 {
487 4 Control485 = 1; //485为发送模式;
488 4 for(i=0;i<13;i++)
C51 COMPILER V8.08 MAIN 01/04/2009 14:39:12 PAGE 9
489 4 TCandata[i]=rec_232_R[BagCount_T_232][i]; //把存在外RAM的232数据调到内RAM,供CAN,485发送用
490 4 SjaSend(TCandata); //继续发送232已经接收到的数据到CAN
491 4 Sendto485(TCandata);//继续发送232已经接收到的数据到485
492 4 TCount_232++; //累计发送次数
493 4 BagCount_T_232++; //成功发送了前一232的数据,数据指针加一,开始发送没发送出去的数据
494 4 if(BagCount_T_232>BadLenght) //计数已到最大值,重新开始从第一位读取接收回来的232数据
495 4 BagCount_T_232=0;
496 4 int_flag_485=0; //清484接收完成标志
497 4 }
498 3 rx_flag_232 = 0; //清232接收完成标志
499 3 }
500 2 else
501 2 {
502 3 TCount_232 = 0;
503 3 RCount_232 = 0;
504 3 }
505 2 ///232成功发送一字节数据//
506 2 if(int_232)
507 2 {
508 3 if((length_232--)>0)
509 3 {
510 4 send_232++; //发送指针指向下一要发送数据的地址
511 4 SBUF=*send_232; //发送
512 4 }
513 3 else
514 3 {
515 4 int_flag_232=1;//一帧数据发送完成
516 4 }
517 3 int_232=0;
518 3 }
519 2
520 2 ///232成功接收一字节数据//
521 2 if(rx_232)
522 2 {
523 3 TR0=1; //开定时器0,(10MS后如果还没接收完13位数据就把之前接收的舍去)
524 3 rec_232_R[BagCount_R_232][length_232_R] = SBUF; //接收数据到232数据缓冲区
525 3 length_232_R++; //232接收个数加1
526 3 if(length_232_R == 13) //接收完13个数据?(数据包括:4位ID, 1位的CAN数据长度,8位的CAN数据)
527 3 {
528 4 TR0=0; //关定时器0,已经接收到13位数据了
529 4 TH0 = 0Xdc; //10MS定时赋初值
530 4 TL0 = 0X00;
531 4 rx_flag_232 = 1; //成功接收,,置232成功接收标志,可以对CAN ,485发送了
532 4 length_232_R = 0; //232接收个数计数清0;
533 4 RCount_232++;
534 4 BagCount_R_232++; //数据包计数加1
535 4 if(BagCount_R_232>BadLenght) //232接收缓冲区已满,调回到第一个区继续接收;
536 4 BagCount_R_232=0;
537 4 }
538 3 rx_232=0;
539 3 }
540 2
541 2
542 2
543 2
544 2 //////////////////////////////从485接收,发送到can,232///////////////////////////////////
545 2 if (rx_flag_485 == 1 || RCount_485 > TCount_485 ) //485接收完成或485成功接收回来的数据都发送出去了吗?
546 2 {
547 3 if(int_flag_232) //一帧完整的数据通过232发送完了吗?
548 3 {
549 4 for(i=0;i<13;i++)
550 4 TCandata[i]=rec_485_R[BagCount_T_485][i];
C51 COMPILER V8.08 MAIN 01/04/2009 14:39:12 PAGE 10
551 4 SjaSend(TCandata); //继续发送485已经接收到的数据到CAN
552 4 Sendto232(TCandata);//继续发送485已经接收到的数据到232
553 4 TCount_485++;
554 4 BagCount_T_485++; //成功发送了前一485的数据,数据指针加一,开始发送没发送出去的数据
555 4 if(BagCount_T_485>BadLenght)
556 4 BagCount_T_485=0;
557 4 int_flag_232=0; //清232接收完成标志
558 4 }
559 3 rx_flag_485 = 0; //清485接收完成标志
560 3 }
561 2 else
562 2 {
563 3 TCount_485 = 0;
564 3 RCount_485 = 0;
565 3 }
566 2 ///485成功发送一帧数据//
567 2 if(int_485)
568 2 {
569 3 if((length_485--)>0)
570 3 {
571 4 send_485++; //发送指针指向下一要发送数据的地址
572 4 SBUF1 = *send_485; //发送
573 4 }
574 3 else
575 3 {
576 4 int_flag_485 = 1;//发送完成,允许发送新数据
577 4 Control485 = 0; //485已经把数据发送完毕,把模式转为接收;
578 4 length_485_R = 0;
579 4 }
580 3 int_485=0;
581 3 }
582 2
583 2 ///485成功接收一字节数据//
584 2 if(rx_485)
585 2 {
586 3 TR0=1; //开定时器0,(10MS后如果还没接收完13位数据就把之前接收的舍去)
587 3 rec_485_R[BagCount_R_485][length_485_R] = SBUF1; //接收数据到485数据缓冲区
588 3 length_485_R++; //485接收个数加1
589 3 if(length_485_R == 13) //接收完13个数据?(数据包括4位ID, 1位的CAN数据长度,8位的CAN数据)
590 3 {
591 4 TR0=0; //关定时器0,已经接收到13位数据了
592 4 TH0 = 0Xdc; //10MS定时赋初值
593 4 TL0 = 0X00;
594 4 rx_flag_485 = 1; //成功接收,可以发送了,置485成功接收标志
595 4 length_485_R = 0; //485字节接收数清0;
596 4 RCount_485++; //485帧计数加1;
597 4 BagCount_R_485++; //数据包计数加1
598 4 if(BagCount_R_485>BadLenght) //485接收缓冲区已满,调回到第一个区继续接收;
599 4 BagCount_R_485=0;
600 4 }
601 3 rx_485=0;
602 3 }
603 2
604 2
605 2
606 2 ///////////////////从can接收,发送到485,232////////////////////////
607 2 if (bSjaReceived ||RCount_CAN > TCount_CAN )
608 2 {
609 3 if(int_flag_232&&int_flag_485) //485,232把一帧完整的数据发送完成了吗?
610 3 {
611 4 Control485 = 1; //485为发送模式;
612 4 for(i=0;i<13;i++) //外RAM的CAN数据调到内RAM
C51 COMPILER V8.08 MAIN 01/04/2009 14:39:12 PAGE 11
613 4 TCandata[i]=Candata_R[Bagcount_T_CAN][i];
614 4 Changetoadr(); //把CAN接收的地址转换为232,485能识别的地址
615 4 Sendto232(TCandata); //发送数据到232
616 4 Sendto485(TCandata); //发送数据到485
617 4 TCount_CAN++; //CAN发送次数加1
618 4 Bagcount_T_CAN++; //CAN发送指针加1
619 4 if(Bagcount_T_CAN>BadLenght_can) //CAN发送指针溢出
620 4 Bagcount_T_CAN=0; //重置CAN发送指针
621 4 int_flag_232=0; //清232发送完成标志
622 4 int_flag_485=0; //清485发送完成标志
623 4 }
624 3 bSjaReceived=0;
625 3 }
626 2 else
627 2 {
628 3 RCount_CAN=0;
629 3 TCount_CAN=0;
630 3 }
631 2 }
632 1 }
633
634
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1572 ----
CONSTANT SIZE = 37 ----
XDATA SIZE = 780 ----
PDATA SIZE = ---- ----
DATA SIZE = 41 4
IDATA SIZE = 10 ----
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 + -