<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > PIC單片機can總線協(xié)議收發(fā)編程

          PIC單片機can總線協(xié)議收發(fā)編程

          作者: 時間:2012-12-31 來源:網(wǎng)絡(luò) 收藏

          //該程序運行在pic單片機p18f458上實現(xiàn)發(fā)送緩沖器0向接收緩沖器0發(fā)送數(shù)據(jù)的自測試模式,其中接收采用中斷方式
          //發(fā)送采用查詢方式
          #include"p18f458.h"
          intCAN_FLAG;//定義標志寄存器
          //**************初始化子程序***************
          // http://www.51hei.com單片機網(wǎng)提供有問題請聯(lián)系我們
          voidinitcan()
          {
          TRISB=(TRISB|0X08)0XFB;//設(shè)置CANRX/RB3為輸入,CANTX/RB2為輸出

          //設(shè)置CAN的波特率為125K,在Fosc=4M時,Tbit=8us,假設(shè)BRP=01h
          //則TQ=[2*(1+BRP)]/Fosc=2*(1+1)/4=1us。
          //NOMINAL BIT RATE=8TQ,SJW=1,Sync_Seg=1TQ,Prog _Seg=1TQ,Phase_Seg1=3TQ,Phase_Seg2=3TQ
          CANCON=0X80;//請求進入CAN配置模式REQOP=100
          while(CANSTAT0X80==0){;}//等待進入CAN配置模式OPMODE=100
          BRGCON1=0X01;//設(shè)置SJW和BRP,SJW=1TQ,BRP=01H
          BRGCON2=0X90;//設(shè)置Phase_Seg1=3TQ和Prog _Seg=1TQ
          BRGCON3=0X42;//設(shè)置Phase_Seg2=3TQ

          //設(shè)置發(fā)送郵箱0標識符號和發(fā)送的數(shù)據(jù)
          TXB0CON=0X03;//發(fā)送優(yōu)先級為最高優(yōu)先級,TXPRI=11
          TXB0SIDH=0XFF;//設(shè)置發(fā)送緩沖器0的標準標識符,本程序采用標準識符
          TXB0SIDL=0XE0;
          TXB0DLC=0X08;//設(shè)置數(shù)據(jù)長度為8個字節(jié)
          TXB0D0=0X00;//寫發(fā)送緩沖器數(shù)據(jù)區(qū)的數(shù)據(jù)
          TXB0D1=0X01;
          TXB0D2=0X02;
          TXB0D3=0X03;
          TXB0D4=0X04;
          TXB0D5=0X05;
          TXB0D6=0X06;
          TXB0D7=0X07;

          //設(shè)置接收郵箱0的標識符和初始化數(shù)據(jù)
          RXB0SIDH=0XFF;//設(shè)置接收緩沖器0的標識符
          RXB0SIDL=0XE0;
          RXB0CON=0X20;//僅僅接收標準標識符的有效信息,F(xiàn)ILHIT0=0表示RXB0采用filter0
          RXB0DLC=0X08;//設(shè)置接收緩沖器0的數(shù)據(jù)區(qū)長度
          RXB0D0=0X00;//初始化接收緩沖器0的數(shù)據(jù)區(qū)數(shù)據(jù)
          RXB0D1=0X00;
          RXB0D2=0X00;
          RXB0D3=0X00;
          RXB0D4=0X00;
          RXB0D5=0X00;
          RXB0D6=0X00;
          RXB0D7=0X00;

          //初始化接收濾波器0和接收屏蔽,
          RXF0SIDH=0XFF;
          RXF0SIDL=0XE0;
          RXM0SIDH=0X00;
          RXM0SIDL=0X00;

          //初始化CAN模塊的I/O控制寄存器
          //CIOCON=0X00;

          //使CAN進入某種工作模式模式
          CANCON=0X00;//=0X40,進入自測試模式;=0x00,正常操作模式
          while(CANSTAT0XE0!=0){;}
          //while(CANSTAT0X40==0){;}

          //初始化CAN的中斷
          PIR3=0X00;//清所有中斷標志
          PIE3=0X01;//使能接收緩沖器0的接收中斷
          IPR3=0X01;//接收緩沖器0的接收中斷為最高優(yōu)先級
          }

          //*********接收緩沖器0接收中斷服務(wù)程序***********
          #pragmainterruptcan_isr
          #pragmacode low_ISR=0x18
          void low_ISR()
          {
          _asm
          goto can_isr
          _endasm
          }
          #pragmacode

          void can_isr()
          {
          if(PIR3bits.RXB0IF==1)CAN_FLAG=1;
          PIR3bits.RXB0IF=0;//清接收中斷標志
          RXB0CONbits.RXFUL=0;//打開接收緩沖器來接收新信息
          }

          //****************主程序**can總線****************
          main()
          {
          INTCON=0x00;//禁止所有中斷
          initcan();
          WDTCON=0;//=1,看門狗使能;=0,禁止看門狗
          INTCON=0xc0;//使能中斷
          while(1)
          {
          TXB0CONbits.TXREQ=1;//請求發(fā)送,TXREQ=1
          while(PIR3bits.TXB0IF!=1){;}//等待發(fā)送完成
          while(CAN_FLAG==0){;}//等待接收數(shù)據(jù)
          CAN_FLAG=0;//清接收到標志
          TXB0CONbits.TXREQ=0;//禁止發(fā)送
          TXB0D0=RXB0D0+1;//用接收數(shù)據(jù)加1來更新發(fā)送數(shù)據(jù)
          TXB0D1=RXB0D1+1;
          TXB0D2=RXB0D2+1;
          TXB0D3=RXB0D3+1;
          TXB0D4=RXB0D4+1;
          TXB0D5=RXB0D5+1;
          TXB0D6=RXB0D6+1;
          TXB0D7=RXB0D7+1;

          }
          }



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();