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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9314|回復: 0
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
大多數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





評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91av大全| 精品免费国产一区二区三区四区介绍 | 日韩中文字幕免费 | 日韩在线不卡视频 | 欧美成人一区二区三区 | 日韩视频免费 | 伊人狼人影院 | 全免费a级毛片免费看视频免费下 | 日韩一级 | 欧美h版| 久久久久黄 | 99re热精品视频 | 国产精品毛片一区二区在线看 | 91精品国产91久久久久久丝袜 | 999久久久国产精品 欧美成人h版在线观看 | 天天综合天天 | 黄色网址av | 性在线 | av一区二区三区四区 | 国产精品欧美一区二区三区 | 国产精品一区一区三区 | h免费观看 | 一级aaaa毛片| 亚洲黄色成人网 | 日本精品网站 | 日韩在线播放一区 | 国产精品久久久久久婷婷天堂 | 在线观看亚洲一区二区 | 嫩草视频免费 | 亚洲免费成人 | 免费视频一区二区三区在线观看 | 亚洲国产成人在线视频 | 麻豆精品国产91久久久久久 | 国产一区中文字幕 | 做a视频 | 欧美日本在线观看 | 午夜网| 国产成人综合久久 | 日日操av| 国产三级大片 | 岛国av免费观看 |