下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 c8051f040中can控制器的应用2

c8051f040中can控制器的应用2.doc

c8051f040中can控制器的应用2

罗常勤
2017-10-23 0人阅读 举报 0 0 暂无简介

简介:本文档为《c8051f040中can控制器的应用2doc》,可适用于工程科技领域

cf中can控制器的应用(a)《CF中的CAN控制器应用》PCAN通信部分源程序如下:*报文对象初始化程序清空所有报文对象因为有些MESSAGEOBJECT不用但要初始化将不使用的messageobject的MsgVal都复位*voidclearmsgobjects(void){unsignedchariSFRPAGE=CANPAGE*指向CAN页面:X*CANADR=IFCMDMSK*指向命令屏蔽寄存器*CANDATL=xFF*设置为“写”通过IFX接口寄存器写目标对象*for(i=i<i){CANADR=IFARBCANDAT=XCANDAT=XCANADR=IFCMDRQSTWriteblank(reset)IFregisterstoeachmsgobjCANDATL=i}}*StartCANCANCLK=MHZ,BRP=,BITRATE=MBitsbuslength=mM=XBIF为发送操作接口寄存器IF为接收操作接口寄存器K=XC*voidstartCAN(void){SFRPAGE=CANPAGECANCN|=x*将CCE和Init置“”开始初始化*CANADR=BITREG*指向位定时寄存器进行配置*CANDAT=x*位率为ks*CANCN|=x*允许全局中断IE和SIE置位*CANCN=~x*清楚CCE和INIT位启动CAN状态机制*}*初始化发送对象用四个messageobject,IF用来发送报文*voidinitmsgobjectTX(charMsgNum){SFRPAGE=CANPAGECANADR=IFCMDMSK*指向IF命令屏蔽寄存器*CANDAT=xB*设置为写操作除了ID的mask和数据位不能改变其它都可以变化*switch(MsgNum){case:*第一个目标对象的ID=*{CANADR=IFARB*指向仲裁寄存器*CANDAT=xCANDAT=xA*使用标准帧*CANADR=IFMSK*设置相应的屏蔽寄存器*CANDAT=xCANDAT=x}breakcase:*第个目标对象的ID=*{CANADR=IFARBCANDAT=xCANDAT=xACANADR=IFMSKCANDAT=xCANDAT=x}breakcase:*第个目标对象的ID=*{CANADR=IFARBCANDAT=xCANDAT=xACANADR=IFMSKCANDAT=xCANDAT=x}breakcase:*第个目标对象的ID=*{CANADR=IFARBCANDAT=xCANDAT=xACCANADR=IFMSKCANDAT=xCANDAT=xC}breakcase:*第个目标对象的ID=*{CANADR=IFARBCANDAT=xCANDAT=xACANADR=IFMSKCANDAT=xCANDAT=x}break}CANADR=IFMSGC*设置报文控制寄存器:DLC=,远程帧允许中断允许*CANDAT=XCANADR=IFCMDRQST*指向命令请求寄存器*CANDAT=MsgNum*向此寄存器中写入目标对象编号对此对象进行设置*}*初始化接收对象用的四个messageobject,IF用来接收报文*voidinitmsgobjectRX(charMsgNum){SFRPAGE=CANPAGECANADR=IFCMDMSK*指向命令屏蔽寄存器*CANDAT=xBswitch(MsgNum){case:*第个对象用来接收数据ID=*{CANADR=IFARBCANDAT=xCANDAT=xCANADR=IFMSKCANDAT=xCANDAT=xC}breakcase:*第个对象用来接收数据ID=*{CANADR=IFARBCANDAT=xCANDAT=xCANADR=IFMSKCANDAT=xCANDAT=xC}breakcase:*第个对象用来接收数据ID=*{CANADR=IFARBCANDAT=xCANDAT=xCCANADR=IFMSKCANDAT=xCANDAT=xCC}breakcase:*第个对象用来接收数据ID=*{CANADR=IFARBCANDAT=xCANDAT=xCANADR=IFMSKCANDAT=xCANDAT=xC}breakcase:*第个对象用来接收数据ID=*{CANADR=IFARBCANDAT=xCANDAT=xCANADR=IFMSKCANDAT=xCANDAT=xC}break}CANADR=IFMSGC*设置报文控制寄存器:中断允许、DLC=*CANDAT=xCANADR=IFCMDRQSTCANDATL=MsgNum}*数据发送部分CAN数据更新由定时器产生中断*voidtransmitISR(void)interrupt{TF=transmittempvalue()}voidtransmittempvalue(void){charifor(i=i<=i)transmitFIFOblock(i)}voidtransmitFIFOblock(charidvalue){switch(idvalue){case:transmitmessage(X)breakcase:transmitmessage(X)breakcase:transmitmessage(X)breakcase:transmitmessage(X)breakcase:transmitmessage(X)break}}voidtransmitmessage(charMsgNum){uchark=,l=ucharm=,n=,h=uchariSFRPAGE=CANPAGECANADR=IFCMDMSKCANDAT=XCANADR=IFARBswitch(MsgNum){caseX:{CANDATH|=xCANADR=IFDATAfor(i=i<i){CANDAT=cantempkk}}breakcaseX:{CANDATH|=xCANADR=IFDATAfor(i=i<i){CANDAT=cantempll}}breakcaseX:{CANDATH|=xCANADR=IFDATAfor(i=i<i){CANDAT=cantempmm}}breakcaseX:{CANDATH|=xCANADR=IFDATAfor(i=i<i){CANDAT=cantempnn}}breakcaseX:{CANDATH|=xCANADR=IFDATAfor(i=i<i){CANDAT=cantemphh}}break}CANADR=IFCMDRQSTCANDATL=MsgNum}*数据接收函数*voidreceivedata(void){chark,l,icharm,n,hSFRPAGE=CANPAGECANADR=IFCMDMSKCANDAT=xFfor(i=i<i){CANADR=IFCMDRQSTCANDATL=iswitch(i){case:{CANADR=IFDATA*指向数据场的第一个字节*for(k=k<k)*读取个字节的数据*{canRXk=CANDAT}}breakcase:{CANADR=IFDATAfor(l=l<l){canRXl=CANDAT}}breakcase:{CANADR=IFDATAfor(m=m<m){canRXm=CANDAT}}breakcase:{CANADR=IFDATAfor(n=n<n){canRXn=CANDAT}}breakcase:{CANADR=IFDATAfor(h=h<h){canRXh=CANDAT}}break}}}*CAN中断程序*voidCANISR(void)interrupt{intstatus=CANSTAif((statusx)!=)*RxOk置位,中断由接收引起*{CANSTA=(CANSTAxEF)|x*将RxOk复位,置LEC没有改变*receivedata()intchar()}if((statusx)!=)*TxOk置位中断由发送引起*{CANSTA=(CANSTAxF)|x*将TxOkk复位,置LEC没有改变*}if(((statusx)!=)((statusx)!=))错误中断,LEC变化{CANSTA=CANSTA|x}}

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/13

c8051f040中can控制器的应用2

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利