独立CAN控制器SJA1000的C语言编程_第1页
独立CAN控制器SJA1000的C语言编程_第2页
独立CAN控制器SJA1000的C语言编程_第3页
独立CAN控制器SJA1000的C语言编程_第4页
独立CAN控制器SJA1000的C语言编程_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、CANCAN现场总线系统现场总线系统的设计与应用的设计与应用SJA1000独立独立CAN控制器编程控制器编程SJA1000独立独立CAN控制器控制器C语言编程语言编程 v基于基于51单片机的单片机的SJA1000独立独立CAN控制器的软件控制器的软件设计主要包括三部分:设计主要包括三部分:SJA1000的初始化,报文的初始化,报文的发送和接收。熟悉这三部分的软件设计,是使的发送和接收。熟悉这三部分的软件设计,是使用用SJA1000组建组建CAN通讯网络的基础。通讯网络的基础。v要想将要想将SJA1000用于比较复杂的用于比较复杂的CAN通讯中,除通讯中,除了考虑通讯距离,节点数对波特率的影响外

2、,还了考虑通讯距离,节点数对波特率的影响外,还需要在程序中对需要在程序中对CAN总线的各种错误,总线关闭总线的各种错误,总线关闭等情况进行处理,还需要支持自动检测。等情况进行处理,还需要支持自动检测。SJA1000地址定义文件地址定义文件sj1000reg.h编写编写 vSJA1000独立独立CAN控制器内部寄存器的地址是控制器内部寄存器的地址是8位的,其地址位的,其地址/数据复用总线管脚(数据复用总线管脚(AD0AD7)只与只与51单片机的单片机的P0口相连。口相连。v而而51单片机的地址单片机的地址/数据复用总线由数据复用总线由P0和和P2口组口组成,在使用成,在使用51单片机的地址单片机

3、的地址/数据复用总线对片外数据复用总线对片外数据存储器进行操作时,使用数据存储器进行操作时,使用MOVX指令对其进指令对其进行存取操作,操作数的地址存放于行存取操作,操作数的地址存放于DPTR寄存器寄存器(16位地址)或位地址)或R0、R1寄存器中(寄存器中(8位地址)。位地址)。 8051 特有的内存型态特有的内存型态 vcode 以以 MOVC A+DPTR 读取的程序内存读取的程序内存vdata 可以直接存取的内部数据存储器可以直接存取的内部数据存储器vidata 以以 MOV Rn 存取的内部数据存储器存取的内部数据存储器vbdata 可以位寻址(可以位寻址(Bit Addressab

4、le)的内部)的内部存储器存储器vxdata 以以 MOVX DPTR 存取的外部数据存储存取的外部数据存储器器vpdata 以以 MOVX Rn 存取的外部数据存储器存取的外部数据存储器ABSACC.H 提供的宏(提供的宏(Macro)定义)定义 v#define CBYTE (unsigned char volatile code *) 0)v#define DBYTE (unsigned char volatile data *) 0)v#define PBYTE (unsigned char volatile pdata *) 0)v#define XBYTE (unsigned ch

5、ar volatile xdata *) 0)v#define CWORD (unsigned int volatile code *) 0)v#define DWORD (unsigned int volatile data *) 0)v#define PWORD (unsigned int volatile pdata *) 0)v#define XWORD (unsigned int volatile xdata *) 0)SJA1000使用使用8位地址位地址 #ifndef _SJA1000REG_H_#define _SJA1000REG_H_#define PBYTE (unsig

6、ned char volatile pdata *) 0)#defineMOD PBYTE0 x00/模式寄存器#define CMR PBYTE0 x01/命令寄存器#defineCDR PBYTE0 x1f /时钟分频寄存器#endifSJA1000使用使用16位地址位地址 #ifndef _SJA1000REG_H_#define _SJA1000REG_H_#define XBYTE (unsigned char volatile xdata *) 0)#define MOD XBYTE0 x?00 /模式寄存器#define CMR XBYTE0 x?01 /命令寄存器#define

7、 CDR XBYTE0 x?1f /时钟分频寄存器#endif独立独立CAN控制器的初始化控制器的初始化 vSJA1000的初始化必须在复位状态下进行,初始的初始化必须在复位状态下进行,初始化的主要工作有:化的主要工作有:再次设置进入复位状态(模式寄存器再次设置进入复位状态(模式寄存器MOD设置)设置)CAN模式的选择(时钟分频寄存器模式的选择(时钟分频寄存器CDR的设置)的设置)输出方式的选择(输出控制寄存器输出方式的选择(输出控制寄存器OCR的设置)的设置)波特率的设置(总线定时器波特率的设置(总线定时器BTR0和和BTR1的设置)的设置)验收代码寄存器(验收代码寄存器(ACR)设置和验收

8、屏蔽寄存器)设置和验收屏蔽寄存器(ARM)设置)设置清零错误寄存器清零错误寄存器中断使能寄存器(中断使能寄存器(IER)设置)设置进入工作模式进入工作模式SJA1000初始化程序初始化程序void sja1000_init( )MOD=0 x09; /单方向验收滤波器正常模式, /复位状态CDR=0 xc8; /时钟分频寄存器PeliCAN模 /式,弃用RX1和TX1,关闭时钟输出OCR=0 x1a; /输出控制寄存器BTR0=0 x?; /总线定时寄存器0 波特率BTR1=0 x?; /总线定时寄存器1ACR0=0 x?; /验收代码寄存器0ACR1=0 x?; /验收代码寄存器1ACR2=

9、0 x?; /验收代码寄存器2ACR3=0 x?; /验收代码寄存器3SJA1000初始化程序初始化程序AMR0=0 x?; /验收屏蔽寄存器0AMR1=0 x?; /验收屏蔽寄存器1AMR2=0 x?; /验收屏蔽寄存器2AMR3=0 x?; /验收屏蔽寄存器3ECC=0 x00;/清0错误代码捕捉寄存器RXERR=0 x00;/清0接收错误计数器TXERR=0 x00;/请0发送错误计数器IER=0 x01:/接收中断使能MOD=0 x80;/单方向验收滤波器正常模式,/进入工作状态SJA1000发送程序发送程序 v非中断发送的过程为:非中断发送的过程为:检测发送缓冲器状态检测发送缓冲器状

10、态把要发送的数据写入发送缓冲区把要发送的数据写入发送缓冲区判断是否处于接收状态判断是否处于接收状态判断上一个报文是否发送完毕,请求发送。判断上一个报文是否发送完毕,请求发送。SJA1000非中断发送程序(带参数)非中断发送程序(带参数) void send(sbit rtr, unsigned int ide, unsigned char len, unsigned char data8)/rtr:RTR位,位,ide:识别码:识别码 /len:数据长度,:数据长度,data8:存放数据的数组:存放数据的数组unsigned char i;unsigned char *p;while(SR&0 x04)=0 x00); /等待发送缓冲区为空等待发送缓冲区为空p=&ide;ide=ide3;/识别码在发送缓冲区左对齐识别码在发送缓冲区左对齐TXEFF4=*p;P+;TXEFF3=*p;P+;TXEFF2=*p;P+;TXEFF1=*p;P+;SJA1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论