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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 用PIC18F458 的CAN 模塊實(shí)現(xiàn)CAN 總線通信

          用PIC18F458 的CAN 模塊實(shí)現(xiàn)CAN 總線通信

          作者: 時(shí)間:2012-11-27 來(lái)源:網(wǎng)絡(luò) 收藏


          2.3 信息的接收
          有2 個(gè)具有多重接收濾波器的完全接收緩沖器和1 個(gè)單獨(dú)信息組合的緩沖器。接收郵箱初始化時(shí),要設(shè)置其標(biāo)識(shí)符及相關(guān)的屏蔽寄存器、接收優(yōu)先級(jí)等。
          MAB 寄存器接收所有來(lái)自總線的下一條信息,RXB0 和RXB1 則接收來(lái)自協(xié)議驅(qū)動(dòng)的完整信息。MAB 接收所有信息, 但是只有滿足過(guò)濾條件的信息才被傳送到RXBx 中。

          3 軟件設(shè)計(jì)
          下面的程序例程實(shí)現(xiàn)的是發(fā)送緩沖器0 向接收緩沖器0 發(fā)送數(shù)據(jù)的自測(cè)試模式, 其中接收采用中斷方式,發(fā)送采用查詢方式。該程序?qū)崿F(xiàn)了 單片機(jī)CAN 模塊的最小程序, 經(jīng)過(guò)適當(dāng)修改即可用于實(shí)際工程程序中, 并在實(shí)現(xiàn)工程中驗(yàn)證了它的正確性。
          #include p18f458.h>
          int CAN_FLAG;
          voidinitcan(){
          TRISB=(TRISB|0X08)0XFB;
          CANCON=0X80;
          while(CANSTAT0X80==0)continue;
          BRGCON1=0X01;
          BRGCON2=0X90;
          BRGCON3=0X42;
          TXB0CON=0X03;
          TXB0SIDH=0XFF;
          TXB0SIDL=0XE0;
          TXB0DLC=0X08;
          TXB0D0=0X00;
          TXB0D1=0X01;
          TXB0D2=0X02;
          TXB0D3=0X03;
          TXB0D4=0X04;
          TXB0D5=0X05;
          TXB0D6=0X06;
          TXB0D7=0X07;
          RXB0SIDH=0XFF;
          RXB0SIDL=0XE0;
          RXB0CON=0X20;
          RXB0DLC=0X08;
          RXB0D0=0X00;
          RXB0D1=0X00;
          RXB0D2=0X00;
          RXB0D3=0X00;
          RXB0D4=0X00;
          RXB0D5=0X00;
          RXB0D6=0X00;
          RXB0D7=0X00;
          RXF0SIDH=0XFF;
          RXF0SIDL=0XE0;
          RXM0SIDH=0X00;
          RXM0SIDL=0X00;
          CANCON=0X40;
          while(CANSTAT0X40==0)continue;
          PIR3=0X00;
          PIE3=0X01;
          IPR3=0X01;
          }
          #pragma interrupt can_isr
          #pragma code low_ISR=0x18
          void low_ISR() {
          _asm
          gotocan_isr
          _endasm
          }
          #pragma code
          voidcan_isr() {
          if(PIR3bits.RXB0IF==1)CAN_FLAG=1;
          PIR3bits.RXB0IF=0;
          RXB0CONbits.RXFUL=0;
          }
          main(){
          INTCON=0x00;
          initcan();
          W D T C O N = 0 ;
          INTCON=0xc0;
          while(1) {
          TXB0CONbits.TXREQ=1;
          while(PIR3bits.TXB0IF!=1)continue;
          while(CAN_FLAG==0)continue;
          CAN_FLAG=0;
          TXB0CONbits.TXREQ=0;
          TXB0D0=RXB0D0+1;
          TXB0D1=RXB0D1+1;
          TXB0D2=RXB0D2+1;
          TXB0D3=RXB0D3+1;
          TXB0D4=RXB0D4+1;
          TXB0D5=RXB0D5+1;
          TXB0D6=RXB0D6+1;
          TXB0D7=RXB0D7+1;
          }
          }


          上一頁(yè) 1 2 下一頁(yè)

          關(guān)鍵詞: PIC18F458 CAN模塊 總線通信

          評(píng)論


          相關(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); })();