⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 can_gps.lst

📁 单片机和GPS接收机构成的车载卫星定位系统
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -