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

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

📁 SJA1000 BasicCAN模式的通讯测试 适用于任何基于任何兼容8051指令的微处理器同SJA1000组成的CAN系统
💻 TXT
📖 第 1 页 / 共 3 页
字号:
           DispFlag|=0xe0;   
           break;   
    case   1:   
           DispFlag|=0xd0;   
           break;   
    case   2:   
           DispFlag|=0xb0;   
           break;   
    case   3:   
           DispFlag|=0x70;   
           break;   
    case   4:   
           DispFlag|=0xc0;   
           break;   
    case   5:   
           DispFlag|=0xa0;   
           break;   
    case   6:   
           DispFlag|=0x60;   
           break;   
    case   7:   
           DispFlag|=0x90;   
           break;   
    case   8:   
           DispFlag|=0x50;   
           break;   
    case   9:   
           DispFlag|=0x30;   
           break;   
    case   10:   
           DispFlag|=0x80;   
           break;   
    case   11:   
           DispFlag|=0x40;   
           break;   
    case   12:   
           DispFlag|=0x10;   
           break;   
    case   13:   
           DispFlag|=0x20;   
           break;   
    case   14:   
           DispFlag=0;   
           break;   
    default:   
           break;   
   }   
   
}   
   
//测试处理函数    
void   TestDispPrg(void)                       //测试处理函数    
{   
   uchar i;   
   DispFlag=0;   
   DispFlag|=0x0f;   
   for(i=1;i<5;i++) DispBuf[i]=0x08;           
         
}   
//消隐处理函数    
void   ClearDispPrg(uchar *databuf)                     //消隐处理函数    
{   
   ClearDispAttr();   
   memcpy(&DispBuf[1],&databuf[1],4);   
   DispFlag=0;   
  switch(databuf[0])   
   {     
    case   0:   
           DispFlag|=0x10;   
           break;   
    case   1:   
           DispFlag|=0x20;   
           break;   
    case   2:   
           DispFlag|=0x40;   
           break;   
    case   3:   
           DispFlag|=0x80;   
           break;   
    case   4:   
           DispFlag|=0x30;   
           break;   
    case   5:   
           DispFlag|=0x50;   
           break;   
    case   6:   
           DispFlag|=0x90;   
           break;   
    case   7:   
           DispFlag|=0x60;   
           break;   
    case   8:   
           DispFlag|=0xa0;   
           break;   
    case   9:   
           DispFlag|=0xc0;   
           break;   
    case   10:   
           DispFlag|=0x70;   
           break;   
    case   11:   
           DispFlag|=0xb0;   
           break;   
    case   12:   
           DispFlag|=0xe0;   
           break;   
    case   13:   
           DispFlag|=0xd0;   
           break;   
    case   14:   
           DispFlag|=0xf0;   
           break;   
    default:   
           break;   
   }   
}   
   
//    
void   FlightDispPrg(uchar *databuf)                    //闪烁处理函数        
{     
   ClearDispAttr();   
   memcpy(&DispBuf[1],&databuf[1],4);   
   DispFlag=0;   
  switch(databuf[0])   
   {     
    case   0:   
           DispFlag|=0x01;   
           break;   
    case   1:   
           DispFlag|=0x02;   
           break;   
    case   2:   
           DispFlag|=0x04;   
           break;   
    case   3:   
           DispFlag|=0x08;   
           break;   
    case   4:   
           DispFlag|=0x03;   
           break;   
    case   5:   
           DispFlag|=0x05;   
           break;   
    case   6:   
           DispFlag|=0x09;   
           break;   
    case   7:   
           DispFlag|=0x06;   
           break;   
    case   8:   
           DispFlag|=0x0a;   
           break;   
    case   9:   
           DispFlag|=0x0c;   
           break;   
    case   10:   
           DispFlag|=0x07;   
           break;   
    case   11:   
           DispFlag|=0x0b;   
           break;   
    case   12:   
           DispFlag|=0x0e;   
           break;   
    case   13:   
           DispFlag|=0x0d;   
           break;   
    case   14:   
           DispFlag|=0x0f;   
           break;   
    default:   
           break;   
   }   
}   
   
//    
void   LiftCrcDispPrg(uchar *databuf)           //左循环显示处理    
{   
   ClearDispAttr();   
   memcpy(&DispBuf[1],&databuf[1],4);   
   LiftCrcDispFlag=1;RightCrcDispFlag=0;   
}   
void   RightCrcDispPrg(uchar *databuf)          //右循环显示处理    
{   
  ClearDispAttr();   
  memcpy(&DispBuf[1],&databuf[1],4);   
  LiftCrcDispFlag=0;RightCrcDispFlag=1;   
}   
   
//    
void   CanSend_Prg(void)                        //can发送数据    
{   
    if(AutoSendFlag)   
    {   
        if((DispBuf[1]==0x05)&&(DispBuf[2]==0x0d))  //    
        {   
            DispBuf[3]= (unsigned char )TestSendData>>4;   
            DispBuf[4]= ((unsigned char )TestSendData)&0x0f;   
        }      
    }   
}   
void   CanErr_Prg(void)                         //发现错误后处理    
{   
    DispBuf[1]=0;   
    DispBuf[2]=0;   
    Config_SJA();                                   //    
    Error_disp(CAN_BUS_ERR);    
}   
void   CanDtOver_Prg(void)                      //超载处理    
{   
//  BCAN_CMD_PRG(COS_CMD);    
}   
void   CanWui_Prg(void)                         //唤醒中断处理    
{   
     
}   
   
//    
void   UartRcv_Prg(void)                        //串口接收到数据处理    
{   
    BCAN_DATA_WRITE(RcvBuf);                    //将编辑的数据发送到can总线    
    BCAN_CMD_PRG(TR_CMD);   
}   
   
//自动发送    
void   AutoSendDataToCanBus(void)   
{   
       
    if(AutoSendFlag)   
    {   
        if((ReadSjaReg(REG_CONTROL)&0x01)==0)   
        {   
            AutoSendFrameID >>=5;   
            AutoSendFrameID++;   
            if(AutoSendFrameID>0x0fe00)   
            {   
                AutoSendFrameID=0;     
            }   
            AutoSendFrameID <<=5;   
            TestSendData++;   
            WriteSjaReg(REG_TxBuffer1,AutoSendFrameID>>8);   
            WriteSjaReg(REG_TxBuffer2,((unsigned char)AutoSendFrameID&0xf0)|0x06);   
            WriteSjaReg(REG_TxBuffer3,0xc1);   
            WriteSjaReg(REG_TxBuffer4,14);   
            WriteSjaReg(REG_TxBuffer5,(unsigned char)(TestSendData>>12));   
            WriteSjaReg(REG_TxBuffer6,(unsigned char)((TestSendData>>8)&0x0f));   
            WriteSjaReg(REG_TxBuffer7,((unsigned char)TestSendData>>4));   
            WriteSjaReg(REG_TxBuffer8,((unsigned char)TestSendData&0x0f));   
            BCAN_CMD_PRG(TR_CMD);   
        }   
        else   
        {      
            AutoSendFlag=0;   
            Write_DispBuf(0,0x0E,0x12,0x0f,0x0d);//在复位模式    
        }   
    }   
     
}   
   
//提取波特率的对应值    
unsigned    char    ValueToBandRate(void)   
{   
    unsigned    char    i;   
    unsigned    int     BandRate;      
    BCAN_ENTER_RETMODEL();   
    i = ReadSjaReg(REG_BTR0);   
    BandRate=(unsigned  int)(i<<8);   
    i = ReadSjaReg(REG_BTR1);   
    BandRate +=i;   
    BCAN_QUIT_RETMODEL();   
    switch(BandRate)   
    {   
        case    0xbfff:                     //;5KBPS的预设值    
            i =0;   
            break;   
        case    0x672f:                     //;10KBPS的预设值    
            i =1;   
            break;   
        case    0x532F:                    //;20KBPS的预设值    
            i =2;   
            break;   
        case    0x87FF:                     //;40KBPS的预设值    
            i =3;   
            break;   
        case    0x472F:                     //;50KBPS的预设值    
            i =4;   
            break;   
        case    0x83FF:                     //;80KBPS的预设值    
            i =5;   
            break;   
        case    0x432f:                     //;100KBPS的预设值    
            i =6;   
            break;   
        case    0x031c:                     //;125KBPS的预设值    
            i =7;   
            break;   
        case    0x81fa:                     //;200KBPS的预设值    
            i =8;   
            break;   
        case    0x011c:                     //;250KBPS的预设值    
            i =9;   
            break;   
        case    0x80fa:                     //;400KBPS的预设值    
            i =10;   
            break;   
        case    0x001c:                     //;500KBPS的预设值    
            i =11;   
            break;   
        case    0x80b6:                     //;666KBPS的预设值    
            i =12;   
            break;   
        case    0x0016:                    //;800KBPS的预设值    
            i =13;   
            break;   
        case    0x0014:                      //;1000KBPS的预设值    
            i =14;   
            break;   
        default:   
            i=0xff;   
            break;   
    }   
    return  i;   
} 

⌨️ 快捷键说明

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