CAN总线硬件连接与程序文件_第1页
CAN总线硬件连接与程序文件_第2页
CAN总线硬件连接与程序文件_第3页
CAN总线硬件连接与程序文件_第4页
CAN总线硬件连接与程序文件_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、4Z CAM!rwiwzc1g卜ffi玺號机堂丰工谊転胖十廿垂芍.各种电班干往斗杵去矣諾芸窑折棊注丸三需二悴邵有严草的阿这芭对莊创貳统是板大的威划.丰苇吝曷导姿系 %.为了 兀耀谢fftiiOT榔略商工恫 礙取了磧F药种播騒 玮一尹帯監堆电11隋卧遇常电蘇呼&系脱宇走干就星兀的琶命 WK a特干tt也尊*矗睾通唁电握进忙东競,出甬引社话岳的H杵平为了切斷这*干就锻径.暹护“MS初养CAM?+Jtt?ftXm*tcT K137, J逻荷光电碣蓦.出二艸f5H是在惑经上用:n戻护件,晋笈王哲在貌基他也為干枕时.巨犬囲趾慝製k及电就ttilGif:收悭K.为?序止干抚吋丘岌憩的慣 墀,方口丁丹畫割乍

2、总些罠沪.当量到蹙击时戶長注总蚁上的厉旦管能弓*遇筋掉,世屋一肚丫氏下-厉官營吋良曹速!(矍.酣土电压 K E时知00 丫八居就車曲沪密融费醫后1加了償舸PK电毘,皿軽耶将岂握的虫鼻论唧在自冷帼下.直惮当聲埶午扰时、T巧代怏地起 到临护衍疋:jf=FK电耳婕早护收艮行免仝I二点的冲击.芒 Ei*OCi 1与2印各言笞一伞3C nF的士变容-可以吕M史妄左我上的高=壬兀祀陆 电匡氓號力卄耳 h-I弋劈巨早二序汪讪E?.甲三...0.31.32.

3、9.40.41./ F04x CAN1.C/ / / DEVICE: C8051F040/ AUTHOR: LS/TOOLS:Keil C-compiler andSilic onLabs IDE/CAN1.Cand CAN2.c are asimpleexample of con figuri nga CAN network to/tran smitand receive dataon aCAN network, and howto move informationto/and from CAN RAM messageobjects.Each C8051

4、F040-TBCAN nodeiscon figured/tosend a message when itsP3.7butt onis depressed/released,witha 0x11/toin dicatethebutt onispushed,and0x00 whe n released.Eachnodealso has/a message objectcon figuredtoreceivemessages.TheC8051 tests the/received data andwillturnon/offthe targetboardsLED. When one target/

5、is loaded with CAN2.candtheotheris loadedwithCAN1.c, one target/boardspush-butt onwillcon troltheother targetboards LED, establishi ng/a simplecon trollinkviatheCANbus and canbeobserved directlyon the/targetboards./ In cludes/ SFR declarations#in clude/ CAN Protocol RegisterIndex for CAN0ADR, from T

6、ABLE 18.1 of the C8051F040/ datasheet/#defineCANCTRL0x00/Con trolRegister#defineCANSTAT0x01/Statusregister#defineERRCNT0x02/ErrorCoun terRegister#defineBITREG0x03/BitTimi ng Register#defineINTREG0x04/In terruptLow Byte Register#defineCANTSTR0x05/Testregister#defineBRPEXT0x06/BRPExte nsionRegister/42

7、.IF1InterfaceRegisters43./44.#defi neIF1CMDRQST0x08/IF1Comma nd RestRegister45.#defi neIF1CMDMSK0x09/IF1Comma nd MaskRegister46.#defi neIF1MSK10x0A/IF1Mask1Register47.#defi neIF1MSK20x0B/IF1Mask2Register48.#defi neIF1ARB10x0C/IF1Arbitrati on1Register49.#defi neIF1ARB20x0D/IF1Arbitrati on2Register50.

8、#defi neIF1MSGC0x0E/IF1Message ControlRegister51.#defi neIF1DATA10x0F/IF1Data A1Register52.#defi neIF1DATA20x10/IF1Data A2Register53.#defi neIF1DATB10x11/IF1Data B1Register54.#defi neIF1DATB20x12/IF1Data B2Register55./56./IF2InterfaceRegisters57./58.#defi neIF2CMDRQST0x20/IF2Comma nd RestRegister59.

9、#defi neIF2CMDMSK0x21/IF2Comma nd MaskRegister60.#defi neIF2MSK10x22/IF2Mask1Register61.#defi neIF2MSK20x23/IF2Mask2Register62.#defi neIF2ARB10x24/IF2Arbitrati on1Register63.#defi neIF2ARB20x25/IF2Arbitrati on2Register64.#defi neIF2MSGC0x26/IF2Message ControlRegister65.#defi neIF2DATA10x27/IF2Data A

10、1Register66.#defineIF2DATA20x28Register67.#defi neIF2DATB10x29Register68.#defi neIF2DATB20x2ARegister69./70./Message Han dler Registers71./72.#defi neTRANSREQ10x4073.#defi neTRANSREQ20x4174.75.#defi neNEWDAT10x48Register76.#defi neNEWDAT20x49Register77.78.#defi neINTPEND10x50ter79.#defi neINTPEND20x

11、51ter80.81.#defi neMSGVAL10x58Register82.#defi neMSGVAL20x59Register83.84./85./GlobalVariables86./87.char MsgNum;88.char status;89.int i;90.int MOTwoI ndex = 0;91.int MOOn eI ndex = 0;92.int StatusCopy;93.int RXbuffer 4;94.int TXbuffer 8;95.int MsgI ntNum;96.int Temperature;97.sbit BUTTON = P3A7;98.

12、sbit LED =P1A6;IF2Data A2IF2 Data B1IF2Data B2/Tra nsmissi onRestl Register/Tra nsmissi onRest2 Register/New Data 1/New Data 2/In terruptPending 1Regis/In terruptPending 2Regis/Message Valid 1/Message Valid 2sfr16 CAN0DAT =0xD8;000

13、41.142./Fun ctio nPROTOTYPES/In itializeMessageObjectvoidclear_msg_objects(void );voidini t_msg_object_TX(charMsgNum);voidin it_msg_object_RX(charMsgNum);voidstart_CAN (void );voidtransmit turn LED ON(cha

14、rMsgNum);voidtran smit turn LED OFF(char MsgNum);voidreceive data(charMsgNum);voidexter nal osc(void );voidconfigO(void );voidflash LED(void );voidtest_reg_write(chartest);voidstop_CAN ( void );/ MAIN Routine/void main (void )/ disablewatchdog timerWDTCN = 0xde;WDTCN = 0xad;/con figurePort I/Ocon fi

15、g_IO();/ switch to exter nal oscillator exter nal_osc();service procedure receive_data/Con figureCANcomm uni cati ons/IF1 usedforprocedures callesby main program/ IF2 used for in terrupt143. /144./Message Objectassignments:145./0x02:Used to tran smitcomma nds to toggle its LED, arbitrati onn umber 1

16、146./147./148.149./ Clear CAN RAM150.clear_msg_objects();151.152./ In itializemessage object to tran smitdata153.in it_msg_object_TX(0x02);154.155./In itializemessage object to receivedata156.in it_msg_object_RX(0x01);157.158./Enable CAN interruptsin CIP-51159.EIE2 = 0x20;160.161./Fu nctioncallto st

17、artCAN162.start_CAN();163.164./Globalen able8051in terrupts165.EA =1;166.167./Loop and wait forin terrupts168.while (1)169.170.if (BUTTON = 0)171.while (BUTTON =0)172.tran smit_turn_LED_OFF(0x02);173.else 174.while (BUTTON =1)175.tran smit_turn_LED_ON(0x02);79.180./181./Set up C8051F040

18、182./183.184./Switch to externaloscillator185.voidexternal_osc(void )186. 187.int n;/ localvariableusedindelay FOR loop.188.SFRPAGE = CONFIG_PAGE;/switch to configpage toconfigoscillator189.OSCXCN =0x77;/ startexter naloscillator;22.1MHz Crystal190./ system clock is22.1MHz /2= 11.05 MHz191.for(n=0;n

19、 255; n+);/delay about 1ms192.while (OSCXCN & 0x80)=0);/ wait for oscillatorto stabilize193.CLKSEL |=0x01;/ switch to externaloscillator194.195.196.voidconfigO(void )197.198.SFRPAGE = CONFIG_PAGE;/PortSFRs on Con figurationpage199.XBR3=0x80;/ConfigureCAN TX pin (CTX) as push-pulldigitaloutput200.P1M

20、DOUT |=0x40;/Con figureP1.6 as push-pullto driveLED201.XBR2=0x40;/En ableCrossbar/lowports202.203.204./205./CAN Fun ctio ns206./207.208.209./ClearMessage Objects210.voidclear_msg_objects(void )211.212.SFRPAGE = CAN0_PAGE;213.CAN0ADR = IF1CMDMSK;/Poi ntto Comma nd Mask Register 1214.CAN0DATL = 0xFF;/

21、 Setdirectionto WRITE all IFregisterstoMsg Obj215.for (i=1;i= 400 ns).273.274.275.276.277.278.279.280.281.282.283.284.285.286.287.288.289.290.291.292.293.294.295.296.297.298.299.300.301.302.303.304.305.306.307.308.309.310.311.312.313.314.315.316.Syn c_Seg =1 tqPhase_seg1+ Phase_Seg2(11-6) tq5 tqPhas

22、e_seg1 Phase_seg12 tq and Phase_Seg2 =3 tqTSEG2 = (Phase_Seg21)SJW = (min (Phase_Seg1, 4) tq = 2 tq1)TSEG1 = (Prop_Seg + Phase_Seg1SJW_p = (SJW -1)BitTimi ngRegisterBRP +SJW_p*0x0040TSEG1*0x0100 +TSEG2*0x10002640Clocktolera needfA: df 2/(2*(13*11-3)=1/(141-3)B: df 2/(20*11)1/= 0.7246%=1/110=0.9091%A

23、ctual clock tolera neeis 0.7246%0.5381%0.1865% (no problemforquartz)A:df min( Phase_Seg1,Phase_Seg2) /(2* (13*bit_time-Phase_Seg2)B:df SJW /(20*bit_time)*/SFRPAGE = CAN0_PAGE;CAN0CN |=0x41;/Con figurati onChange Enable CCE and INITCAN0ADR =BITREG; /Poi nt to BitTim ingregisterCAN0DAT =0x2640;/see ab

24、oveCAN0ADR=IF1CMDMSK;/Poi nttoComma nd Mask 1CAN0DAT=0x0087;/ Co nfigfor TX : WRITE to CANRAM,write data bytes,/ set TXrqst/NewDat,clrIntPndTX-IF1 operation/ RX-IF2 operationmay interruptCAN0ADRIF2CMDMSK; /Poi ntto Comma nd Mask 2/Tran smitCAN frame to turnother nodes LED ONCAN0DATL=0x1F;/Co nfigfor

25、RX : READ CANRAM, readdatabytes,/clr NewDatandIntPndCAN0CN|=0x06;/GlobalInt.En able IEandSIECAN0CN&=0x41;/ClearCCEand INIT bits,startsCANstatemach ine(char MsgNum)voidtran smit_turn_LED_ONSFRPAGE =CAN0_PAGE;/IF1 already set upforTXCAN0ADR =IF1CMDMSK;/Poi nttoComma nd Mask1CAN0DAT =0x0087;/ Co nfigto

26、 WRITEtoCAN RAM, writedatabytes:/ setTXrqst/NewDat,ClrIntPndCAN0ADR =IF1DATA1;/Poi ntto1st byteofData FieldCAN0DATL =0x11;/On essig nalstoturni LEDs lightON indataCAN0ADR =IF1CMDRQST;/Poi nttoComma nd RequestReg.A1 fieldCAN0DATL =MsgNum;dataforTXto Msg ObjMsgNum/ Move new317.318.319.320.321.322.323.

27、324.325.326.327.328.329.330.331.332.333.334.335.336.337.338.339.340.341.342.343.344.345.346.347.348.349.350.351.352.353.354.355.356.357.358.359.360./Tran smitCANFrame toturnotherno desLEDOFFvoidtransmit turnLED OFF(charMsgNum)SFRPAGE =CAN0_PAGE;/ IF1 already setupforTXCAN0ADR =IF1DATA1;/Poi ntto 1st

28、byteofData FieldCAN0DATL =0x00;/ Zero sig nalstoturnLEDs lightON in DataCAN0ADR =IF1CMDRQST;/ Point to Comma nd RequestReg.CAN0DATL =MsgNum;/ Move new dataforTXto Msg ObjMsgNumA1 field/ReceiveData from theIF2 buffervoid receive_data (char MsgNum)char virtual_butt on;SFRPAGE=CAN0_PAGE; /IF1already set up forRXCA

温馨提示

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

评论

0/150

提交评论