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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > PIC16位單片機CAN(5)中斷

          PIC16位單片機CAN(5)中斷

          作者: 時間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
          CAN數(shù)據(jù)的接收使用中斷來處理。ECAN 模塊會產(chǎn)生三種不同中斷,每種中斷都具有自己的中斷向量、中斷允許控制位、中斷狀態(tài)標志和中斷優(yōu)先級控制位。這些中斷是:
          ? CiTX——ECAN 發(fā)送數(shù)據(jù)請求
          ? CiRX——ECAN 接收數(shù)據(jù)就緒
          ? Ci——ECAN 事件中斷
          具體這三種中斷的意義就不說了,看手冊就行了。我使用的是事件中斷也就是當成功接收報文并裝入一個接收緩沖區(qū) (報文緩沖區(qū) 0 至 31)時產(chǎn)生中斷。
          中斷算是比較簡單的,看一下初始化代碼:
          /* Enable ECAN1 Interrupt */
          void Interrupt_Init(void)
          {
          INTCON2bits.GIE = 1;//使能全局中斷
          INTCON1bits.NSTDIS = 0;//使能中斷嵌套
          IPC8bits.C1IP=6;//ECAN1 事件中斷優(yōu)先級 6
          IFS2bits.C1IF=0;//ECAN1 事件中斷標志狀態(tài)位
          IEC2bits.C1IE = 1;//ECAN1 事件中斷允許位
          // C1INTEbits.TBIE = 1;
          C1INTEbits.RBIE = 1;//接收緩沖區(qū)中斷允許位
          }
          再看中斷處理函數(shù)代碼:
          void __attribute__((__interrupt__,no_auto_psv))_C1Interrupt (void)
          {
          IFS2bits.C1IF = 0; // clear interrupt flag ECAN1 事件中斷標志狀態(tài)位
          if(C1INTFbits.TBIF)
          {
          C1INTFbits.TBIF = 0;
          }
          if(C1INTFbits.RBIF)//接收緩沖區(qū)中斷標志位
          {
          // read the message
          if(C1RXFUL1bits.RXFUL1==1)//接收緩沖區(qū) n 滿位
          {
          // rx_ecan1message.buffer=1;
          C1RXFUL1bits.RXFUL1=0;
          }
          // rxECAN1(&rx_ecan1message);
          C1INTFbits.RBIF = 0;//接收緩沖區(qū)中斷標志位清0
          Nop();
          Nop();
          }
          }
          中斷處理函數(shù)的寫法可以參考文檔的第六章,中斷的示例代碼。_C1Interrupt代表是CAN1事件中斷,這個名稱必須看編譯器的說明文檔,在頭文件里可能是找不到的。MPLAB?XC16 C COMPILER USER’S GUIDE 里面的第十一章就是說的中斷向量的名稱寫法。


          關(guān)鍵詞: PIC16位單片機中

          評論


          技術(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); })();