资源预览内容
第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
第9页 / 共11页
第10页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
一、以下是我做的 CAN 节点的测试程序, 实现两个节点传送数据,程序主要分三部分 SJA1000 的初始化,接收数据,发送数据. /*函数原型: bit Sja_1000_Init(void)*功 能: 初始化 SJA10000*入口参数: 无 *返 回 值: 0: 初始化成功 1: 复位失败 2: 测试 sja1000 失败 3: 设置失败 4: 设置验收滤波器失败5: 设置波特率失败 */unsigned char Sja_1000_Init(void)bit s; EA=0;s=BCAN_ENTER_RETMODEL();if (s=1) return 1; s=BCAN_CREATE_COMMUNATION();if (s=1) return 2;s=BCAN_SET_OUTCLK(0xc0);/Pelicanif (s=1) return 3;s=BCAN_SET_OBJECT(0xFF,0x4E,0x16,0x00,0xff,0x00,0x00,0x00); if (s=1) return 4;s=BCAN_SET_BANDRATE(CAN_BPS_1M); if (s=1) return 5;SJA_BCANAdr=REG_OCR ; *SJA_BCANAdr=0x1a; SJA_BCANAdr=REG_IER; *SJA_BCANAdr=0x03;s=BCAN_SET_CONTROL(0x08);if (s=1) return 6;EA=1;return 0; /*函数原型: bit BCAN_SET_OUTCLK( unsigned char Clock_Out) *参数说明: * Clock_Out:存放时钟分频寄存器(CDR)的参数设置 *返回值: * 0 ;设置成功 * 1 ;设置失败 *说明:设置 SJA1000 的时钟分频 。该子程序只能用于复位模式 */bit BCAN_SET_OUTCLK(unsigned char Clock_Out)SJA_BCANAdr=REG_CDR; *SJA_BCANAdr=Clock_Out; if(*SJA_BCANAdr != Clock_Out)return 1; else return 0; /*函数原型: bit BCAN_SET_OBJECT(unsigned char BCAN_ACR0,BCAN_ACR1,BCAN_ACR2,BCAN_ACR3, BCAN_AMR0, BCAN_AMR1, BCAN_AMR2, BCAN_AMR3 ) *参数说明: * BCAN_ACR(0-3):存放验收代码寄存器(ACR)的参数设置 * BCAN_AMR(0-3):存放接收屏蔽寄存器(AMR)的参数设置 *返回值: * 0 ;设置成功 * 1 ;设置失败 *说明:设置 CAN 节点的通讯对象,允许接收的报文 ,是由 AMR 和 ACR 共同决定的. */bit BCAN_SET_OBJECT(unsigned char BCAN_ACR0,BCAN_ACR1,BCAN_ACR2,BCAN_ACR3,BCAN_AMR0,BCAN_AMR1,BCAN_AMR2,BCAN_AMR3)SJA_BCANAdr=REG_TxBuffer1; *SJA_BCANAdr=BCAN_ACR0; /写入参数SJA_BCANAdr=REG_TxBuffer2;*SJA_BCANAdr=BCAN_ACR1;SJA_BCANAdr=REG_TxBuffer3; *SJA_BCANAdr=BCAN_ACR2;SJA_BCANAdr=REG_TxBuffer4; *SJA_BCANAdr=BCAN_ACR3; /校验写入值if(*SJA_BCANAdr != BCAN_ACR3) return 1; SJA_BCANAdr=REG_TxBuffer5; *SJA_BCANAdr=BCAN_AMR0; /写入参数SJA_BCANAdr=REG_TxBuffer6; *SJA_BCANAdr=BCAN_AMR1;SJA_BCANAdr=REG_TxBuffer7; *SJA_BCANAdr=BCAN_AMR2;SJA_BCANAdr=REG_TxBuffer8; *SJA_BCANAdr=BCAN_AMR3;/校验写入值if(*SJA_BCANAdr != BCAN_AMR3) return 1; return 0; /*;*函数原型: bit BCAN_SET_BANDRATE(unsigned char CAN_ByteRate) *;*返回值: *;* 0 ;波特率设置成功 *;* 1 ;波特率设置失败 *;* * ;*说明:设置 CAN 控制器 SJA1000 通讯波特率.SJA1000 的晶振必须为 16MHz, *;* 其它晶体的频率的值的波特率,需自己计算 。该子程序只能用于 *;* 复位模式 * ;*/ bit BCAN_SET_BANDRATE(unsigned int CAN_ByteRate)/将波特率的的预设值装入 sja1000 的总线定时器SJA_BCANAdr =REG_BTR0; *SJA_BCANAdr =CAN_ByteRate8; / 取 CAN_ByteRate 的高 8位写入 写入参数/校验写入值if(*SJA_BCANAdr !=(CAN_ByteRate8) return 1; SJA_BCANAdr=REG_BTR1; *SJA_BCANAdr=CAN_ByteRate; /校验写入值if(*SJA_BCANAdr !=CAN_ByteRate) return 1; return 0; /* *函数原型: bit BCAN_SET_CONTROL(unsigend char CMD) *参数说明: 设置控制寄存器 */bit BCAN_SET_CONTROL(unsigned char CMD) unsigned char TempData;SJA_BCANAdr=REG_CONTROL; /SJA_BaseAdr+0x00 控制寄存器TempData= *SJA_BCANAdr; *SJA_BCANAdr=CMD;if (*SJA_BCANAdr = CMD)return 0;elsereturn 1;/*函数原型: bit BCAN_CREATE_COMMUNATION(void) * *参数说明: 无 *返回值: * 0 ; 表示 SJA1000 接口正常 * 1 ; 表示 SJA1000 与处理器接口不正常 *说明:该函数用于检测 CAN 控制器的接口是否正常 */bit BCAN_CREATE_COMMUNATION
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号