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

📄 main.lst

📁 这是CAN总线收发器SJA1000的控制程序,采用C语言编写的,有一定参考价值,
💻 LST
📖 第 1 页 / 共 3 页
字号:
 263          void      MoveKey(void)                //移位键
 264          {
 265   1        if(FunckeyFlag)
 266   1        {
 267   2           MoveFlag=~ MoveFlag;              //移位
 268   2               if(MoveFlag)
 269   2               {FlightLed3=0;ClearLed3=0; 
 270   3                FlightLed4=1;
 271   3               }
 272   2               else
 273   2               {
 274   3            FlightLed3=1;
 275   3                FlightLed4=0;ClearLed4=0; 
 276   3               }
 277   2        }
 278   1      }
 279          
 280          //增加键处理
 281          void      IncKey(void)                  //增加键
 282          {
 283   1         if(FunckeyFlag)
 284   1        {
 285   2          if(MoveFlag)
 286   2              {
 287   3            if(++DispBuf[4]>0x0f)DispBuf[4]=0;
 288   3              }
 289   2          else
 290   2                if(++DispBuf[3]>0x0f)DispBuf[3]=0;
 291   2        }
 292   1      }
 293          
 294          //退出键处理
 295          void      QuitKey(void)                        //退出键
 296          {
 297   1        if(FunckeyFlag)
 298   1        {
 299   2           FunckeyFlag=0;
 300   2           Disp_Can();                               //上电显示CAN1
 301   2               DispFlag=0x00;
 302   2        }
 303   1      }
C51 COMPILER V6.23a  MAIN                                                                  08/06/2002 16:18:58 PAGE 6   

 304          
 305          //确认键处理
 306          void      EnterKey(void)                       //确认键
 307          {
 308   1        uchar   Tempdata;
 309   1        if(FunckeyFlag)
 310   1        {
 311   2           Tempdata=GetLedData();
 312   2           if(DispBuf[1]==0x0a)
 313   2               {
 314   3              switch(DispBuf[2])
 315   3                  {
 316   4                 case  0x01:
 317   4                               SetSystemBuf[0]=Tempdata; 
 318   4                                       EnterNext();
 319   4                                       break;
 320   4                         case  0x02:
 321   4                               SetSystemBuf[1]=Tempdata;
 322   4                                       if(!BCAN_ENTER_RETMODEL())
 323   4                                       {
 324   5                             BCAN_SET_OBJECT(SetSystemBuf[0],SetSystemBuf[1]);
 325   5                         BCAN_QUIT_RETMODEL();
 326   5                                        }
 327   4                                        else   Error_disp(CAN_ENTRESET_ERR );
 328   4                                          
 329   4                                       EnterNext();
 330   4                                       break;
 331   4                 case  0x03:
 332   4                               BandRateBuf=Tempdata;
 333   4                                       if(Tempdata>12) Error_disp(NO_BANDRATE_SIZE);
 334   4                                       else{
 335   5                                         if(!BCAN_ENTER_RETMODEL())
 336   5                                         {
 337   6                                               BCAN_SET_BANDRATE(Tempdata);
 338   6                                               BCAN_QUIT_RETMODEL();
 339   6                                         }
 340   5                                         DispBuf[2]=1;
 341   5                         DispBuf[3]=0;DispBuf[4]=0;
 342   5                         FlightLed3=1;
 343   5                         FlightLed4=0;ClearLed4=0;
 344   5                                       }
 345   4                                       break;
 346   4                         default:
 347   4                               break;
 348   4                      }
 349   3               }
 350   2               if(DispBuf[1]==0x0b)
 351   2               {
 352   3             if(0<DispBuf[2])
 353   3                 {
 354   4               SetSystemBuf[DispBuf[2]-1]=Tempdata; 
 355   4                       
 356   4               if(DispBuf[2]==0x0a)
 357   4               { 
 358   5                         DispBuf[2]=1;
 359   5                 DispBuf[3]=0;DispBuf[4]=0;
 360   5                 FlightLed3=1;
 361   5                 FlightLed4=0;ClearLed4=0; 
 362   5                       }
 363   4                       else  EnterNext(); 
 364   4                 }
 365   3               }
C51 COMPILER V6.23a  MAIN                                                                  08/06/2002 16:18:58 PAGE 7   

 366   2          if(DispBuf[1]==0x0c)
 367   2              {
 368   3                switch(DispBuf[2])
 369   3                {
 370   4                      case 1:
 371   4                   EditMsSendCount =Tempdata; 
 372   4                               EditMsSendSave  =Tempdata; 
 373   4                               DispBuf[1]=0x05;
 374   4                               DispBuf[2]=0x0d;
 375   4                               FunckeyCount++;
 376   4                               ClearDispAttr();
 377   4                               MoveFlag=0;
 378   4                               break;
 379   4                      default:
 380   4                              break;
 381   4                }
 382   3              }
 383   2        }
 384   1      }
 385          
 386          //按确认键后进入下一小项处理
 387          void      EnterNext(void)                     //按确认键后进入下一小项处理
 388          {
 389   1         DispBuf[3]=0;DispBuf[4]=0;
 390   1         FlightLed3=1;
 391   1         FlightLed4=0;ClearLed4=0;
 392   1         MoveFlag=0;
 393   1         DispBuf[2]++;
 394   1      }
 395          
 396          //发送键处理
 397          void      CanSendKey(void)                                              //发送键
 398          {
 399   1        if(!FunckeyFlag)
 400   1        { BCAN_DATA_WRITE(SetSystemBuf);                              //将编辑的数据发送到can总线
 401   2          BCAN_CMD_PRG(TR_CMD);
 402   2        }
 403   1      }
 404          
 405          //
 406          void  InitCPU(void)
 407          {
 408   1       EA         =1;
 409   1       IT0        =1;
 410   1       EX0        =1;
 411   1       PX0        =1; 
 412   1       InitUart();        //初始化串口 
 413   1      }                                             
 414          
 415          ////
 416          uchar  Config_SJA(void)
 417          { 
 418   1        uchar  data   status=0;
 419   1        Delay_50us(100) ;
 420   1        TimeOut_Start(20);
 421   1        BandRateBuf = ByteRate_1000k;
 422   1        BCAN_ENTER_RETMODEL();
 423   1        if(BCAN_CREATE_COMMUNATION())//
 424   1          {
 425   2          status = CAN_INTERFACE_ERR;
 426   2          return(status);
 427   2        }
C51 COMPILER V6.23a  MAIN                                                                  08/06/2002 16:18:58 PAGE 8   

 428   1        if(BCAN_SET_BANDRATE(BandRateBuf))//初始化系统默认值波特率100kbps
 429   1         {
 430   2          status = CAN_INITBTR_ERR ;
 431   2          return(status);
 432   2        }
 433   1        if(BCAN_SET_OBJECT(0xaa,0x00))
 434   1        {
 435   2          status =CAN_INITOBJECT_ERR;
 436   2          return(status);
 437   2        }
 438   1        
 439   1        if(BCAN_SET_OUTCLK(0xaa,0x48))
 440   1        {
 441   2          status =CAN_INITOUTCTL_ERR;
 442   2          return(status);
 443   2        }
 444   1        if(BCAN_QUIT_RETMODEL())
 445   1        {
 446   2          status = CAN_QUITRESET_ERR;
 447   2          return(status);
 448   2        }
 449   1        
 450   1        SJA_BCANAdr=REG_CONTROL;
 451   1        *SJA_BCANAdr=0X1E;
 452   1        
 453   1        return  status; 
 454   1      }
 455          
 456          //
 457          void   CanRcv_Prg(void)
 458          {
 459   1        uchar  data buf[10],status;
 460   1         if(BCAN_DATA_RECEIVE(buf))                                   //接收数据
 461   1         {status=0xe9;
 462   2          Error_disp(status);
 463   2         }
 464   1        else
 465   1        {  
 466   2          if(BCAN_CMD_PRG(0x04))
 467   2            Error_disp(0xe8);
 468   2              
 469   2              if((buf[1]&0x10)!=0)
 470   2              {
 471   3            switch(buf[1]&0x0f){                                              //远程帧处理
 472   4                  case  0:                                                            //请求发送命令字为0c1h的命令帧
 473   4                            buf[1]=(buf[1]&0xe0)|0x06;
 474   4                                buf[2]=0xc1;
 475   4                    BCAN_DATA_WRITE(buf);                             //将编辑的数据发送到can总线
 476   4                    BCAN_CMD_PRG(TR_CMD);
 477   4                                break;
 478   4                      case  1:
 479   4                            buf[1]=(buf[1]&0xe0)|0x06;
 480   4                                buf[2]=0xc2;
 481   4                    BCAN_DATA_WRITE(buf);                             //将编辑的数据发送到can总线
 482   4                    BCAN_CMD_PRG(TR_CMD);
 483   4                                break;
 484   4                      case  2:
 485   4                            buf[1]=(buf[1]&0xe0)|0x06;
 486   4                                buf[2]=0xc3;
 487   4                    BCAN_DATA_WRITE(buf);                             //将编辑的数据发送到can总线
 488   4                    BCAN_CMD_PRG(TR_CMD);
 489   4                                break;
C51 COMPILER V6.23a  MAIN                                                                  08/06/2002 16:18:58 PAGE 9   

 490   4              case  3:
 491   4                    buf[1]=(buf[1]&0xe0)|0x06;
 492   4                                buf[2]=0xc4;
 493   4                    BCAN_DATA_WRITE(buf);                             //将编辑的数据发送到can总线
 494   4                    BCAN_CMD_PRG(TR_CMD);
 495   4                                break;        
 496   4                      case  4:
 497   4                            buf[1]=(buf[1]&0xe0)|0x06;
 498   4                                buf[2]=0xc5;
 499   4                    BCAN_DATA_WRITE(buf);                             //将编辑的数据发送到can总线
 500   4                    BCAN_CMD_PRG(TR_CMD);
 501   4                                break;
 502   4                      case  5:
 503   4                            buf[1]=(buf[1]&0xe0)|0x06;
 504   4                                buf[2]=0xc6;
 505   4                    BCAN_DATA_WRITE(buf);                             //将编辑的数据发送到can总线
 506   4                    BCAN_CMD_PRG(TR_CMD);
 507   4                                break;
 508   4                      case  6:
 509   4                      case  7:
 510   4                      case  8:
 511   4                      case  9:
 512   4                      default:
 513   4                            break;
 514   4                }
 515   3              }
 516   2              else
 517   2          switch(buf[2])
 518   2          {
 519   3                case 0xc1:                                                            //直通显示
 520   3                     DrecDisplay(&buf[3]);
 521   3                         break;
 522   3                case 0xc2:                                                            //消隐命令
 523   3                     ClearDispPrg(&buf[3]);
 524   3                         break;
 525   3                case 0xc3:                                                            //测试命令
 526   3                     TestDispPrg();
 527   3                         break;
 528   3                case 0xc4:                                                            //左循环命令
 529   3                     LiftCrcDispPrg(&buf[3]);
 530   3                         break;
 531   3                case 0xc5:                                                            //右循环命令
 532   3                     RightCrcDispPrg(&buf[3]);
 533   3                 break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -