can调试经验和总结

上传人:jinli****o2018 文档编号:45672563 上传时间:2018-06-18 格式:PDF 页数:6 大小:162.54KB
返回 下载 相关 举报
can调试经验和总结_第1页
第1页 / 共6页
can调试经验和总结_第2页
第2页 / 共6页
can调试经验和总结_第3页
第3页 / 共6页
can调试经验和总结_第4页
第4页 / 共6页
can调试经验和总结_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《can调试经验和总结》由会员分享,可在线阅读,更多相关《can调试经验和总结(6页珍藏版)》请在金锄头文库上搜索。

1、 EDN首页 博客首页 用户登陆 | 注册网站首页网站首页 | 博客首页博客首页 | 论坛论坛 | 小组小组 | 个人主页个人主页 | 相册相册 | 管理管理 happyxzxins Blog个人信息个人信息 最近加入的小组最近加入的小组 博客公告博客公告 我的分类我的分类 博客日历博客日历 博主:happyxzxin+加为好友 +发送站内短信+我的博客精华+我的推荐文章模拟器件技术.CAN 总线交流区EDN助学CA.日日一一二二三三四四五五六六2526272829303112345678910111213141516171819202122232425262728293012345日志档案日

2、志档案 发表于 2009/8/6 9:56:50 0 标签: sja1000 82c250 can can调试经验和总结调试经验和总结 大家好,这是我第一次发表技术文章,入道不久,感谢大虾们写的文章自己才能做出点东西来,所以我也是做一个回馈也对自己的做一个总结。 powerd by happyxzxin 我做的时候是用面包板搭的电路,老板说会不会有串扰,我告诉你,应该是不会的。 搭电路搭的只是saj1000和82c250的外围电路,单片机外围电路是从三恒星买的51实验板。 电路图如下: 注意了,不是按原图的,其中要做一些修改也加了一些我的看法: 匹配电阻接一和两个124的都一样。两个30pf(

3、总线上的)不接也行,他们只是起到去干扰的问题,晶振用的是16m的,rx1接的是2.5v左右的电压,不是直接接地,接地了就不好使了,这个问题一会再研究。 电路大概是这样了,不过如果发现有小变动的话请提出来,可能我说漏了。我一会在整理一下电路,在发个出来。如果时间允许的话,嘿嘿 我用的是paie的程序,贴出来 /可以接收全部节点的数据 可以被能接收全部节点数据的节点接收 i=1000; EA = 0; Txd_data+; /存储计数结果,并为待发送的数据 TXD_flag = 1;/要发送数据标志位 while(i- - ); while(i- - ); EA = 1; void CAN_RXD

4、( void ) interrupt 2 /接收数据函数,在中断服务程序中调用 uchar data Judge; EA = 0;/关CPU中断 IE0 = 0; Judge = IR; if( Judge RX_buffer1 = RBSR1; RX_buffer2 = RBSR2; RX_buffer3 = RBSR3; RX_buffer4 = RBSR4; RX_buffer5 = RBSR5; RX_buffer6 = RBSR6; RX_buffer7 = RBSR7; RX_buffer8 = RBSR8; RX_buffer9 = RBSR9; RX_buffer10 = RB

5、SR10; RX_buffer11 = RBSR11; RX_buffer12 = RBSR12; RXD_flag = 1;/置有接收标志 CMR = 0X04; Judge = ALC;/释放仲裁随时捕捉寄存器 Judge = ECC;/释放错误代码捕捉寄存器 IER = 0x01;/ .0=1- - 接收中断使能; EA = 1;/打开CPU中断 void main(void) uchar bdata Judge; Page 2 of 6can调试经验和总结 - - happyxzxins Blog2009- 11- 13http:/ 回复(1) /CPU初始化/* /* SJA_RST

6、 = 0;/CAN总线复位管脚,复位无效 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); */ SJA_RST = 1;/CAN总线复位管脚,复位无效 SJA_CS = 0;/CAN总线片选有效 /* CHECK1 = 0xAA; Judge = CHECK1 ; P3=CHECK12; */ EX1 = 1;/ IT1 = 0;/CAN总线接收中断 电平触发 IT0 = 1;/外部中断0负边沿触发 EX0 = 1;/打开外部中断0 EA = 1; /打开总中断 SJA_CS = 1;/CAN总线片选无效,使对数据总线的操作不会影响S

7、JA1000。 /CPU初始化 CAN_init( ); /SJA1000初始化,对 SJA1000寄存器的读写是采用外部寄存器寻址方式,所以不需要程序单独控制片选有效无效 _nop_(); _nop_(); while(1) _nop_(); _nop_(); Rxd_deal();/接收处理程序 Txd_deal();/发送处理程序 led_seg7(1,Txd_data); led_seg7(3,Rxd_data); /*处理函数* void Rxd_deal(void) / 接收处理程序/ if( RXD_flag ) EA = 0;/关闭CPU中断 RXD_flag = 0; Rxd

8、_data = RX_buffer5; EA = 1; / 接收处理程序/ void Txd_deal(void) /发送处理函数,主要是准备数据,并且调用发送函数 if( TXD_flag = 1 ) _nop_(); TXD_flag = 0; TX_buffer5 = Txd_data;/ CAN_TXD(); _nop_(); _nop_(); 最新评论最新评论Page 3 of 6can调试经验和总结 - - happyxzxins Blog2009- 11- 13http:/ /*CAN子函数* void CAN_init( void ) /SJA1000 的初始化 uchar b

9、data Judge; uchar ACRR4; uchar AMRR4; ACRR0 = 0x11; ACRR1 = 0x22; ACRR2 = 0x33; ACRR3 = 0x44;/接收代码寄存器,节点1 AMRR0 = 0xff; AMRR1 = 0Xff; AMRR2 = 0xff; AMRR3 = 0xff;/接收屏蔽寄存器。 只接收主机发送的信息 do / .0=1- - - reset MODRe,进入复位模式,以便设置相应的寄存器 /防止未进入复位模式,重复写入 MODR = 0x09; Judge = MODR ; while( !(Judge CDR = 0x88;/ C

10、DR.3=1- - 时钟关闭, .7=0- - - basic CAN, .7=1- - - Peli CAN BTR0 = 0x31; BTR1 = 0x1c;/总线波特率设定 IER = 0x01;/ .0=1- - 接收中断使能; .1=0- - 关闭发送中断使能 OCR = 0xaa;/ 配置输出控制寄存器 CMR = 0x04;/释放接收缓冲器 ACR = ACRR0; ACR1 = ACRR1; ACR2 = ACRR2; ACR3 = ACRR3;/初始化标示码 AMR = AMRR0; AMR1 = AMRR1; AMR2 = AMRR2; AMR3 = AMRR3;/初始化掩

11、码 do /确保进入自接收模式 MODR = 0x04; Judge = MODR; while( !(Judge /SJA1000 的初始化 void CAN_TXD( void ) uchar data Judge; uchar data TX_buffer N_can ; /初始化标示码头信息 TX_buffer0 = 0x88;/.7=0扩展帧;.6=0数据帧; .3=1数据长度 TX_buffer1 = 0x01;/本节点地址 TX_buffer2 = 0x02;/ TX_buffer3 = 0x03;/ TX_buffer4 = 0x00;/ /初始化标示码头信息 /初始化发送数据

12、单元 TX_buffer5 = Txd_data; TX_buffer6 = 0x22; TX_buffer7 = 0x33; TX_buffer8 = 0x44;/ TX_buffer9 = 0x55;/ TX_buffer10 = 0x66;/ SUPERTC 2009/8/19 9:56:14Page 4 of 6can调试经验和总结 - - happyxzxins Blog2009- 11- 13http:/ TX_buffer11 = 0x77;/ TX_buffer12 = 0x88;/ /初始化数据信息 EA = 0; /关中断 do Judge = SR;/ 状态寄存器 LED

13、_RED = 0;/ while( Judge /SR.4=1 正在接收,等待 do Judge = SR; LED_RED = 0;/ while(!(Judge /SR.3=0,发送请求未处理完,等待 do Judge = SR; LED_RED = 0;/ while(!(Judge /SR.2=0,发送缓冲器被锁。等待 LED_RED = !LED_RED; LED_GRE = !LED_GRE;/灯闪烁 TBSR = TX_buffer0; TBSR1 = TX_buffer1; TBSR2 = TX_buffer2; TBSR3 = TX_buffer3; TBSR4 = TX_b

14、uffer4; TBSR5 = TX_buffer5; TBSR6 = TX_buffer6; TBSR7 = TX_buffer7; TBSR8 = TX_buffer8; TBSR9 = TX_buffer9; TBSR10 = TX_buffer10; TBSR11 = TX_buffer11; TBSR12 = TX_buffer12; CMR = 0x10;/置位自发送接收请求 / 命令寄存器 EA = 1; void Delay(uchar delay_time) /延时程序 while(delay_time- - ) /*CAN子函数* void led_seg7(uchar from,uchar number)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 经验/事迹

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号