新聞中心

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

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

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

          寫報文內容

        本文引用地址:http://www.104case.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;

          }



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 都江堰市| 乌兰察布市| 商都县| 常熟市| 南宫市| 临西县| 哈尔滨市| 巴马| 鹤山市| 历史| 东兰县| 依兰县| 闸北区| 泰兴市| 西乌珠穆沁旗| 尖扎县| 绥德县| 班戈县| 正安县| 湖南省| 宁海县| 府谷县| 大宁县| 高平市| 乡城县| 敦化市| 宁河县| 上思县| 驻马店市| 鹿泉市| 湘乡市| 斗六市| 鞍山市| 安远县| 惠东县| 同仁县| 山阳县| 广平县| 呼图壁县| 商都县| 香港 |