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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9441|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产成人一区二区三区 | 天天操夜夜操 | 午夜精品影院 | 一区影院| 国产一区二区在线免费观看 | 日韩国产在线 | 在线不卡av | 午夜影院普通用户体验区 | 精品入口麻豆88视频 | av黄色在线| 成人在线播放网址 | 中文在线一区二区 | 久久久一区二区 | 黄色骚片 | 97av| 日日夜夜av| 久久久久久久一区 | 亚洲精品永久免费 | av免费在线播放 | 国产一级片一区二区三区 | 狠狠狠色丁香婷婷综合久久五月 | 国产99视频精品免费视频7 | 天天综合久久 | 成人超碰 | 久国产精品| 一区视频在线免费观看 | 综合久久综合久久 | 亚洲 中文 欧美 日韩 在线观看 | 在线国产一区二区 | 久久精品成人 | 北条麻妃99精品青青久久主播 | 亚洲精品电影网在线观看 | 亚洲一区二区视频 | 精品久久久久久久久久久久 | 精品欧美一区二区三区久久久 | 欧美另类视频 | 天天影视网天天综合色在线播放 | 欧美一区二区三区在线观看视频 | 欧美寡妇偷汉性猛交 | 亚洲在线免费 | 亚洲一区免费 |