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

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/7686046.html】到电脑端继续下载(重复下载【60天内】不扣币)。

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

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(飞思卡尔8位单片机MC9S0815程序CAN通信接口程序.doc)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

飞思卡尔8位单片机MC9S0815程序CAN通信接口程序.doc

1、15.4.2 控制寄存器 (1)MSCAN08模式控制寄存器0 (Module Control Register 0,CMCR0) 模式控制寄存器0(CMCR0)定义了MSCAN08模块的同步状态等有关工作方式。 地址:$0500 数据位 D7 D6 D5 D4 D3 D2 D1 D0 读 0 0 0 SYNCH TLNKEN SLPAK SLPRQ SFTRES 写 - - - - TLNKEN - SLPRQ

2、 SFTRES 复位 0 0 0 0 0 0 0 1 SYNCH — Synchronized Status:同步状态。SYNCH =1,MSCAN08与CAN总线同步;SYNCH =0,MSCAN08与CAN总线不同步。 TLNKEN — Timer Enable:时钟使能。TLNKEN =1,MSCAN08时钟信号输出连接到片上时钟输入;TLNKEN =0,MSCAN08不连接到时钟输入。 SLPAK — Sleep Mode Acknowledge:睡眠模式确认。SLPAK标志位指示MSCA

3、N08是否处于睡眠模式,SLPAK =1,表示MSCAN08处于内部睡眠模式;SLPAK =0,不在内部睡眠模式。 SFTRES — Soft Reset:软复位。SFTRES =1,MSCAN08处于软复位状态;SFTRES =0,MCAN08处于正常运行状态。当SFTRES被置为1时,MSCAN08立即进入软复位状态。此时,MSCAN08所有正在进行的收发操作都被中止,且不再与CAN总线保持同步。只有在软复位状态下,才能对寄存器MCR1、BTR0、BTR1、IDAC、IDAR0-IDAR3、IDMR0-IDMR3进行写操作。当该位清0时,MSCAN08将在11个隐性位后与总线保持同步。

4、 (2)MSCAN08模式控制寄存器1 (Module Control Register 1,CMCR1) 模式控制寄存器1定义了MSCAN08模块的时钟源、唤醒模式及工作方式。 地址:$0501 数据位 D7 D6 D5 D4 D3 D2 D1 D0 读 0 0 0 0 0 LOOPB WUPM CLKSRC 写 - - - - - LOOPB WUPM CLKSRC 复位

5、 0 0 0 0 0 0 0 0 LOOPB — Loop Back Self-Test Mode:回环自测模式位。LOOPB =1,激活回环自测模式;LOOPB =0,正常运行模式。当处于回环自测模式时,CANRX引脚被忽略,CANTX引脚输出隐性值,MSCAN08将自己发送的报文当成是从远程节点上发送过来的报文进行接收,并产生发送和接收中断。通过自测模式可以在不接任何外外围器件的基础上,测试MSCAN08工作是否正常。 WUPM — Wakeup Mode:唤醒模式位。该位定义是否启用内部低通滤波以

6、避免被错误唤醒。WUPM=1,只有当总线上显性电平至少保持了twup时间后MSCAN08才被唤醒;WUPM=0,总线上任何隐性变为显性的下降沿,MSCAN08被唤醒。 CLKSRC — Clock Source:时钟源选择位。CLKSRC=1,MSCAN08时钟源采用锁相环输出;CLKSRC=0,MSCAN08时钟源直接采用外部晶振的2分频(CGMXCLK/2)。 注:MCR1只能在软复位状态下才能被写入。 (3)MSCAN08总线定时寄存器0 (Bus Timing Register 0,CBTR0) 总线定时寄存器0和总线定时寄存器1共同决定了CAN总线通信波特率。其中,总线定时寄

7、存器0定义了MSCAN08的同步跳转宽度和预分频因子。 地址:$0502 数据位 D7 D6 D5 D4 D3 D2 D1 D0 读/写 SJW1 SJW0 BRP5 BRP4 BRP3 BRP2 BRP1 BRP0 复位 0 0 0 0 0 0 0 0 SJW1-0 — Synchronization Jump Width:同步跳转宽度。同步跳转宽度定义了一个位周期可以被一次重新同步

8、缩短或延长的时间份额Tq(见下面对BPR5-BPR0的说明)的最大数目,以便在数据发送时与总线同步。SWJ1-0取值与同步跳转宽度对应关系见表15-5。 表15-5 同步跳转宽度 SJW1 SJW2 同步跳转宽度 0 0 0 0 1 0 0 1 1 2 1 0 0 0 3 1 0 1 0 4 表15-6 波特率预置器 BPR5 BPR4 BPR3 BPR2 BPR1 BPR0 预分频因子 0 0 0 0 0 0 1 0 0 0 0 0 1 2 : : : : : : : 1 1 1

9、 1 1 1 64 BPR5-BPR0 — Band Rate Prescaler:波特率预置器。BPR5-BPR决定了用于生成各位(bit)延时的时间份额(Time Quanta---Tq)的大小,其中Tq=fMSCANCLK/预分频因子。BPR5-BPR0与预分频因子的对应关系见表15-6。 注:BTR0只能在软复位状态下才能被写入。 (4)MSCAN08总线定时寄存器1(Bus Timing Register 1,CBTR1) 总线定时寄存器1(BTR1)定义位周期的长度、采样点的位置和每个位时间内采样次数。 地址:$0503 数据位 D7 D6

10、 D5 D4 D3 D2 D1 D0 读/写 SAMP TSEG22 TSEG21 TSEG20 TSEG13 TSEG12 TSEG11 TSEG10 复位 0 0 0 0 0 0 0 0 SAMP — Sampling:采样次数。=1,每位采样3次;=0,每位采样1次。 表15-7 时间段1定义 TSEG13 TSEG12 TSEG11 TSEG10 时间段1 0 0 0 0 1 0 0

11、 0 1 2 0 0 1 0 3 : : : : : 1 1 1 1 16 表15-8 时间段2定义 TSEG22 TSEG21 TSEG20 时间段2 0 0 0 1 0 0 1 2 0 1 0 3 : : : : 1 1 1 8 TSEG22-TSEG20 — Time Segment:时间段。时间段决定了每一位所需的时间份额Tq数目和采样点的位置。时间段由时间段1(TSEG1)和时间段2(TSEG2)组成,定义分别如表15-7和15-8所示。 注:在CAN标准中,时间段1的

12、取值范围为5-16,时间段2的取值范围为2-8,用户设置的位时间必须确保与CAN标准兼容。 CAN通信位周期总体结构如图15-14所示。 同步段 1 (Tq) 时间段1 时间段2 4…16 (Tq) 2…8 (Tq) 采样点(单采样或三次采样) 1位时间=8…25(Tq) NRZ信号 图15-14 CAN通信位周期总体结构图 例如:在MSCAN08时钟频率fMSCAN08=4M,BTR0和BTR1寄存器取如下值时,SJW1-0=00,BPR5-BPR0=000001, SAMP=0,TSEG22-TSEG20=010,TSEG13

13、TSEG10=0101 则:预分频因子PreScale=2,时间份额Tq= fMSCAN08/PreScale = 2M 同步跳转宽度=1(Tq),时间段1=6(Tq),TSEG2=3(Tq) 位时间=1+6+3=10(Tq),通信波特率=2M/10=200(kbps) (5)MSCAN08接收标志寄存器(Receiver Flag Register,CRFLR) 接收标志寄存器反映了MSCAN08接收报文时的有关状态。 地址:$0504 数据位 D7 D6 D5 D4 D3 D2 D1 D0

14、 读/写 WUPIF RWRNIF WRNIF RERRIF TERRIF BOFFIF OVRIF RXF 复位 0 0 0 0 0 0 0 0 WUPIF — Wakeup Interrupt Flag:唤醒中断标志位。当MSCAN08处于睡眠模式时,检测到总线上有数据,将置WUPIF标志位。WUPIF =1,MSCAN08已检测到总线活动并请求唤醒;WUPIF =0,没有产生唤醒中断。 RWRNIF — Receiver Warning Interrupt Flag:接收器警告中断

15、标志位。当接收错误计数器超过96,且其他任何错误中断标志或总线关闭中断标志都未置位时,MSCAN08将进入警告状态时,并置RWRNIF标志位。RWRNIF =1,MSCAN08已进入接收警告状态;RWRNIF =0,未进入接收警告状态。 TWRNIF — Transmitter Warning Interrupt Flag:发送器警告中断标志位。当发送错误计数器超过96,且其他任何错误中断标志或总线关闭中断标志都未置位时,MSCAN08将进入警告状态时,并置TWRNIF标志位。TWRNIF=1,MSCAN08已进入发送警告状态;TWRNIF=0,未进入发送警告状态。 RERRIF — Re

16、ceiver Error Passive Interrupt Flag:接收器错误被动中断标志位。当接收错误计数器超过127,且总线关闭中断标志未置位时,MSCAN08将进入接收器被动错误状态,并置RERRIF标志位。RERRIF =1,MSCAN08已进入接收器被动错误状态;RERRIF =0,未进入接收器被动错误状态。 TERRIF — Receiver Error Passive Interrupt Flag:接收器错误被动中断标志位。当接收错误计数器超过127,且总线关闭中断标志未置位时,MSCAN08将进入接收器被动错误状态,并置TERRIF标志位。TERRIF =1,MSCAN0

17、8已进入接收器被动错误状态;TERRIF =0,未进入接收器被动错误状态。 BOFFIF — Bus-Off Interrupt Flag:总线关闭中断标志位。当发送错误计数器超过255时,MSCAN08将进入总线关闭状态,并置BOFFIF标志位。总线关闭后,至少要等128个11位连续的隐性位后才能清除该标志位。BOFFIF =1,MSCAN08已进入总线关闭状态;BOFFIF =0,未进入总线关闭状态。 OVRIF — Overrun Interrupt Flag:过载中断标志位。当数据过载时,置OVRIF标志位。OVRIF =1,MSCAN08已检测到数据过载;OVRIF =0,未检测

18、到数据过载。 RXF — Receive Buffer Full:接收缓冲区满标志位。当一个新的报文已到达前台接收缓冲区时,置RXF标志位。在CPU将接收缓冲区中的报文读走后应清RXF标志,在RXF被置位时,后台接收缓冲区不能将数据传到前台接收缓冲区。RXF=1,接收缓冲区满;RXF=0,接收缓冲区空。 (6)MSCAN08接收中断使能寄存器(Receiver Interrupt Enable Register,CRIER) 地址:$0505 数据位 D7 D6 D5 D4 D3 D2 D1 D0 读/写 WUP

19、IE RWRNIE TWRNIE RERRIE TERRIE BOFFIE OVRIE RXFIE 复位 0 0 0 0 0 0 0 0 WUPIE — Wakeup Interrupt Enable:唤醒中断使能位。WUPIE =1,允许产生唤醒中断,反之不允许。 RWRNIE — Receiver Warning Interrupt Enable:接收器警告中断使能位。RWRNIE=1,允许产生接收警告中断,反之不允许。 TWRNIE — Transmitter Warning I

20、nterrupt Enable:发送器警告中断使能位。TWRNIE=1,允许产生发送警告中断,反之不允许。 RERRIE — Receiver Error Passive Interrupt Enable:接收器错误被动中断使能位。RERRIE =1,允许产生接收器错误被动中断,反之不允许。 TERRIE — Transmitter Error Passive Interrupt Enable:接收器错误被动中断使能位。TERRIE =1,允许产生发送器被动错误中断,反之不允许。 BOFFIE — Bus-Off Interrupt Enable:总线关闭中断使能位。BOFFIE =1,

21、允许产生总线关闭中断,反之不允许。 OVRIE — Overrun Interrupt Enable:过载中断使能位。OVRIE =1,允许产生过载中断,反之不允许。 RXFIE — Receive Full Interrupt Enable:接收满中断使能位。RXFIE=1,允许产生接收满中断,反之不允许。 (7)MSCAN08发送标志寄存器(Transmitter Flag Register,CTFLR) 地址:$0506 数据位 D7 D6 D5 D4 D3 D2 D1 D0 读 0 ABTAK2

22、 ABTAK1 ABTAK0 0 TXE2 TXE1 TXE0 CLKSRC 写 - - - - - TXE2 TXE1 TXE0 TXE2 TXE1 TXE0 复位 0 0 0 0 0 1 1 1 ABTAK2-ABTAK0 - Abort Acknowledge:中止确认标志。当CPU请求中止发送报文时,应用软件通过读中止确认标志位以确定报文是否被成功中止发送。任何时候发送缓冲区空标志T

23、XEn被清0时,相应的中止确信标志位ABTAKn被隐性地清成0。ABTAKn=1,报文被中止;ABTAKn=0,报文未被中止,也即被发送出去。 TXE2-TXE0 - Transmitter Empty:发送缓冲区空标志。当报文装入发送缓冲区n时,CPU清TXEn为0;当MSCAN08成功将报文发送出去时,置TXEn为1。清TXEn的同时,也将清ABTAKn为0;而置TXEn时,相应的ABTRQn将清0(见MSCAN08发送控制寄存器)。TXEn=1,缓冲区n为空,反之为满(装有待发送的报文)。 (8)MSCAN08发送控制存器(Transmitter Control Register,C

24、TCR) 地址:$0507 数据位 D7 D6 D5 D4 D3 D2 D1 D0 读 0 ABTRQ2 ABTRQ1 ABTRQ0 0 TXEIE2 TXEIE1 TXEIE0 CLKSRC 写 - ABTRQ2 ABTRQ1 ABTRQ0 - TXEIE2 TXEIE1 TXEIE0 复位 0 0 0 0 0 1 1 1 ABTRQ2-ABTRQ0 - Abort

25、 Request:中止请求。CPU通过置ABTRQn为1以中止发送缓冲区n中报文的发送。当报文被中止发送时,相应发送缓冲区空标志和中止确认标志被置成1。CPU不能复位ABTRQ标志,发送缓冲区空标志被置成1时,隐性地将相应中止请求位清成0。ABTRQn=1,有中止请求,反之没有。 注:软件不能在清发送缓冲区空标志的同时又置相应的中止请求位。 TXEIE2-TXEIE0 - Transmitter Empty Interrupt Enable:发送缓冲区空中断使能。TXEIEn=1,缓冲区n空时,将产生缓冲区n空中断,反之不产生中断。 (9)MSCAN08标识符验收控制寄存器(Identi

26、fier Acceptance Control Register,CIDACR) 标识符验收控制寄存器定义了验收模式及验收命中状态指示。 地址:$0508 数据位 D7 D6 D5 D4 D3 D2 D1 D0 读 0 0 IDAM1 IDAM0 0 0 IDHIT1 IDHIT0 CLKSRC 写 - - IDAM1 IDAM0 - - - - TXE2 TXE1 TXE0

27、 复位 0 0 0 0 0 0 0 0 IDAM1-IDAM0 - Identifier Acceptance Mode:标识符验收模式标志。CPU通过设置验收模式标志来定义标识符验收滤波模式。表15-9给出了不同的验收模式的设置。在“关闭滤波器”模式下,将不能接收报文。 IDHIT1-IDHIT0 - Identifier Acceptance Hit Indicator:标识符命中指示器。MSCAN08通过设置这些标志位来指示验收命中的情况。表15-10给出了不同的命中模式指示。 表15-9 标识符

28、验收模式设置 IDAM1 IDAM0 同步跳转宽度 0 0 0 0 单32位验收滤波器 0 0 1 1 双16位验收滤波器 1 0 0 0 4个8位验收滤波器 1 0 1 0 关闭滤波器 表15-10 标识符命中模式指示 IDHIT1 IDHIT0 同步跳转宽度 0 0 0 0 滤波器0命中 0 0 1 1 滤波器1命中 1 0 0 0 滤波器2命中 1 0 1 0 滤波器3命中 (10)MSCAN08接收错误计数器(Receiver Error Counter,CRXERR) 地址:$050

29、E 数据位 D7 D6 D5 D4 D3 D2 D1 D0 读 RXERR7 RXERR6 RXERR5 RXERR4 RXERR3 RXERR2 RXERR1 RXERR0 写 - - - - - - - - 复位 0 0 0 0 0 0 0 0 接收错误计数寄存器反映了MSCAN08接收报文出错的次数。 (11)MSCAN08发送错

30、误计数器(Transmit Error Counter,CTER) 地址:$050F 数据位 D7 D6 D5 D4 D3 D2 D1 D0 读 TXERR7 TXERR6 TXERR5 TXERR4 TXERR3 TXERR2 TXERR1 TXERR0 写 - - - - - - - - 复位 0 0 0 0 0 0 0

31、 0 发送错误计数寄存器反映了MSCAN08发送报文出错的次数。 注:所有计数寄存器只能在睡眠模式或软复位模式下才可读。 (12)MSCAN08标识符验收寄存器(Identifier Acceptance Register,CIDAR) 在验收寄存器的作用下,只有当接收的报文中的标识符与标识符验收寄存器中预定义的位值相等时,CAN控制器才会通知CPU去读取接收的报文;否则,当前报文将会被下一个报文覆盖。对于扩展帧,需占用四个验收寄存器和四个屏蔽寄存器;对于标准帧,则各只占前两个。 CIDAR0地址:$0510 数据位 D7 D6 D5 D

32、4 D3 D2 D1 D0 读/写 AC7 AC6 AC5 AC4 AC3 AC2 AC1 AC0 复位 不 影 响 CIDAR1地址:$0511 数据位 D7 D6 D5 D4 D3 D2 D1 D0 读/写 AC7 AC6 AC5 AC4 AC3 AC2 AC1 AC0 复位 不 影 响

33、CIDAR2地址:$0512 数据位 D7 D6 D5 D4 D3 D2 D1 D0 读/写 AC7 AC6 AC5 AC4 AC3 AC2 AC1 AC0 复位 不 影 响 CIDAR3地址:$0513 数据位 D7 D6 D5 D4 D3 D2 D1 D0 读/写 AC7 AC6 AC5 AC4 AC3

34、 AC2 AC1 AC0 复位 不 影 响 AC7-AC0 - Acceptance Code Bits:验收代码位。接收报文缓冲区中的标识符寄存器中的内容与验收代码中相应位进行比较,比较的结果再与屏蔽寄存器中相应位进行掩码运算。 (13)MSCAN08标识符屏蔽寄存器(Identifier Mask Register,CIDMR0-3) 标识符屏蔽寄存器指定了标识符验收寄存器中哪些位起过滤作用,哪些位不起作用。对于11位标识符的标准帧,必须将屏蔽寄存器1的低3位定义成无关(don’t care)。 CIDMR0地址:$0514 数据

35、位 D7 D6 D5 D4 D3 D2 D1 D0 读/写 AM7 AM6 AM5 AM4 AM3 AM2 AM1 AM0 复位 不 影 响 CIDMR1地址:$0515 数据位 D7 D6 D5 D4 D3 D2 D1 D0 读/写 AM7 AM6 AM5 AM4 AM3 AM2 AM1

36、AM0 复位 不 影 响 CIDMR2地址:$0516 数据位 D7 D6 D5 D4 D3 D2 D1 D0 读/写 AM7 AM6 AM5 AM4 AM3 AM2 AM1 AM0 复位 不 影 响 CIDMR3地址:$0517 数据位 D7 D6 D5 D4 D3 D2 D1 D0 读/写 AM7 A

37、M6 AM5 AM4 AM3 AM2 AM1 AM0 复位 不 影 响 AM7-AM0 - Acceptance Mask Bits:验收屏蔽位。验收屏蔽位用于指定验收代码寄存器中有关位是有效。当某验收屏蔽位被清成0时,表明与该位对应的标识符寄存器必须和验收代码寄存器中相应位相同才认为是匹配的。只有当所有位均匹配,报文才会被接收。当某验收屏蔽位被置成1时,验收代码寄存器中的内容则不影响报文的接收。 AMn =1,忽略验收代码寄存器中相应位;AMn=0,验收代码寄存器与标识符寄存器中相应位必须匹配。 15.4.3

38、 CAN接口初始化与CAN报文收发编程的基本方法 (1)MSCAN08初始化 (2)发送一帧数据 (3)接收一帧数据 15.5 MSCAN08编程实例 本节以MC68HC908GZ60(以下简称GZ60)为例,讲述MSCAN08的使用方法。首先给出了GZ60的最小系统硬件连接图,在此基础上,实现了用08C语言编制的规范CAN通信子程序,包括MSCAN08初始化、接收一帧CAN协议报和发送一帧CAN协议报文子程序。 (1)GZ60的最小系统 (2)CAN结点的软件 CAN结点接入CAN网络后,CAN结点需要进行软件初始化,然后就可以向CAN网络发送数据帧或接收其它CA

39、N结点发送过来的数据帧。下面给出这些过程的源码,读者可以做一些实验,我们实验室已经有这方面的成功的应用实例,如果读者有需要可以和我们实验室联系。 ① 初始化子程序 初始化子程序08C语言例 //------------------------------------------------------------------------------------------------// //程序名:void CANInit(unsigned char time1,unsigned char time0) //功能:CAN初始化 //入口:无 //出口:无 //说明:在4M C

40、AN总线频率下将总线速率设为200kbps, // 节点标识符设为0 //--------------------------------------------------------------------------------------------------// void CANInit(void) { CMCR0|=(1<

41、LOOPB); //自测方式 CBTR0=CBTR0V; //将位速率设置成200kbps CBTR1=CBTR1V; CIDAC=CIDACV; //1次验收滤波器模式 CIDAR0=CIDAR0V; //给接收代码寄存器0-1赋值 CIDAR1=CIDAR1V; CIDMR0=CIDMR0V; //给接收屏蔽寄存器0-1赋值 CIDMR1=CIDMR1V; CMCR0&=~(1<

42、报文子程序08C语言例 //------------------------------------------------------------------// //程序名:unsigned char CANsnd1DFrm(unsigned int rid, // unsigned char * databuf,unsigned char len) //功能:CAN发送1帧(数据长度<=8)处理子程序 //入口:unsigned int rid---报文标识符, // unsigned char * databuf---报文数据区首址 // uns

43、igned char len---报文数据长度 //出口:unsigned char CANsnd1DFrm --- 发送成功与否标志, // =0,没有空闲发送缓冲区,发送不成功;=1,发送成功 //说明:在发送数据之前,先查询是否有空闲发送缓冲区 // 若无,则不能发送,返回0。 //------------------------------------------------------------------// unsigned char CANsnd1DFrm(unsigned int rid,unsigned char * databuf,

44、 unsigned char len) { unsigned char j; unsigned char * addr; unsigned char bufbit=0; bufbit=GetSndBuf();//查找空闲的发送缓冲区 if (bufbit==0xff) //若返回0xff,则没有空闲的发送缓冲区 return 0; //没有空闲的发送缓冲区,发送不成功,返回0 j=(bufbit<<4); //计算空闲缓冲区与缓冲区0的偏移 addr=(unsigned char *)(&SN

45、DBUF1+j);//计算相应缓冲区首地址 //--------------------------------------------------------// //将报文按CAN格式进行封装并存入空闲发送缓冲区等待发送 addr[0]=(unsigned char)(rid >>8); //11位报文标识符高8位 addr[1]=((unsigned char)rid); //低3位 addr[1] &=~(1<

46、 //IDE位=0 for(j=0;j

47、一个CAN报文子程序 接收一个CAN报文子程序08C语言例 //------------------------------------------------------------------// //程序名:unsigned char CANrcv1Frm(unsigned char * CANRcvbuf) //功能:CAN接收1帧子程序 //入口:无 //出口:unsigned char CANrcv1Frm---函数名,表示接收帧的情况, // =0xff,未收到帧;=1,收到数据帧;=2,收到远程帧 // unsigned char * CAN

48、Rcvbuf--若收到报文,为16字节报文的首地址 //说明: //------------------------------------------------------------------// unsigned char CANrcv1Frm(unsigned char * CANRcvbuf) { unsigned char tt; unsigned char * addr; unsigned char ss=0; if ((CRFLG&(1<

49、ddr=(unsigned char *)&RCVBUF; //RXF=1,表示收到数据,取数据处理 for(tt=0;tt<16;tt++) CANRcvbuf[tt]=addr[tt]; //将CAN接收缓冲区中的数据取到临时缓冲区 CRFLG=0xff; //清所有接收标志 //------判断是标准帧还是扩展帧---------------------------// tt=(CANRcvbuf[1]&(1<

50、帧 tt=(CANRcvbuf[1]&(1<

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服