sja1000 can 驱动程序演示实验

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SJA1000 CAN驱动程序演示实验

一.实验目的

本驱动程序展示了如何在Small RTOS中编写SJA1000 的驱动程序。通过调用CAN 程序库SJA1000_PEI.LIB 的基本函数,实现实验板上CAN 节点的初始化以及CAN 节点数据

收发测试。

二.实验设备及器件

PC 机一台

DP-51PROC 单片机综合仿真实验仪一台

CAN PARK 模块一台

CAN 连接线一根

三.实验步骤

1、将CAN-bus PARK 插入到A6 区中,用导线连接A6 区的P1_IO2 到A2 区的P1 0,

连接A6 区的P1_CS1 到A2 区的A15。

2、使用导线把A2 区的P16 和P17 分别于D5 区的SCL 和SDA 相连。使用导线把D 5

区的/RST 与VCC 相连。

3、由于本程序使用中断方式响应SJA1000 中断,故将A5 区的P1_INT 接到A2 区的INT0。

4、利用CAN 连接线将两台已经安装了CAN-Bus 模块的DP-51PROC 连接起来,以组成简单的CAN 网络实现CAN 的接收和发送。

5、本驱动程序已经将输出文件路径设置为“E:\Temp”,用户可自行更改输出文件路径。将路径“E:\Temp”中的CAN. hex 文件下载到两台DP-51PROC 中运行。

四.实验参考程序主要部分

/******************************************************

*描述:独立的CAN 控制器SJA1000PeliCAN 在small rtos 中的应用示例

*文件名: PELIRTOS.c

*应用语言: KEIL C51

*应用系统: small rtos

*版本: V1.0

*广州周立功单片机发展有限公司保留所有的版权

****************************************************/

#define _TIME_MODULE_H

#define _SERIAL_H

/********************************************************

** 导入头文件

******************************************************/

#include "INCLUDES.h"

#include "Sja1000_peli.h"

sfr IPH=0xb7;

sbit RESET_PIN=P1^0;

// 验收代码/屏蔽寄存器的内容(4+4)

uint8 xdata Send_CAN_Filter[8]={0xf0,0xf0,0xf0,0xff,0xff,0xff,0xff,0xff};

// 帧信息和标示码(1+4)分别对应TX,TX1,TX2,TX3,TX4

uint8 xdata Send_CAN_Info_ID[3]={0xc7,0x0A,0x0B};

uint8 xdata Recv_CAN_Info_ID[3];

// 待发送数据(8)

uint8 xdata

Send_CAN_Data[13]={0xc7,0x0A,0x0B,0x04,0x05,0x06,0x07,0x08,0x07,0x0 8,0x07,0x08,

0x08};

uint8 xdata Recv_CAN_Data[14];

uint8 xdata time_Counter=0;

uint8 xdata BTR0,BTR1;

uint16 xdata *p;

uint8 xdata disp_buf[8];

void CAN_Send(void);

void display(void);

void CAN_Rcv(void);

void TimeSum(void);

void Delay_ms(uint8 j);

void SJA1000_Config_Normal(void);

void Init(void)

{

CKCON=1; //应用6clock

TMOD = (TMOD & 0XF0) | 0X01;

TCON=TCON|0x04; //MCU 的INT1 下降沿触发,INT0 电平触发

TH0 = (65536 - (11059200 / 12) / 100) / 256;

TL0 = (65536 - (11059200 / 12) / 100) % 256;

TR0 = 1;

ET0 = 1;

TF0 = 0;

}

/************************************************************** **

**函数名称:void CAN_Init(void)

**功能描述:复位SJA1000,并设置其工作在正常模式

************************************************************** ***/

void CAN_Init(void)

{

RESET_PIN=0; //将SJA1000 的复位线与P1.0 相连接

Delay_ms(1);

RESET_PIN=1; //控制P1.0 来实现SJA1000 的复位

SJA_CS_Point=&CAN_SJA_BaseAdr;

SJA1000_Config_Normal();

WriteSJAReg(REG_CAN_IER,RIE_BIT); //使能SJA1000 接收中断

EX0=1;

}

/************************************************************** ** 函数原型: void Delay_ms(uchar j)

** 功能描述: 该函数用于不精确的延时。在12M,6CLK 下,大约延时j*1ms

************************************************************** */

相关文档
最新文档