久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9306|回復: 0
收起左側

51單片機CAN通訊的測試小程序

[復制鏈接]
ID:406093 發表于 2018-11-6 10:03 | 顯示全部樓層 |閱讀模式
大多數51單片機都有內部的SPI模塊,因此,我們可以結合 MCP2515 or MCP2510 等芯片進行CAN通訊。以下是一個51單片機利用內部SPI模塊功能進行CAN通訊的測試小程序,希望大家能夠喜歡。



First CANSPI node 程序:
  1. unsigned char Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags; // can flags
  2. unsigned char Rx_Data_Len;                                   // received data length in bytes
  3. char RxTx_Data[8];                                           // can rx/tx data buffer
  4. char Msg_Rcvd;                                               // reception flag
  5. const long ID_1st = 12111, ID_2nd = 3;                       // node IDs
  6. long Rx_ID;

  7. // CANSPI module connections
  8. sbit CanSpi_CS  at P1_0_bit;
  9. sbit CanSpi_Rst at P1_2_bit;
  10. // End CANSPI module connections

  11. void main() {

  12.   Can_Init_Flags = 0;                                         //
  13.   Can_Send_Flags = 0;                                         // clear flags
  14.   Can_Rcv_Flags  = 0;                                         //

  15.   Can_Send_Flags = _CANSPI_TX_PRIORITY_0 &                    // form value to be used
  16.                    _CANSPI_TX_XTD_FRAME &                     //   with CANSPIWrite
  17.                    _CANSPI_TX_NO_RTR_FRAME;

  18.   Can_Init_Flags = _CANSPI_CONFIG_SAMPLE_THRICE &             // Form value to be used
  19.                    _CANSPI_CONFIG_PHSEG2_PRG_ON &             //  with CANSPIInit
  20.                    _CANSPI_CONFIG_XTD_MSG &
  21.                    _CANSPI_CONFIG_DBL_BUFFER_ON &
  22.                    _CANSPI_CONFIG_VALID_XTD_MSG;


  23.   SPI1_Init();                                                     // initialize SPI1 module

  24.   CANSPIInitialize(1,3,3,3,1,Can_Init_Flags);                      // Initialize external CANSPI module

  25.   CANSPISetOperationMode(_CANSPI_MODE_CONFIG,0xFF);                // set CONFIGURATION mode
  26.   CANSPISetMask(_CANSPI_MASK_B1,-1,_CANSPI_CONFIG_XTD_MSG);        // set all mask1 bits to ones
  27.   CANSPISetMask(_CANSPI_MASK_B2,-1,_CANSPI_CONFIG_XTD_MSG);        // set all mask2 bits to ones
  28.   CANSPISetFilter(_CANSPI_FILTER_B2_F4,ID_2nd,_CANSPI_CONFIG_XTD_MSG);// set id of filter B2_F4 to 2nd node ID

  29.   CANSPISetOperationMode(_CANSPI_MODE_NORMAL,0xFF);                // set NORMAL mode

  30.   RxTx_Data[0] = 9;                                                // set initial data to be sent

  31.   CANSPIWrite(ID_1st, RxTx_Data, 1, Can_Send_Flags);               // send initial message

  32.   while(1) {                                                                 // endless loop

  33.     Msg_Rcvd = CANSPIRead(&Rx_ID , RxTx_Data , &Rx_Data_Len, &Can_Rcv_Flags);// receive message

  34.     if ((Rx_ID == ID_2nd) && Msg_Rcvd) {                                     // if message received check id

  35.       P0 = RxTx_Data[0];                                                     // id correct, output data at PORT0
  36.       RxTx_Data[0]++ ;                                                       // increment received data
  37.       Delay_ms(10);
  38.       CANSPIWrite(ID_1st, RxTx_Data, 1, Can_Send_Flags);                     // send incremented data back
  39.     }
  40.   }
  41. }
復制代碼

Second CANSPI node 程序:
  1. unsigned char Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags; // can flags
  2. unsigned char Rx_Data_Len;                                   // received data length in bytes
  3. char RxTx_Data[8];                                           // can rx/tx data buffer
  4. char Msg_Rcvd;                                               // reception flag
  5. const long ID_1st = 12111, ID_2nd = 3;                       // node IDs
  6. long Rx_ID;

  7. // CANSPI module connections
  8. sbit CanSpi_CS  at P1_0_bit;
  9. sbit CanSpi_Rst at P1_2_bit;
  10. // End CANSPI module connections

  11. void main() {
  12.   Can_Init_Flags = 0;                                         //
  13.   Can_Send_Flags = 0;                                         // clear flags
  14.   Can_Rcv_Flags  = 0;                                         //

  15.   Can_Send_Flags = _CANSPI_TX_PRIORITY_0 &                    // form value to be used
  16.                    _CANSPI_TX_XTD_FRAME &                     //   with CANSPIWrite
  17.                    _CANSPI_TX_NO_RTR_FRAME;

  18.   Can_Init_Flags = _CANSPI_CONFIG_SAMPLE_THRICE &             // Form value to be used
  19.                    _CANSPI_CONFIG_PHSEG2_PRG_ON &             //  with CANSPIInit
  20.                    _CANSPI_CONFIG_XTD_MSG &
  21.                    _CANSPI_CONFIG_DBL_BUFFER_ON &
  22.                    _CANSPI_CONFIG_VALID_XTD_MSG &
  23.                    _CANSPI_CONFIG_LINE_FILTER_OFF;

  24.   SPI1_Init();                                                                // initialize SPI1 module
  25.   
  26.   CANSPIInitialize(1,3,3,3,1,Can_Init_Flags);                                 // initialize external CANSPI module
  27.   CANSPISetOperationMode(_CANSPI_MODE_CONFIG,0xFF);                           // set CONFIGURATION mode
  28.   CANSPISetMask(_CANSPI_MASK_B1,-1,_CANSPI_CONFIG_XTD_MSG);                   // set all mask1 bits to ones
  29.   CANSPISetMask(_CANSPI_MASK_B2,-1,_CANSPI_CONFIG_XTD_MSG);                   // set all mask2 bits to ones
  30.   CANSPISetFilter(_CANSPI_FILTER_B2_F3,ID_1st,_CANSPI_CONFIG_XTD_MSG);        // set id of filter B2_F3 to 1st node ID

  31.   CANSPISetOperationMode(_CANSPI_MODE_NORMAL,0xFF);                           // set NORMAL mode

  32.   while (1) {                                                                 // endless loop
  33.     Msg_Rcvd = CANSPIRead(&Rx_ID , RxTx_Data , &Rx_Data_Len, &Can_Rcv_Flags); // receive message
  34.     if ((Rx_ID == ID_1st) && Msg_Rcvd) {                                      // if message received check id
  35.       P0 = RxTx_Data[0];                                                      // id correct, output data at PORT0
  36.       RxTx_Data[0]++ ;                                                        // increment received data
  37.       CANSPIWrite(ID_2nd, RxTx_Data, 1, Can_Send_Flags);                      // send incremented data back
  38.     }
  39.   }
  40. }
復制代碼
相關信息:http://www.zg4o1577.cn/bbs/dpj-136722-1.html

canspi.jpg




評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日本在线观看 | 喷水毛片 | 国产在线激情视频 | 欧洲一区二区三区 | xxxxxx国产 | 超碰免费在线 | 免费视频久久 | 欧美日韩免费 | 99热热热| 日韩欧美精品 | 毛片免费在线观看 | 精品综合在线 | 国产高清视频 | 亚洲精品一区中文字幕乱码 | 美女一级毛片 | 日本精品一区二区三区在线观看 | 国产精品久久久久久久免费大片 | 日韩精品成人一区二区三区视频 | 亚洲美女天堂网 | 亚洲九九精品 | 国产精品色综合 | 国产亚洲久 | 伊人网综合 | yiren22 亚洲综合| 国产精品18hdxxxⅹ在线 | 免费1区2区3区 | 黄网站涩免费蜜桃网站 | 国产精品69毛片高清亚洲 | 99精品视频一区二区三区 | 欧美全黄| 国产精品久久久久aaaa九色 | av中文字幕在线 | 国产精品日产欧美久久久久 | 久久一级大片 | www.日本国产 | 亚洲成人动漫在线观看 | 亚洲精品成人 | 在线永久看片免费的视频 | 久久久久成人精品亚洲国产 | 亚洲精品视频在线播放 | 亚洲色图综合 |