📄 sja1000 basiccan模式的通讯测试程序.txt
字号:
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 + -