原创作品-单片机及其它CPU外接CAN控制器SJA100程序设计
- 格式:doc
- 大小:28.50 KB
- 文档页数:2
外接CAN控制器SJA100程序设计
1 初始化SJA1000
void CanInitialize()
{
CAN_RESET=1; //定义好sbit CAN_RESET=PX^X; CAN_RESET=0; CAN_RESET=0; CAN_RESET=0;
CAN_RESET=1; CAN_RESET=1; CAN_RESET=1;
ModeControlReg=0x01;
ClockDivideReg=0x88;
InterruptEnReg=0x00;
AcceptCode0Reg=0xff; //验证码设置,参考SJA100数据手册AcceptCode1Reg=0xff;
AcceptCode2Reg=0xff;
AcceptCode3Reg=0xff;
AcceptMask0Reg=0xff; //屏蔽码设置,参考SJA100数据手册AcceptMask1Reg=0xff;
AcceptMask2Reg=0xff;
AcceptMask3Reg=0xff;
BusTiming0Reg =0x7f;
BusTiming1Reg =0xff; //速率5K SJA1000晶振采用16MHz OutControlReg =0x1a;
RxBufStartAdr =0x00;
TxErrCountReg =0x00;
ErrCodeCapReg =0x00;
ModeControlReg=0x00;
}
2 发送函数
void CanTxd
(unsigned char FrameForm,unsigned char TargetAddress,unsigned char Command,unsigned char SourceAddress,unsigned char ID3,unsigned char Data5, unsigned char Data6, unsigned char Data7, unsigned char Data8, unsigned char Data9,unsigned char Data10, unsigned char Data11,unsigned char Data12)
{
TxFrameInfo=FrameForm; //发送时此为固定数,即0x88,即扩展帧,字节数为8 TxBuffer1 =TargetAddress;
TxBuffer2 =Command;
TxBuffer3 =SourceAddress;
TxBuffer4 =ID3;
TxBuffer5 =Data5;
TxBuffer6 =Data6;
TxBuffer7 =Data7;
TxBuffer8 =Data8;
TxBuffer9 =Data9;
TxBuffer10 =Data10;
TxBuffer11 = Data11;
TxBuffer12 = Data12;
}
3 接收函数
void CanRxd()
{
unsigned char ReadCounter=5; //定义读次数
while((RxMsgCountReg)&& ReadCounter --)
{
CanData[0] =RxFrameInfo; //接收缓冲器首地址
CanData[1] =RxBuffer1;
CanData[2] =RxBuffer2;
CanData[3] =RxBuffer3;
CanData[4] =RxBuffer4;
CanData[5] =RxBuffer5;
CanData[6] =RxBuffer6;
CanData[7] =RxBuffer7;
CanData[8] =RxBuffer8;
CanData[9] =RxBuffer9;
CanData[10]=RxBuffer10;
CanData[11]=RxBuffer11;
CanData[12]=RxBuffer12;
CommandReg=0x04;
}
}
特别提示:使用前应定义好以上函数中的特殊功能寄存器地址。
作者:万里无云烟。