📄 can_gps.lst
字号:
479 1 SJA_BCANAdr=REG_CONTROL; //设置控制寄存器
480 1 *SJA_BCANAdr=0x02; //接收中断使能
481 1 do{;}while(BCAN_ENTER_RETMODEL()); //进入复位模式
482 1 do{;}while(BCAN_CREATE_COMMUNATION()); //建立连接
483 1 do{;}while(BCAN_SET_BANDRATE()); //设置BTR0,BTR1,配置波特率
484 1 do{;}while(BCAN_SET_OBJECT(0x01,0x00)); //设置验收代码寄存器ACR,验收屏蔽寄存器AMR,
485 1 //自身节点ID号为00000000!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
486 1 do{;}while(BCAN_SET_OUTCLK(0xda,0x08)); //设置输出控制寄存器OC,时钟分频器CDR
C51 COMPILER V8.05a CAN_GPS 06/20/2008 15:11:44 PAGE 9
487 1 do{;}while(BCAN_QUIT_RETMODEL()); //进入工作模式
488 1 }
489 /************************************************************************
490 *函数原型: void send_StartorEnd(uchar num,bit SorE,unsigned short CRC)*
491 *参数说明: num 传送的数据量 *
492 * SorE 1:开始帧 0:结束帧 *
493 *返回值: *
494 *说明: 向总线发送数据起始帧或停止帧 *
495 ************************************************************************/
496 void send_StartorEnd(uchar num,bit SorE,unsigned short CRC)
497 { uchar CRCH,CRCL;
498 1 CRCL=CRC;
499 1 CRCH=CRC>>8;
500 1 if(SorE)
501 1 {//1:开始帧
502 2 SendBuf[0]=0x00;
503 2 SendBuf[1]=0x08;
504 2 SendBuf[2]='S'; //Start
505 2 SendBuf[3]='T';
506 2 SendBuf[4]='A';
507 2 SendBuf[5]='R';
508 2 SendBuf[6]='T';
509 2 SendBuf[7]=num;
510 2 SendBuf[8]=CRCH; //校验码高8位
511 2 SendBuf[9]=CRCL; //校验码低8位
512 2 }
513 1 else
514 1 {//0:结束帧
515 2 SendBuf[0]=0x00;
516 2 SendBuf[1]=0x08;
517 2 SendBuf[2]='F'; //Final
518 2 SendBuf[3]='I';
519 2 SendBuf[4]='N';
520 2 SendBuf[5]='A';
521 2 SendBuf[6]='L';
522 2 SendBuf[7]=num;
523 2 SendBuf[8]=CRCH; //校验码高8位
524 2 SendBuf[9]=CRCL; //校验码低8位
525 2 }
526 1 BCAN_DATA_WRITE(SendBuf);
527 1 BCAN_CMD_PRG(TR_CMD);
528 1 }
529 /************************************************************************
530 *函数原型: void request_data(uchar *sendbuff,uchar num) *
531 *参数说明: *
532 * *
533 *返回值: *
534 *说明: 向总线发送数据 *
535 ************************************************************************/
536 void request_data(uchar *sendbuff,uchar num)
537 { uchar i,j;
538 1 unsigned short CRC;
539 1 green=0; //发送指示
540 1 j=num%8;
541 1 if(j)j=num/8;
542 1 else j=num/8+1;
543 1
544 1 //开始帧
545 1 send_StartorEnd(num,1,CRC);
546 1 //数据帧
547 1 SendBuf[0]=0x00;
548 1 SendBuf[1]=0x08;
C51 COMPILER V8.05a CAN_GPS 06/20/2008 15:11:44 PAGE 10
549 1 while(j)
550 1 {
551 2 for(i=2;i<10;i++){SendBuf[i]=*sendbuff++;}
552 2 BCAN_DATA_WRITE(SendBuf);
553 2 BCAN_CMD_PRG(TR_CMD);
554 2 delay(10);
555 2 j--;
556 2 }
557 1 //结束帧
558 1 send_StartorEnd(num,0,CRC);
559 1 }
560 /*************************************************************/
561 /********************** keys *********************************/
562 /*************************************************************/
563 uchar keys(void)
564 {
565 1 uchar temp;
566 1
567 1 return temp;
568 1 }
569 /*************************************************************/
570 /********************** 24c256 *******************************/
571 /*************************************************************/
572 //start
573 void start24(void)
574 {
575 1 SDA24=1;
576 1 SCL24=1;
577 1 cnop24=0;
578 1 cnop24=0;
579 1 SDA24=0;
580 1 cnop24=0;
581 1 cnop24=0;
582 1 SCL24=0;
583 1 cnop24=0;
584 1 }
585 //stop24
586 void stop24(void)
587 {
588 1 SDA24=0;
589 1 SCL24=1;
590 1 cnop24=0;
591 1 cnop24=0;
592 1 SDA24=1;
593 1 cnop24=0;
594 1 cnop24=0;
595 1 SCL24=0;
596 1 cnop24=0;
597 1 }
598 //send answer
599 void tack24(void)
600 {
601 1 SDA24=0;
602 1 SCL24=1;
603 1 cnop24=0;
604 1 cnop24=0;
605 1 SCL24=0;
606 1 SDA24=1;
607 1 }
608 //check answer
609 bit get_ACK24(void)
610 {
C51 COMPILER V8.05a CAN_GPS 06/20/2008 15:11:44 PAGE 11
611 1 SDA24=1;
612 1 SCL24=1;
613 1 cnop24=0;
614 1 cnop24=0;
615 1 ACK24=SDA24;
616 1 SCL24=0;
617 1 cnop24=0;
618 1 return ACK24;
619 1 }
620 void wrbyt24(uchar ch)
621 {
622 1 data uchar i;
623 1 ab=ch;
624 1 for(i=0;i<8;i++){
625 2 SDA24=abit7;
626 2 ab<<=1;
627 2 SCL24=1;
628 2 cnop24=0;
629 2 cnop24=0;
630 2 SCL24=0;
631 2 SDA24=0;
632 2 }
633 1 }
634 //receive a byte
635 uchar rdbyt24(void)
636 {
637 1 data uchar i;
638 1 for(i=0;i<8;i++){
639 2 SDA24=1;
640 2 SCL24=1;
641 2 ab<<=1;
642 2 abit0=SDA24;
643 2 SCL24=0;
644 2 }
645 1 return ab;
646 1 }
647 void write_abyte24(uint loc,uchar ch,uchar aa)
648 {
649 1 data uchar i;
650 1 bit flag;
651 1 stop24();
652 1 flag=1; i=0;
653 1 while(flag){
654 2 i++; if(i>250)return;;
655 2 start24();
656 2 wrbyt24(aa);
657 2 flag=get_ACK24();
658 2 if(flag)stop24();
659 2 }
660 1 i=loc>>8;
661 1 wrbyt24(i);
662 1 get_ACK24();
663 1 i=loc;
664 1 wrbyt24(i);
665 1 get_ACK24();
666 1 wrbyt24(ch);
667 1 get_ACK24();
668 1 stop24();
669 1 }
670 void write_nbyte24(uint loc,uchar *p,uchar aa)
671 {
672 1 data uchar i,*p1;
C51 COMPILER V8.05a CAN_GPS 06/20/2008 15:11:44 PAGE 12
673 1 bit flag;
674 1 p1=p;
675 1 stop24();
676 1 flag=1; i=0;
677 1 while(flag){
678 2 i++; if(i>250)return;;
679 2 start24();
680 2 wrbyt24(aa);
681 2 flag=get_ACK24();
682 2 if(flag)stop24();
683 2 }
684 1 i=loc>>8; //先送高字节
685 1 wrbyt24(i);
686 1 get_ACK24();
687 1 i=loc;
688 1 wrbyt24(i); //再送低字节
689 1 get_ACK24();
690 1 for(i=0;i<64;i++) //一页写的字节个数 64个
691 1 {wrbyt24(*p1); get_ACK24(); p1++;}
692 1 stop24();
693 1 }
694
695 uchar read_abyte24(uint loc,uchar aa,uchar bb)
696 {
697 1 data uchar i;
698 1 bit flag;
699 1 stop24();
700 1 flag=1; i=0;
701 1 while(flag){
702 2 i++; if(i>250)return 0xff;
703 2 start24();
704 2 wrbyt24(aa);
705 2 flag=get_ACK24();
706 2 if(flag)stop24();
707 2 }
708 1 i=loc>>8;
709 1 wrbyt24(i);
710 1 get_ACK24();
711 1 i=loc;
712 1 wrbyt24(i);
713 1 get_ACK24();
714 1 start24();
715 1 wrbyt24(bb);
716 1 get_ACK24();
717 1 i=rdbyt24();
718 1 SDA24=1; //NO ACK24
719 1 stop24();
720 1 return i;
721 1 }
722 void read_nbyte24(uint loc,uchar *p,uchar aa,uchar bb) //n=16
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -