• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 手機與無線通信 > 設計應用 > 基于dsPIC33FJ128MC506的CAN通信(07-100)

    基于dsPIC33FJ128MC506的CAN通信(07-100)

    ——
    作者:山東省科學院自動化研究所 張云 李明強 莊汝科 時間:2009-03-04 來源:電子產品世界 收藏

      寫報文內容

    本文引用地址:http://www.czjhyjcfj.com/article/92042.htm

      /*下面的函數將待發報文內容寫入到發射緩沖區,各參數含義如下:

      buf -> 發射緩沖器號

      dataLength -> 數據的長度

      data1/data2/data3/data4 -> 發射數據內容*/

      void ecan1WriteTxMsgBufData(unsigned int buf, unsigned int dataLength, unsigned int data1, unsigned int data2, unsigned int data3, unsigned int data4)

      {

      ecan1msgBuf[buf][2] = ((ecan1msgBuf[buf][2] & 0xFFF0) + dataLength) ;//數據長度

      ecan1msgBuf[buf][3] = data1; //數據1

      ecan1msgBuf[buf][4] = data2; //數據2

      ecan1msgBuf[buf][5] = data3; //數據3

      ecan1msgBuf[buf][6] = data4; //數據4

      }

      報文的接收

      報文接收在中斷中進行,函數語句如下:

      void __attribute__((interrupt, no_auto_psv))_C1Interrupt(void) //1中斷

      {

      IFS2bits.C1IF = 0; //請中斷標志

      if(C1INTFbits.TBIF) //是否為發射中斷

      {

      C1INTFbits.TBIF = 0;

      }

      if(C1INTFbits.RBIF) //是否為接收中斷

      {

      C1INTFbits.RBIF = 0; //請接收中斷標志位

      /*讀出報文*/

      ReceiveMessageID = (ecan1msgBuf[2][0]>>2);

      ReveiveDataLength = (ecan1msgBuf[2][2]&0x000f);

      ReceiveData[0] = ecan1msgBuf[2][3];

      ReceiveData[1] = ecan1msgBuf[2][4];

      ReceiveData[2] = ecan1msgBuf[2][5];

      ReceiveData[3] = ecan1msgBuf[2][6];

      C1RXFUL1bits.RXFUL2 = 0; //清報文溢出標志

      ReceiveNewMessage = 1; //接收標志置位

      }

      C1RXOVF1bits.RXOVF2 = 0;

      }



    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 阿拉善右旗| 扎囊县| 沽源县| 南雄市| 西昌市| 遂川县| 当阳市| 潮安县| 临夏市| 赤峰市| 宜都市| 吉安市| 昌平区| 墨竹工卡县| 青州市| 准格尔旗| 迭部县| 上虞市| 赞皇县| 梅州市| 安龙县| 靖边县| 安福县| 宜春市| 鄢陵县| 公安县| 瑞昌市| 青浦区| 建德市| 桦甸市| 台安县| 隆昌县| 吉林市| 美姑县| 巴林右旗| 闽侯县| 稷山县| 武宁县| 鹰潭市| 崇阳县| 新河县|