ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:82.65KB ,
资源ID:13264129      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-13264129.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(CAN总线的使用.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

CAN总线的使用.docx

1、CAN总线的使用CAN总线的使用1、硬件连接方式硬件电路如下图所示:图中,D1(IL712)是磁隔离器件,其作用为了使各下井仪之间实现电气隔离。各下井仪需要为D1提供两组5V电源,图中标为VCC1和VCC2。其中,VCC1为仪器内部数字电源,提供给单片机C8051F041和其它数字电路;VCC2是隔离电源,用于给IL712和TJA1050供电,电源电流应大于75mA。C1、C2为两组电源的滤波电容。D1的2脚与C8051F041(图中未画)的7脚(CANTX)直接连接,D1的3脚与C8051F041的6脚(CANRX)直接连接。D2(TJA1050)为CAN总线收发器,该器件应用VCC2供电。

2、C3为该器件的滤波电容。D2的输出CANH(6脚)、CANL(7脚)直接连接到下井仪的总线上。R1、R2、C4为CAN总线终端匹配电阻的接法,这三个器件只需要在处在下井仪串上下两端的仪器中需要。即:在某仪器中,如果CAN总线是贯通线,则不能连接这三个器件,反之,如果在该仪器中,如果CAN总线不是贯通线,则需要连接这三个器件。输出的CANH和CANL应双绞。2、软件使用方法编程者应该熟悉以下两本资料:C8051F040/1/2/3/4/5/6/7混合信号ISP FLASH微控制器数据手册Boschs C_CAN Users Manual在下井仪中建议采用C8051F041或C8051F040单片

3、机,该单片机内部集成了Bosch CAN控制器。以下简要介绍C8051F04x单片机和Bosch CAN控制器及其软件编程方法。2.1 C8041F04x单片机SFR的分页机制C8051F04x系列MCU对CIP51内核和外设有几项关键性的改进,提高了整体性能。其中与编程密切相关的一点是使用了SFR(特殊功能寄存器)分页机制,允许器件将很多SFR映射到0X800XFF这个存储器空间。C8051F04x器件使用了5个SFR页:0、1、2、3和F。使用特殊功能寄存器页选择寄存器SFRPAGE来选择SFR页。因此,读、写一个SFR的步骤为:1. 用SFRPAGE寄存器选择相应的SFR页号。2. 用直

4、接寻址方式读、写特殊功能寄存器。(与以前的用法相同)。使用CAN控制器时,需要将SFRPAGE设置为1(用指令mov sfrpage,#1)。编程中用到的其它特殊功能寄存器可参看数据手册说明。2.2 C8041F04x单片机中CAN相关特殊功能寄存器参看数据手册第201203页。2.2.1 CAN控制器寄存器的访问方式可以直接通过访问一般SFR方式访问的寄存器共有6个:CAN0CN CAN控制寄存器CAN0STA CAN状态寄存器CAN0TST CAN测试寄存器CAN0ADR 寄存器索引地址CAN0DATH 数据字高字节CAN0DATL 数据字低字节其它CAN控制器寄存器只能通过CAN0ADR

5、、CAN0DATH、CAN0DATL访问。访问方式:先向CAN0ADR中写入待访问CAN控制器寄存器的索引号,然后通过CAN0DATH写入或读出高字节,通过CAN0DATL写入或读出低字节。例如:0X5号寄存器其中写入0X1234h,可采用以下三条指令: mov can0adr,#0x5 mov can0dath,#12h mov can0datl,#34h对于某些索引地址,在向can0datl进行写入或读出操作后,can0adr有自动加1功能,因此必须向操作can0dath,再操作can0datl。CAN0CN、CAN0STA、CAN0TST也有索引地址,也可以通过地址索引方式访问。2.2.

6、3 CAN控制器寄存器组成CAN控制器寄存器可分为以下几类:2.2.3.1 CAN控制器协议相关寄存器1 CAN控制寄存器(索引地址0x00)resresresresresresresresTestCCEDARCANIFEIESIEIEInitrrrrrrrrrwrwrwrrwrwrwrwTest1 测试模式 Test0 正常工作模式 一般将Test位置0CCE1时可以控制更改位定时寄存器 一般将CCE位置0DAR 禁止自动重发功能 使用中将该位置1CANIF CAN中断标志EIE 错误中断使能SIE 状态中断使能IE CAN中断使能Init 初始化时将该位置1,正常工作时将该位置02 CAN

7、状态寄存器(索引地址0x01)resresresresresresresResBOffEWarnEPassRxOKTxOKLECrrrrrrrRrrrrwrwrw该寄存器反映CAN控制器的状态。BOff 处于离线状态(1)EWarn 警告状态(1说明错误计数器中至少有一个达到错误警告的极限值)EPass 处于被动错误状态RxOK 自上次这位被清0后,又成功地收到一条消息TxOK 自上次这位被清0后,又成功地发送一条消息LEC CAN总线上最后一次错误的类型3 CAN错误计数器(索引地址0x02)RPREC60TEC70rRrRP 接收被动错误达到CAN协议规定的被动错误水平(1)REC60 接

8、收错误计数器,记录接收错误的次数TEC70 发送错误计数器,记录发送错误的次数4 CAN位定时寄存器(索引地址0x03)resTseg2Tseg1SJWBRPrrwrwrwrw该寄存器的设置与CAN总线通讯的波特率有关,各下井仪需统一设定,各位含义可参看CAN控制器用户手册。5 CAN测试寄存器(索引地址0x04)resresresresresresresResRxTx1Tx0LbackSilentBasicresresrrrrrrrRrrwrwrwrwrwrr该寄存器只有在CAN控制寄存器中的Test位1时才有效,用于测试CAN总线的通讯功能,在正常工作时不使用。6 CAN位定时扩展寄存器(

9、索引地址0x06)resresresresresresresresresresresresBRPErrrrrrrrrrrrrw该寄存器的设置与CAN总线通讯的波特率有关,各下井仪需统一设定,各位含义可参看CAN控制器用户手册。2.2.3.2 消息对象接口寄存器CAN控制器中有一块消息RAM,可以存储32条消息对象,每条消息对象中包含8字节有用数据及其它协议相关控制信息。CPU访问消息RAM中任何一条消息对象都必须通过消息对象接口寄存器完成。CAN控制器中共有两套消息对象接口寄存器IF1和IF2。IF1和IF2除了在测试模式下的用法有所不同外,在正常工作时用法相同。可以将一套用于将数据写入消息R

10、AM,另一套用于从消息RAM中读取数据。在此,只介绍IF1寄存器组的用法。1 IF1命令请求寄存器(索引地址0x08)Message Number为消息对象的编号,有效值为0x010x20,分别对应32个消息对象,用于设定要访问的消息对象的编号。CPU向命令请求寄存器中写入消息编号后,消息就在IF1寄存器组与消息RAM之间开始传送。随着写操作,Busy位自动置1,传送过程完成后,Busy自动清0。因此,必须在完成IF1寄存器组中其它寄存器的设置后,再向IF1命令请求寄存器写入消息编号。2 IF1命令掩码寄存器(索引地址0x09)IF1命令掩码寄存器中的控制位指定传输方向,并选择消息对象的哪些位

11、作为数据传输的目的或源。WR/RD 读/写 1 写:数据从IF1送到消息RAM中 0 读:数据从消息送到IF1Mask 存取Mask位 1 传输Identifier MaskMdirMXtd位 0 屏蔽位不变化Arb 存取仲裁位 1 传输Identifier MaskDirXtdMsgval位0 仲裁位不变化Control 存取控制位 1 传输控制位到消息RAM中0 控制位不变化ClrIntPnd 清除中断请求位 读操作时 1 清除消息RAM中的IntPnd位 0 不改变IntPnd位 在写操作时,此位被忽略TxRqst/NewDat 存取传输请求位 读操作时 1 清除消息对象中的NewDat

12、位0 不改变NewDat位 写操作时 1 将传输请求位置10 不改变传输请求位Data A 存取数据字节031 传输数据字节03 0 不改变数据字节03Data B 存取数据字节471 传输数据字节47 0 不改变数据字节473 IF1掩码1(索引地址0x0a)、IF1掩码2(索引地址0x0b)Msk28Msk0 1 相应的位使用接受过滤0 消息对象的ID号中对应位不用于接受过滤MXtd 1 在接受过滤中使用扩展ID号 0 不使用扩展ID号MDir 1 消息方向位Dir用于接受过滤中 0 消息方向位Dir在接受过滤中不使用4 IF1仲裁1(索引地址0x0c)、IF1仲裁2(索引地址0x0d)I

13、D28ID0 消息对象的ID号 标准帧只使用ID28ID18MsgVal 1 该消息对象已经配置,消息处理器纳入处理 0 消息处理器不考虑该消息对象Xtd 1 使用29位ID号(扩展帧) 0 使用11位ID号(标准帧) 下井仪器中一律采用标准帧Dir 1 消息对象方向为发送,消息对象作为数据帧传送 0 消息对象方向为接收,收到匹配ID号的数据帧时,存储在该消息对象中4 IF1消息控制(索引地址0x0e)NewDat 1 消息处理器或CPU向消息对象中写入了新的数据MsgLst 1 CPU丢失了消息IntPnd 1 该消息对象是中断源UMask 1 使用屏蔽(Msk28Msk0,MXtd,Mdi

14、r)作为接受过滤TxIE 1 成功地发送一条消息RxIE 1 成功地接收一条消息RmtEn 1 远程帧使能 下井仪中不使用远程帧TxRqst 1 该消息对象请求发送,尚未完成Eob 1 单个的消息对象或一个FIFO缓存的最后一个消息对象DLC3-0 数据长度 085 IF1数据A1、A2、B1、B2 8字节有效数据2.2.3.3 消息处理器寄存器这些只读寄存器用于向CPU提供有关消息对象的信息消息RAM中可以存储32条消息对象,每个消息对象都包含了2.2.3.2中说明的可与IF1交互的信息位。消息处理器寄存器的所有信息都是32位,每位分别对应一条消息对象。1 发送请求1、发送请求21 说明该消

15、息对象被请求发送,还没有完成发送2 新数据1、新数据21 说明该消息对象中写入了新数据CPU可以通过读取该位,检查哪个消息对象的数据部分被更新了。3 中断标志1、中断标志21 指明该消息对象是一个中断源4 消息有效1、消息有效21 该消息已经配置好,消息处理器予以考虑3、软件编程示例软件编程需要实现三个功能:1 初始化(设定位定时寄存器及消息对象)2 发送消息3 读取接收的消息3.1 初始化位定时寄存器示例 mov sfrpage,#1 ; 将Sfrpage指向can0page页 mov can0cn,#41h ; init位1 CCE1 允许写位定时寄存器 mov can0adr,#3 ;

16、地址寄存器指向位定时寄存器 mov can0dath,#18h ; 先写高字节 mov can0datl,#40h ; 位定时寄存器设为0x18403.2 初始化接收消息对象示例初始化对象的作用是设置消息对象需要实现的功能,即设置CAN控制器内部的消息RAM中某个消息对象的各个位域值。 设定该对象用于发送还是接收; 设定该对象接收或发送的ID号,如用于接收还需要设定是否使用接受过滤功能;初始化对象通过IF1或IF2寄存器组完成设置,首先确定要设置的消息对象的性质。在此,假设初始化消息RAM(共20个消息对象)中的第一个对象,作用是只接受ID11的数据。假设我们用IF1寄存器组设置消息对象。首先

17、确定消息对象的各个位域的值:ID11 转换为2进制数为1011b以下根据要求确定IF1各个寄存器的值:IF1 Mask1(掩码)的值为 0000h (因为我们约定使用11位ID的标准帧,所以有用的ID位仅为ID28ID18,Mask150为未用位,设为0)IF1 Mask2 的值为 1FFCh (含义:MXtd0 表示在接受过滤中不使用扩展ID号,MDir0 表示在接受过滤中不考虑数据传输方向,后面为11位1表示只接受与IDIF1Arb中设定ID号的数据帧,最后两位对应与ID17、ID16因未使用设为0)IF1 Arb1(仲裁)的值为0000h(理由同)IF1 Arb2的值为 802Ch (含

18、义:MsgVal1表示设置该消息RAM有效,如该位0,相当与该消息RAM不在使用中;Dir0表示设定为接受消息;后面为ID号4的二进制数,因为最低两位为ID17、ID16)IF1消息控制值为 1088h (含义:UMask1表示设置消息过滤功能;Eob1表示该消息对象不属于一个FIFO;DLC3-0=8表示发送8字节数据,不影响接收过程,接收完成后,自动填充接收到的有效字节数)。 IF1命令掩码寄存器值为00F0h (含义:WR1表示从IF1向消息RAM写;Mask1表示传输ID MaskMdirMXtd到消息对象中;Arb1表示传输IDDirXtdMsgval到消息对象中;Control1表

19、示传输控制位到消息对象中)IF1命令请求寄存器值为0001h(含义传送IF1寄存器组内容到第一个报文对象中;这个寄存器必须在设置完IF1的其它寄存器后再写,因为一旦向这个寄存器中写入值后,IF1寄存器组与消息RAM就开始交换数据了。以下是程序代码: mov sfrpage,#1 mov can0adr,#9 mov can0dath,#00h ; 这句可以省略 mov can0datl,0f0h ; 执行完后can0adr自动加1 mov can0dath,#0 mov can0datl,#0 mov can0dath,ifxmask2h mov can0datl,ifxmask2l mov

20、can0dath,#0 mov can0datl,#0 mov can0dath,1fh mov can0datl,fch mov can0dath,00h mov can0datl,00h mov can0dath,#80h mov can0datl,#2ch mov can0dath,#10h mov can0datl,#08h mov can0adr,#8 mov can0dath,#00h ; 这句可以省略 mov can0datl,#01h3.3 读取消息示例在此,假设上述设置中,消息RAM中的第一个对象中收到了新的数据,可通过以下程序读取。 在此,我们只通过IF2寄存器组读取数据,

21、而不考虑其它位的读取。将读取的8字节数据放在30h37h单元中,有效字节个数放在38h单元中。mov sfrpage,#1mov can0adr,#21hmov can0dath,#00h ; 这句可省略mov can0datl,#1fhmov can0adr,#20hmov can0dath,#00h ; 这句可省略mov can0datl,# 01hhere:mov a,can0dathjb acc.7,here ; 等待传送完成mov can0adr,#26hmov a,can0datlanl a,#0fhmov 30h,can0dathmov 31h,can0datlmov 32h,c

22、an0dathmov 33h,can0datlmov 34h,can0dathmov 35h,can0datlmov 36h,can0dathmov 37h,can0datl3.4 初始化发送消息对象示例在此,假设初始化消息RAM(共20个消息对象)中的第一个对象,作用是发送ID11的数据。假设我们需要发送8字节数据,用IF1寄存器组设置消息对象。首先确定消息对象的各个位域的值:ID11 转换为2进制数为1011b以下根据要求确定IF1各个寄存器的值:IF1 Mask1(掩码)的值对于发送无作用,可以不设置IF1 Mask2的值对于发送无作用,可以不设置IF1 Arb1(仲裁)的值为0000h

23、(理由同)IF1 Arb2的值为 A02Ch (含义:MsgVal1表示设置该消息RAM有效,如该位0,相当与该消息RAM不在使用中;Dir1表示设定为发送消息;后面为ID号4的二进制数,因为最低两位为ID17、ID16)IF1消息控制值为 0088h (含义: Eob1表示该消息对象不属于一个FIFO;DLC3-0=8表示发送8字节数据,如果发送小于8字节数据,则该为相应值)。 IF1命令掩码寄存器值为00b0h (含义:WR1表示从IF1向消息RAM写; Arb1表示传输IDDirXtdMsgval到消息对象中;Control1表示传输控制位到消息对象中)IF1命令请求寄存器值为0001h

24、(含义传送IF1寄存器组内容到第一个报文对象中;这个寄存器必须在设置完IF1的其它寄存器后再写,因为一旦向这个寄存器中写入值后,IF1寄存器组与消息RAM就开始交换数据了。以下是程序代码: mov sfrpage,#1 mov can0adr,#9 mov can0dath,#00h ; 这句可以省略 mov can0datl,0b0h ; 执行完后can0adr自动加1 mov can0adr,#0ch mov can0dath,#0 mov can0datl,#0 mov can0dath,0a0h mov can0datl,2ch mov can0dath,00h mov can0dat

25、l,88h mov can0adr,#8 mov can0dath,#00h ; 这句可以省略 mov can0datl,#01h3.5 发送消息示例在此,假设上述设置中,用消息RAM中的第一个对象发送数据。 在此,我们通过IF1寄存器组发送数据。将读取的8字节数据放在30h37h单元中,有效字节个数放在38h单元中。 mov sfrpage,#1 mov can0adr,#09h mov can0datl,#97h mov can0adr,#0eh mov can0dath,#01h mov a,38h orl a,#80h mov can0datl,a mov can0dath,30h mov can0datl,31h mov can0dath,32h mov can0datl,33h mov can0dath,34h mov can0datl,35h mov can0dath,36h mov can0datl,37hmov can0adr,#08hmov can0dath,#00h ; 这句可省略mov can0datl,# 01h执行完后,CAN控制器便开始自动发送数据。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2