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

📄 sja1000 basiccan模式的通讯测试程序.txt

📁 SJA1000 BasicCAN模式的通讯测试 适用于任何基于任何兼容8051指令的微处理器同SJA1000组成的CAN系统
💻 TXT
📖 第 1 页 / 共 3 页
字号:
            }   
            break;   
      case  0x0c:   
               
      default:   
            break;   
    }   
  }//if结束    
}   
   
   
//移位键处理    
    
void      MoveKey(void)                //移位键    
{   
  if(FunckeyFlag)   
  {   
     MoveFlag=~ MoveFlag;              //移位    
     if(MoveFlag)   
     {FlightLed3=0;ClearLed3=0;    
      FlightLed4=1;   
     }   
     else   
     {   
      FlightLed3=1;   
      FlightLed4=0;ClearLed4=0;    
     }   
  }   
}   
   
//增加键处理    
void      IncKey(void)                  //增加键    
{   
   if(FunckeyFlag)   
  {   
    if(MoveFlag)   
    {   
      if(++DispBuf[4]>0x0f)DispBuf[4]=0;   
    }   
    else   
      if(++DispBuf[3]>0x0f)DispBuf[3]=0;   
  }   
}   
   
//退出键处理    
void      QuitKey(void)                        //退出键    
{   
  if(FunckeyFlag)   
  {   
     FunckeyFlag=0;   
     Disp_Can();                               //上电显示CAN1    
     AutoSendFlag=0;   
     DispFlag=0x00;   
     AutoSendFlag=0;   
  }   
}   
   
//确认键处理    
void      EnterKey(void)                       //确认键    
{   
  uchar   Tempdata,i;   
  if(FunckeyFlag)   
  {   
     Tempdata=GetLedData();   
     if(DispBuf[1]==0x0a)   
     {   
        switch(DispBuf[2])   
        {   
           case  0x01:   
                BCAN_ENTER_RETMODEL();   
                WriteSjaReg(REG_ACR,Tempdata);       //a1功能    
                i= ReadSjaReg(REG_AMR);   
                BCAN_QUIT_RETMODEL();      
                Write_DispBuf(0,0x0a,0x02,i>>4,i&0x0f);       //a2功能    
                MoveFlag=0;   
                FlightLed3=1;   
                FlightLed4=0;ClearLed4=0;    
                break;   
           case  0x02:   
                BCAN_ENTER_RETMODEL();   
                WriteSjaReg(REG_AMR,Tempdata);       //a2功能    
                i = ValueToBandRate();   
                BCAN_QUIT_RETMODEL();   
                Write_DispBuf(0,0x0a,0x03,i>>4,i&0x0f);       //a3功能    
                   
                MoveFlag=0;   
                FlightLed3=1;   
                FlightLed4=0;ClearLed4=0;    
                break;   
           case  0x03:   
                BCAN_ENTER_RETMODEL();   
                BCAN_SET_BANDRATE(Tempdata);   
                i= ReadSjaReg(REG_ACR);   
                BCAN_QUIT_RETMODEL();   
                Write_DispBuf(0,0x0a,1,i>>4,i&0x0f);   
                MoveFlag=0;   
                FlightLed3=1;   
                FlightLed4=0;ClearLed4=0;    
                break;   
           default:   
                MoveFlag=0;   
                FlightLed3=1;   
                FlightLed4=0;ClearLed4=0;    
                Write_DispBuf(0,0x0a,1,i>>4,i&0x0f);   
                 break;   
        }   
     }   
     if(DispBuf[1]==0x0b)   
     {   
        if((ReadSjaReg(REG_CONTROL)&0x01)==0)   
        {   
            if(0<DISPBUF[2]) Write_DispBuf(0,0x0b,1,i i="ReadSjaReg(REG_TxBuffer1);" { if(DispBuf[2]="=0x0a)" WriteSjaReg(REG_TxBuffer1+DispBuf[2]-1,Tempdata);>>4,i&0x0f);   
                    MoveFlag=0;   
                    FlightLed3=1;   
                    FlightLed4=0;ClearLed4=0;     
                }   
                else  EnterNext();    
            }   
   
        }    
     }   
    if(DispBuf[1]==0x0c)   
    {   
      switch(DispBuf[2])   
      {   
        case 1:   
             EditMsSendCount =Tempdata;    
             EditMsSendSave  =Tempdata;    
             DispBuf[1]=0x05;   
             DispBuf[2]=0x0d;   
             FunckeyCount++;   
             ClearDispAttr();   
             MoveFlag=0;   
             break;   
        default:   
            break;   
      }   
    }   
    if((DispBuf[1]==0x05)&&(DispBuf[2]==0x0d))  //设定    
    {   
        SendFrq =Tempdata;    
        AutoSendFlag =1;   
        DispBuf[3]=0;   
        DispBuf[4]=0;   
        MoveFlag=0;   
        FlightLed3=1;   
        FlightLed4=0;ClearLed4=0;    
    }   
  }   
}   
   
 //按确认键后进入下一小项处理    
void      EnterNext(void)     
{   
    unsigned    char i;   
   FlightLed3=1;   
   FlightLed4=0;ClearLed4=0;   
   MoveFlag=0;   
   i=ReadSjaReg(REG_TxBuffer1+DispBuf[2]);   
   DispBuf[2]++;   
   DispBuf[3]=i>>4;   
   DispBuf[4]=i&0x0f;   
}   
   
//发送键处理    
void      CanSendKey(void)                      //发送键    
{   
    if((ReadSjaReg(REG_CONTROL)&0x01)==0)   
    {   
        BCAN_CMD_PRG(TR_CMD);   
    }   
    else   
    {   
        Write_DispBuf(0,0x0E,0x12,0x0f,0x0d);//在复位模式    
    }   
}   
   
//    
void  InitCPU(void)   
{   
 EA         =1;   
 IT0        =1;   
 EX0        =1;   
 PX0        =1;    
 InitUart();        //初始化串口     
}                                                
   
////    
uchar  Config_SJA(void)   
{    
  uchar  data   status=0;   
  Delay_50us(100) ;   
  TimeOut_Start(20);   
  BandRateBuf = ByteRate_1000k;   
  BCAN_ENTER_RETMODEL();   
  if(BCAN_CREATE_COMMUNATION())//    
    {   
    status = CAN_INTERFACE_ERR;   
    return(status);   
  }   
  if(BCAN_SET_BANDRATE(BandRateBuf))//初始化系统默认值波特率1000kbps    
   {   
    status = CAN_INITBTR_ERR ;   
    return(status);   
  }   
  if(BCAN_SET_OBJECT(0xaa,0xff))   
  {   
    status =CAN_INITOBJECT_ERR;   
    return(status);   
  }   
     
  if(BCAN_SET_OUTCLK(0xaa,0x48))   
  {   
    status =CAN_INITOUTCTL_ERR;   
    return(status);   
  }   
  if(BCAN_QUIT_RETMODEL())   
  {   
    status = CAN_QUITRESET_ERR;   
    return(status);   
  }   
     
  SJA_BCANAdr=REG_CONTROL;   
  *SJA_BCANAdr=0X1E;   
     
  return  status;    
}   
   
//    
void   CanRcv_Prg(void)   
{   
  uchar  data buf[10],status;   
   if(BCAN_DATA_RECEIVE(buf))                   //接收数据    
   {status=0xe9;   
    Error_disp(status);   
   }   
  else   
  {     
    if(BCAN_CMD_PRG(0x04))   
      Error_disp(0xe8);   
       
    if((buf[1]&0x10)!=0)   
    {   
      switch(buf[1]&0x0f){                      //远程帧处理    
        case  0:                                //请求发送命令字为0c1h的命令帧    
              buf[1]=(buf[1]&0xe0)|0x06;   
              buf[2]=0xc1;   
              BCAN_DATA_WRITE(buf);             //将编辑的数据发送到can总线    
              BCAN_CMD_PRG(TR_CMD);   
              break;   
        case  1:   
              buf[1]=(buf[1]&0xe0)|0x06;   
              buf[2]=0xc2;   
              BCAN_DATA_WRITE(buf);             //将编辑的数据发送到can总线    
              BCAN_CMD_PRG(TR_CMD);   
              break;   
        case  2:   
              buf[1]=(buf[1]&0xe0)|0x06;   
              buf[2]=0xc3;   
              BCAN_DATA_WRITE(buf);             //将编辑的数据发送到can总线    
              BCAN_CMD_PRG(TR_CMD);   
              break;   
        case  3:   
              buf[1]=(buf[1]&0xe0)|0x06;   
              buf[2]=0xc4;   
              BCAN_DATA_WRITE(buf);             //将编辑的数据发送到can总线    
              BCAN_CMD_PRG(TR_CMD);   
              break;       
        case  4:   
              buf[1]=(buf[1]&0xe0)|0x06;   
              buf[2]=0xc5;   
              BCAN_DATA_WRITE(buf);             //将编辑的数据发送到can总线    
              BCAN_CMD_PRG(TR_CMD);   
              break;   
        case  5:   
              buf[1]=(buf[1]&0xe0)|0x06;   
              buf[2]=0xc6;   
              BCAN_DATA_WRITE(buf);             //将编辑的数据发送到can总线    
              BCAN_CMD_PRG(TR_CMD);   
              break;   
        case  6:   
        case  7:   
        case  8:   
        case  9:   
        default:   
              break;   
      }   
    }   
    else   
    switch(buf[2])   
    {   
      case 0xc1:                                //直通显示    
           DrecDisplay(&buf[3]);   
           break;   
      case 0xc2:                                //消隐命令    
           ClearDispPrg(&buf[3]);   
           break;   
      case 0xc3:                                //测试命令    
           TestDispPrg();   
           break;   
      case 0xc4:                                //左循环命令    
           LiftCrcDispPrg(&buf[3]);   
           break;   
      case 0xc5:                                //右循环命令    
           RightCrcDispPrg(&buf[3]);   
           break;   
      case 0xc6:                                //闪烁    
           FlightDispPrg(&buf[3]);               
           break;   
      case 0xc9:                                //改变总线波特率命令    
      default:   
           break;   
    }   
  }   
}   
   
//    
void   DrecDisplay(uchar *databuf)  //直通显示    
{   
   ClearDispAttr();   
   memcpy(&DispBuf[1],&databuf[1],4);   
   switch(databuf[0])   
   {     
    case   0:   

⌨️ 快捷键说明

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