永发信息网

求CAN总线调试成功的代码,芯片是SJA1000和TJA1050

答案:1  悬赏:50  手机版
解决时间 2021-03-12 04:29
先给10分,我调试成功的给高分
最佳答案
初始化子程序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;

}

}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
黑色七分袖小西装如何搭配
皮革打印机和普通打印机的区别?
鸡有x只,鸭比鸡多24只,鸭有多少只?
【郁达夫故都的秋】郁达夫《故都的秋》所写的
梦幻西游2怎么样查看召唤兽灵性
戒指戴久了 有一股汗臭味怎么办
在学校里交不到朋友怎么办
丹江口市十堰武当山太子居客栈地址在什么地方
小清新系列正姿 练字铱金钢笔墨水笔怎么安装
61岁老年人微信名字
今天用卡针捅卡槽孔 捅的太大力了,会不会伤
若直线l的参数方程为x=1+3ty=2-4t
富宁力拓钢结构工程有限公司这个地址在什么地
什么中成药能治附睾炎
好着急呀,男朋友爷爷的葬礼我该不该去呀,虽
推荐资讯
如图所示应用电动机提升重物的装置,,电动机
dnf女鬼剑流浪武士走物理还是魔法
飞飞足浴这个地址在什么地方,我要处理点事
英姿瑜伽·肚皮舞学院地址好找么,我有些
如图,下列图片能反映埃及是四大文明古国标志
湖南文武学校最好的是哪家?
那种型号的路由器有绑定手机IP的功能
尿蛋白两个加号可以要孩子吗
古文古文抄一篇
新西兰快递一般清关要多久供应,新西兰快递一
姓名测分名字测试郭茹歆
洪升五金装饰城这个地址在什么地方,我要处理
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?