求CAN总线调试成功的代码,芯片是SJA1000和TJA1050
答案:1 悬赏:50 手机版
解决时间 2021-03-12 04:29
- 提问者网友:鐵馬踏冰河
- 2021-03-11 19:27
先给10分,我调试成功的给高分
最佳答案
- 五星知识达人网友:愁杀梦里人
- 2021-03-11 20:26
初始化子程序CANINIT()
选用CAN2. 0协议构建CAN总线控制网络,对SJA1000的初始化主要包括工作方式的设置、验收代码寄存器ACR、验收屏蔽寄存器AMR、波特率的参数设置等。
void caninit(void)
{control = 1;
while (control&0x01== 0);
acceptancecode = 0x01;
acceptancemask= 0xfe ;
bustiming0= 0x03;
bustiming1= 0x18;
outputcontrol = 0x1A;
clockdivider = 0x40;
control = 0x1A;
}
发送cansend()
发送子程序负责节点报文的发送,由CAN控制器SJA1000独立完成,将命令寄存器里的发送请求标志置位,即可发送SJA1000发送缓冲区中的报文。
void cansend(unsigned char ID ,char*xdata)
{while ( (status&0x10)>> 4 == 1)NOP;
while ( (status&0x04)>> 2== 0)NOP;
Transmitbuffer1= ID;
Transmitbuffer2= 0x08;
Transmitbuffer3= txdata[0] ;
Transmitbuffer10= txdata[7] ;
Command = 0x05 ;
while ( (status&0x08)>> 3== 0);
}
接收子程序canreceive ()
接收子程序负责节点报文的接收。SJA1000自动接收发往该节点的数据并将收到的数据放到它的接收缓冲器中。
SJA1000的报文接收主要有2种方式:中断接收方式和查询接收方式。系统采用的是中断接收方式。
{unsigned char ir ;
ir = interrupt;
EA= 0;
If ( (ir&0x04)>> 2== 1)error ( );
If ( (ir&0x08)>> 3== 1)overruN( );
While ( ( (ir&0x04)>> 2== 1)‖( ( (ir&0x08)>> 3)== 1){NOP;}
RxID[0] = Receivebuffer1;
RxID[0] = Receivebuffer2;
If ( ( (Receivebuffer2&0x10)>> 4)== 0)
{Rxdata[0] = Receivebuffer3;
.
Rxdata[7] = Receivebuffer10;
Command = 0x04 ;
}
else if ( ( (Receivebuffer2&0x10)>> 4)== 1)
{
EA= 1;
}
}
选用CAN2. 0协议构建CAN总线控制网络,对SJA1000的初始化主要包括工作方式的设置、验收代码寄存器ACR、验收屏蔽寄存器AMR、波特率的参数设置等。
void caninit(void)
{control = 1;
while (control&0x01== 0);
acceptancecode = 0x01;
acceptancemask= 0xfe ;
bustiming0= 0x03;
bustiming1= 0x18;
outputcontrol = 0x1A;
clockdivider = 0x40;
control = 0x1A;
}
发送cansend()
发送子程序负责节点报文的发送,由CAN控制器SJA1000独立完成,将命令寄存器里的发送请求标志置位,即可发送SJA1000发送缓冲区中的报文。
void cansend(unsigned char ID ,char*xdata)
{while ( (status&0x10)>> 4 == 1)NOP;
while ( (status&0x04)>> 2== 0)NOP;
Transmitbuffer1= ID;
Transmitbuffer2= 0x08;
Transmitbuffer3= txdata[0] ;
Transmitbuffer10= txdata[7] ;
Command = 0x05 ;
while ( (status&0x08)>> 3== 0);
}
接收子程序canreceive ()
接收子程序负责节点报文的接收。SJA1000自动接收发往该节点的数据并将收到的数据放到它的接收缓冲器中。
SJA1000的报文接收主要有2种方式:中断接收方式和查询接收方式。系统采用的是中断接收方式。
{unsigned char ir ;
ir = interrupt;
EA= 0;
If ( (ir&0x04)>> 2== 1)error ( );
If ( (ir&0x08)>> 3== 1)overruN( );
While ( ( (ir&0x04)>> 2== 1)‖( ( (ir&0x08)>> 3)== 1){NOP;}
RxID[0] = Receivebuffer1;
RxID[0] = Receivebuffer2;
If ( ( (Receivebuffer2&0x10)>> 4)== 0)
{Rxdata[0] = Receivebuffer3;
.
Rxdata[7] = Receivebuffer10;
Command = 0x04 ;
}
else if ( ( (Receivebuffer2&0x10)>> 4)== 1)
{
EA= 1;
}
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯