原创 CAN总线实验成功(附图)

2008-3-21 15:13 2799 7 11 分类: MCU/ 嵌入式

淘的芯片SJA1000到了后赶快焊了个板子,烧上自收发的程序,一切正常。高兴!接下来是完善程序,多弄几个节点。不说了,上图。208278bb-1021-4c22-87e4-ebdc7b4af32c.jpg651d57f6-413f-4eac-ae81-31616e5950c0.jpg

PARTNER CONTENT

文章评论4条评论)

登录后参与讨论

lg05128018_230568758 2008-8-1 14:16

在EDN的CAN助学小组有资料,可以去看看。

用户155504 2008-7-31 12:11

博主,您好!能否提供一些can收发的软硬件资料吖?这几天正在学习can智能节点收发,但硬件和软件 做好了以后 却不能收发!!!急吖 急吖~~! 我的邮箱:lwjian16@126.com 不胜感激!!!

用户137054 2008-3-28 08:38

请楼主有时间给我看看我的程序有什么问题哈 我做了个CAN总线智能节点,但是就是发送不了数据,请教高手看看我的程序有何问题,谢谢哈! 程序部分仅仅是用来发送的,单片机用的STC89C52RC, 但是KEIL中呢,没有该款单片机的型号的,所以我选的AT89C51,不知道这样是不是合适的, SJA1000的复位端/RST与P2.3连,/CS与P2.0相连,下面是程序 #include #define MODE 0xFE00; // SJA1000方式寄存器 #define CMR 0xFE01; // SJA1000命令寄存器 #define SR 0xFE02; // SJA1000状态寄存器 #define IR 0xFE03; // SJA1000中断寄存器 #define IER 0xFE04; // SJA1000验收代码寄存器 ;中断使能寄存器 #define ACR 0xFE10; // SJA1000验收代码寄存器 #define AMR 0xFE14 ; // SJA1000验收屏蔽寄存器 #define BTR0 0xFE06 ; // SJA1000总线定时寄存器0 #define BTR1 0xFE07; // SJA1000总线定时寄存器1 #define OCR 0xFE08 ; // SJA1000输出控制寄存器 #define RBSA 0xFE1E ; // SJA1000接收缓存器起始地址寄存器 #define CDR 0xFE1F; // SJA1000时钟分频寄存器 #define ALC 0xFE0B; // SJA1000丢失仲裁捕获寄存器 #define ECC 0xFE0C; // SJA1000错误代码捕获寄存器 #define CANTXB 0xFE10; // SJA1000发送缓冲区首址 #define CANRXB 0xFE10 ; // SJA1000接收缓冲区首址 #define RXERR 0xFE0E; // SJA1000接收错误寄存器 #define TXERR 0xFE0F ; // SJA1000发送错误寄存器 sbit ACC0 = ACC^0; sbit ACC1 = ACC^1; sbit ACC2 = ACC^2; sbit ACC3 = ACC^3; sbit ACC4 = ACC^4; sbit ACC5 = ACC^5; sbit ACC6 = ACC^6; sbit P23 = P2^3; // SJA1000复位端 unsigned char xdata *Psja1000; // 子函数定义 void INIsja1000(void); // sja1000初始化子程序 void Tdata(void); // 发送数据子程序 main(void) { unsigned long wait; P23=0; // SJA1000复位引脚拉低,进入复位状态 for(wait=0;wait<40000;wait++)//低电平延迟,以便复位 ; P23=1; // SJA1000复位引脚拉高 INIsja1000(); while(1) { Tdata(); for(wait=0;wait<30000;wait++) ; } } //main void INIsja1000(void) { do { Psja1000 = MODE; *Psja1000 = 0x09; } while(ACC0 == 0); // 进入复位模式,对SJA1000进行初始化 Psja1000 = CDR; *Psja1000 = 0x88; // 选择PeliCAN模式,关闭时钟输出(CLKOUT) Psja1000 = IER; *Psja1000 = 0x01; // 中断允许寄存器开放发送中断、溢出中断和错误警告中断 Psja1000 = AMR; // 接收屏蔽寄存器 *Psja1000 = 0xff; Psja1000++; *Psja1000 = 0xff; Psja1000++; *Psja1000 = 0xff; Psja1000++; *Psja1000 = 0xff; Psja1000 = ACR; // 接收代码寄存器 *Psja1000 = 0xff; Psja1000++; *Psja1000 = 0xff; Psja1000++; *Psja1000 = 0xff; Psja1000++; *Psja1000 = 0xff; Psja1000 = BTR0; // 总线定时寄存器 *Psja1000 = 0x31; Psja1000 = BTR1; *Psja1000 = 0x1c; Psja1000 = OCR; // 输出控制寄存器 *Psja1000 = 0xaa; Psja1000 = RBSA; // 接收缓存器起始地址寄存器 *Psja1000 = 0x00; Psja1000 = TXERR; // 发送错误计数寄存器 *Psja1000 = 0x00; Psja1000 = ECC; // 错误代码捕捉寄存器,清除错误代码捕捉寄存器 ACC = *Psja1000; Psja1000 = MODE; // 设置双滤波接收方式,并返回工作状态 *Psja1000 = 0x08; } // INIsja1000 void Tdata(void) { do { Psja1000 = SR; ACC = *Psja1000; } while(ACC4 ==1); // 判断是否正在接收正在接收则等待 do { Psja1000 = SR; ACC = *Psja1000; } while(ACC3 ==0); // 判断上次发送是否完成未完成则等待发送完成 do { Psja1000 = SR; ACC = *Psja1000; } while(ACC2 ==0); // 判断发送缓冲区是否锁定锁定则等待 Psja1000 = CANTXB; // SJA1000 发送缓存区首址 *Psja1000 =0x84; Psja1000++; *Psja1000 =0xf3; Psja1000++; *Psja1000 =0xff; Psja1000++; // 29 ID *Psja1000 =0xff; Psja1000++; *Psja1000 =0xf0; Psja1000++; *Psja1000 =0x12; Psja1000++; *Psja1000 =0x34; Psja1000++; // 数据 *Psja1000 =0x56; Psja1000++; *Psja1000 =0x78; Psja1000 = CMR; *Psja1000 =0x01; // 发送数据 } // tdata

用户1164845 2008-3-26 11:10

你发送器用的是不是82C250啊,自收发电路怎么搭建啊 能不能上个原理图啊 谢谢
相关推荐阅读
lg05128018_230568758 2010-10-24 17:21
4052原理,扩展四串口原理
4052原理 cd4051,cd4052,cd4053, 都是数控模拟开关,4051是单刀8掷开关,4052是2刀4掷开关,4053是3刀2掷开关,4051有3个控制端abc,控制8个输入端中的1个与...
lg05128018_230568758 2010-10-13 02:45
Menu
/*********************************************************************************/code KbdTabStruct...
lg05128018_230568758 2010-09-01 08:13
指针-指针数组-数组三者之间的关系
/****************lg05128018**************2009-8-19*****************************//***************指针,指...
lg05128018_230568758 2010-02-22 20:38
EBOOT通过bin文件形式读取、下载LOGO
一般的WINCE系统都是在EBOOT阶段初始化LCD,所以要想显示自己的LOGO就需要在EBOOT阶段将LOGO内容显示出来,读取LOGO的方式可以和从存储器中读取NK一样,具体位置自己来定义。 在E...
lg05128018_230568758 2010-02-22 20:27
nk.bin和nk.nb0的区别(转帖)
 nk.bin 和nk.nb0都是CE的镜像。然而,我们在下载的过程中常常会遇到,有时候下载nk.bin,有时确是下载nk.nb0,这两者到底有什么区别呢? 首先,NK.BIN中的内容是被压缩过的,N...
lg05128018_230568758 2010-02-03 17:53
从一维数组看sizeof和strlen
作者:王姗姗,华清远见嵌入式学院讲师。前几天学习一维数组的赋值的时候遇到这样一个问题,程序如下:char a[]="hello";        char b[5]={'h','e','l','l',...
EE直播间
更多
我要评论
4
7
关闭 站长推荐上一条 /3 下一条