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

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-4060839.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总线收发器,

2、该器件应用 VCC2供电。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微控制器数据手册BoschC_CAN UsersMa nual在下井仪中建议采用

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

4、骤为:1.用SFRPAGE寄存器选择相应的 SFR页号。2.用直接寻址方式读、写特殊功能寄存器。(与以前的用法相同)。使用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 数据字高字节CA

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

6、CN、CAN0STA、CAN0TST也有索引地址,也可以通过地址索引方式 访问。2.2.3 CAN控制器寄存器组成CAN控制器寄存器可分为以下几类:223.1 CAN控制器协议相关寄存器1CAN控制寄存器(索引地址二0x00)resresresresresresresresTestCCEDARCANIFEIESIEIEInitrrrrrrrrrwrw rw r rw rw rw rwTest= 1测试模式 Test= 0正常工作模式 一般将Test位置0CCE= 1时可以控制更改位定时寄存器 一般将CCE位置0DAR 禁止自动重发功能 使用中将该位置1CANIF CAN中断标志EIE 错误中断

7、使能SIE 状态中断使能IE CAN中断使能Init 初始化时将该位置1,正常工作时将该位置02CAN状态寄存器(索引地址二0x01 )resresresresresresresResBOffEWarnEPassRxOKTxOKLECrrrrrrrR r r r rw rw rw该寄存器反映CAN控制器的状态。BOff 处于离线状态(二1)EWarn警告状态(二1说明错误计数器中至少有一个达到错误警告的极限值)EPass 处于被动错误状态RxOK 自上次这位被清0后,又成功地收到一条消息TxOK 自上次这位被清0后,又成功地发送一条消息LEC CAN总线上最后一次错误的类型3CAN错误计数器(

8、索引地址二0x02 )RPREC6 0TEC7 0r R rRP 接收被动错误达到CAN协议规定的被动错误水平(二1)REC6 -0 接收错误计数器,记录接收错误的次数TEC7 -0 发送错误计数器,记录发送错误的次数4CAN位定时寄存器(索引地址二0x03)resTseg2Tseg1SJWBRPrrwrwrwrw该寄存器的设置与CAN总线通讯的波特率有关,各下井仪需统一设定,各 位含义可参看CAN控制器用户手册。5CAN测试寄存器(索引地址二0x04)resresresresresresresResRxTx1Tx0LbackSile ntBasicresresrrrrrrrRrrwrw rw

9、 rw rw r r 该寄存器只有在CAN控制寄存器中的Test位二1时才有效,用于测试CAN 总线的通讯功能,在正常工作时不使用。6CAN位定时扩展寄存器(索引地址二0x06)resresresresresresresresresresresresBRPErrrrrrrrrr rr rw该寄存器的设置与CAN总线通讯的波特率有关,各下井仪需统一设定,各 位含义可参看CAN控制器用户手册。223.2消息对象接口寄存器CAN控制器中有一块消息RAM,可以存储32条消息对象,每条消息对象 中包含8字节有用数据及其它协议相关控制信息。CPU访问消息RAM中任何一 条消息对象都必须通过消息对象接口寄存

10、器完成。CAN控制器中共有两套消息对象接口寄存器 IF1和IF2。IF1和IF2除了在 测试模式下的用法有所不同外,在正常工作时用法相同。可以将一套用于将数据 写入消息RAM,另一套用于从消息RAM中读取数据。在此,只介绍IF1寄存器组的用法。1IF1命令请求寄存器(索引地址二0x08 )1F1 C ommand Request Repiter 15 14 13 12 II 10 9 S 1 6 5 4 3 2 1 0 .xl l & 17x10)Busy1U51T5ITSres1X5reiIC5rc?resIF 2 Coninimd Reqiwti Reeivie:Nfre?res躬resi

11、e1VSre?Xumb*i0.-1 kfaddi申殆 A. 0x12)resAibC onrroClrljn 护 ndTxKqM NwD;iDam AData BIt- 2(- onmiAndOxJj & Ox 12 re年RRP31祜kAibc Qinhulc iFlmrPndI啟q师VwDfttData 4Data Rirjrrrrr nv rw m rw n、 rw iw rwWR/RD 读/写1 写:数据从IF1送到消息RAM中 0读:数据从消息送到IF1Mask 存取Mask位1 传输 Identifier Mask + Mdir + MXtd 位0屏蔽位不变化Arb 存取仲裁位1

12、传输 Identifier Mask + Dir + Xtd + Msgval 位0仲裁位不变化Control存取控制位1 传输控制位到消息 RAM中0控制位不变化ClrIntPnd清除中断请求位读操作时 1 清除消息RAM中的IntPnd位0 不改变IntPnd位在写操作时,此位被忽略TxRqst/NewDat存取传输请求位读操作时1 清除消息对象中的 NewDat位0 不改变 NewDat位写操作时1 将传输请求位置10不改变传输请求位Data A 存取数据字节 0 31传输数据字节0 30 不改变数据字节0 3Data B 存取数据字节4 71传输数据字节4 70 不改变数据字节473I

13、F1掩码1 (索引地址=0x0a)、IF1掩码2 (索引地址=0x0b)Msk28 Msk01相应的位使用接受过滤0消息对象的ID号中对应位不用于接受过滤MXtd1在接受过滤中使用扩展ID号0不使用扩展ID号Fl Mask 1 Register15141312 11 10 9B 765432 IQMskl5 0LF1 XLisk 2 Rjduslei (addresses OxL OxreshkZS-1fiIF? Rpiter(address 旳暫 & 5卜)MSK154疋Mask 2 RegisterMXrdMDllre?MsklB 160x17 & OxlCrwriw iw m nv iw

14、 tw nv i诵 iw mMDir1消息方向位Dir用于接受过滤中0消息方向位Dir在接受过滤中不使用4IF1仲裁1 (索引地址二OxOc )、IF1仲裁2 (索引地址二OxOd )IF1 Arbitration 1faddre歸咋Cm旧矗 侧1引15 14 13 12 11 10 G 16 5 4 3 2 1 0ID5-0111 Arbitration 2 Regiiter (Mdit?沙已、OkJB & OxIA)MsValXri54Lt 2 Aibitraiion 2 Register (rtdilioso 0x4B & 0x4A)Ms 寶alXtdDi1D2S 16rw rar rw

15、 itv rw rw rw nv rw nv nv rw nv rw rw rWID28 ID0 消息对象的ID号 标准帧只使用ID28 ID18MsgVal1该消息对象已经配置,消息处理器纳入处理0消息处理器不考虑该消息对象Xtd1使用29位ID号(扩展帧)0使用11位ID号(标准帧) 下井仪器中一律采用标准帧Dir1消息对象方向为发送,消息对象作为数据帧传送0消息对象方向为接收,收到匹配ID号的数据帧时,存储在该消息 对象中4 IF1消息控制(索引地址二0x0e)旺 L Message ControlRegiUer (addiesses OxlD & 0x101jL41J12LL 109

16、87654J 2 0NDnrlEgr.-rIntPndIM缶TxIF RtTFRwFnT TR q-TFflBWTIMT)T c? aH2 Control ResterlutludlAUik1x11 HxILItintLnJxRqtLaBl*$ie$DLC3-0讥山OxJD & Ox 1C)rurwrw twrwrrrrwNewDat 1消息处理器或CPU向消息对象中写入了新的数据MsgLst 1 CPU丢失了消息In tP nd 1该消息对象是中断源UMask 1 使用屏蔽(Msk28 Msk0,MXtd,Mdir)作为接受过滤io 9 a:.心忖 卞井TxIE 1成功地发送一条消息TsRq

17、st2-17TRXIE湎甲。成功地接收一条消息12 11 RmtEn竽i远程帧使能袴Eob 1单个的消息对象或一个FIFO缓存的最后一个消息对象DLC3-0 数据长度0 85IF1 数据 A1、A2、B1、B28字节有效数据223.3消息处理器寄存器这些只读寄存器用于向CPU提供有关消息对象的信息消息RAM中可以存储32条消息对象,每个消息对象都包含了 2.2.3.2中说明的可与IF1交互的信息位。消息处理器寄存器的所有信息都是 32位,每位分别对应一条消息对象。1发送请求1、发送请求2TtBiiswisiqn Request 1 Rfguter &XL l & OxSO)15 14 13 1

18、2 It 10 9 S 7 6 5 4 3 2 1 0TxRqstl# 9riRqslfl 1TraiKiiiis-iiofi Reqtiebt 2 sterTxRqst2-kl71说明该消息对象被请求发送,还没有完成发送2新数据1、新数据2New Dhca 1 Reeibin15 14 B 12 11 10 S7 6 5 4 3 2 10XenDatLC-?euDatS-iNe1 D(a 2 RtgisieioiD;i?2 25D;i24-170s02)rr1说明该消息对象中写入了新数据CPU可以通过读取该位,检查哪个消息对象的数据部分被更新了3中断标志1、中断标志2titerrupl Pe

19、uJiiLir 1(cclosses DxAl Jr UxAO t15 14 B 12 11 L0 9 S 7 6 5 身 3 2 1 0InrPlll6 9rntPndS JLntemipt Psuduig 2 Register (atklress OxAW & flxA2)IntPudJZ-Z?lntPnd24-17r r1指明该消息对象是一个中断源4消息有效1消息有效2伽谄獣 Vfilid 1 RegistPi- 但山血注肌OxBl Ar OxBO)15 14 13 12 ll 10 9 86 5 4 3 2 1 0Valid RiislfrIr1 该消息已经配置好,消息处理器予以考虑3

20、、软件编程示例软件编程需要实现三个功能:1初始化(设定位定时寄存器及消息对象)2发送消息3读取接收的消息3.1初始化位定时寄存器示例movsfrpage,#1 ;将 Sfrpage指向 can0page页movcan0cn,#41h ;init位=1 CCE= 1允许写位定时寄存器movcan0 adr,#3 ;地址寄存器指向位定时寄存器movcan 0dath,#18h;先写咼字节movcan0 datl,#40h;位定时寄存器设为0x18403.2初始化接收消息对象示例初始化对象的作用是设置消息对象需要实现的功能, 即设置CAN控制器内部的消息RAM中某个消息对象的各个位域值。1设定该对象

21、用于发送还是接收;2设定该对象接收或发送的ID号,如用于接收还需要设定是否使用接受 过滤功能;初始化对象通过IF1或IF2寄存器组完成设置,首先确定要设置的消息对 象的性质。在此,假设初始化消息RAM(共20个消息对象)中的第一个对象,作用是 只接受ID二11的数据。假设我们用IF1寄存器组设置消息对象。首先确定消息对象的各个位域的值:ID = 11转换为2进制数为1011b以下根据要求确定IF1各个寄存器的值:1IF1 Mask1 (掩码)的值为OOOOh (因为我们约定使用11位ID的标准帧,所以有用的ID位仅为ID28ID18,Mask15- 0为未用位,设为0)2IF1 Mask2的值

22、为仆FCh (含义:MXt4 0表示在接受过滤中不使用扩 展ID号,MDir = 0表示在接受过滤中不考虑数据传输方向, 后面为11位1表示 只接受与ID = IF1Arb中设定ID号的数据帧,最后两位对应与ID17、ID16因未 使用设为0)3IF1 Arb1 (仲裁)的值为0000h (理由同)4IF1 Arb2的值为802Ch (含义:MsgVal= 1表示设置该消息RAMt效, 如该位=0,相当与该消息RAM在使用中;Dir = 0表示设定为接受消息;后面 为ID号X 4的二进制数,因为最低两位为ID17、ID16)5IF1消息控制值为1088h (含义:UMasA 1表示设置消息过滤

23、功能;Eob 二1表示该消息对象不属于一个 FIFO; DLC3-0=8表示发送8字节数据,不影响 接收过程,接收完成后,自动填充接收到的有效字节数)。6IF1命令掩码寄存器值为00F0h (含义:WA 1表示从IF1向消息RAM 写;Mask= 1表示传输ID Mask + Mdir + MXtd到消息对象中;Arb = 1表示传输 ID + Dir + Xtd + Msgval到消息对象中;Control = 1表示传输控制位到消息对象 中)7IF1命令请求寄存器值为0001h(含义传送IF1寄存器组内容到第一个报 文对象中;这个寄存器必须在设置完IF1的其它寄存器后再写,因为一旦向这个

24、寄存器中写入值后,IF1寄存器组与消息RAM就开始交换数据了。以下是程序代码:mov sfrpage,#1mov can0 adr,#9mov can 0dath,#00h ; 这句可以省略mov can0datl,0f0h ; 执行完后 can0adr 自动加 1mov can0 dath,#0mov can0 datl,#0mov can0 dath,ifxmask2hmov can0 datl,ifxmask2lmov can0 dath,#0mov can0 datl,#0mov can0 dath,1fhmov can0 datl,fchmov can0 dath,00hmov ca

25、n 0datl,00hmov can0 dath,#80hmov can0 datl,#2chmov can0 dath,#10hmov can0 datl,#08hmov can0 adr,#8 mov can 0dath,#00h ; 这句可以省略mov can0 datl,#01h3.3读取消息示例在此,假设上述设置中,消息 RAM中的第一个对象中收到了新的数据,可通过以下程序读取。在此,我们只通过IF2寄存器组读取数据,而不考虑其它位的读取。将读取 的8字节数据放在30h37h单元中,有效字节个数放在 38h单元中。movsfrpage,#1movcan 0adr,#21hmovcan

26、 0dath,#00h;这句可省略movcan 0datl,#1fhmovcan 0adr,#20hmovcan 0dath,#00h;这句可省略movcan 0datl,# 01hhere:mov a,ca nO dathjb acc.7,here ;等待传送完成mov canO adr,#26hmov a,ca nO datlanl a,#Ofhmov 30h,ca nO dathmov 31h,ca nOdatlmov 32h,ca nO dathmov 33h,ca nO datlmov 34h,ca nO dathmov 35h,ca nO datlmov 36h,ca nO dat

27、hmov 37h,ca nO datl3.4初始化发送消息对象示例在此,假设初始化消息RAM(共20个消息对象)中的第一个对象,作用是 发送ID二11的数据。假设我们需要发送8字节数据,用IF1寄存器组设置消息 对象。首先确定消息对象的各个位域的值:ID = 11转换为2进制数为1011b以下根据要求确定IF1各个寄存器的值:1IF1 Mask1 (掩码)的值对于发送无作用,可以不设置2IF1 Mask2的值对于发送无作用,可以不设置3IF1 Arb1 (仲裁)的值为OOOOh (理由同)4IF1 Arb2的值为A02Ch (含义:MsgVal= 1表示设置该消息RAMt效, 如该位=0,相当与该消息RAM在使用中;Dir = 1表示设定为发送消息;后面 为ID号X 4的二进制数,因为最低两位为ID17、ID16)5IF1消息控制值为0088h (含义:Eob = 1表示该消息对象不属于一个 FIFO; DLC3-0=8表示发送8字节数据,如果发送小于8字节数据,

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

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