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