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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3180|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

分享一些CAN總線資料和mcp2515程序,項目上用到,供各位參考

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:786943 發(fā)表于 2020-6-23 09:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
分享一些CAN總線資料,項目上可以用到,供大家參考
CAN_C程序.zip (108.05 KB, 下載次數(shù): 120)
can入門教程.pdf (1.82 MB, 下載次數(shù): 46)
CAN總線協(xié)議講解.pdf (4.71 MB, 下載次數(shù): 42)
MCP2515-CAN 中文數(shù)據(jù)手冊.pdf (1.19 MB, 下載次數(shù): 57)
PCA82C250應(yīng)用指南中文資料.pdf (663.56 KB, 下載次數(shù): 30)
STM32CAN發(fā)送和接收過濾詳解.pdf (252.93 KB, 下載次數(shù): 57)

單片機(jī)源程序如下:
  1. #include "reg51.h"
  2. #include "intrins.h"
  3. #include "mcp2515.h"
  4. #include "intrins.h"
  5. #include "datadef.h"
  6. //sbit CANSPI_SI  = P0^1;
  7. //sbit CANSPI_SO  = P0^0;
  8. //sbit CAN_RST    = P2^6;
  9. //sbit CANSPI_CS  = P2^7;
  10. //sbit CANSPI_SCK = P0^2;
  11. //sbit CAN_RS     = P2^5;
  12. //sbit CAN_INT    = P3^7;

  13. //sbit LED1       = P1^7;
  14. //sbit LED2       = P1^6;


  15. sbit CANSPI_SI  = P2^6;
  16. sbit CANSPI_SO  = P2^3;
  17. sbit CAN_RST    = P2^1;
  18. sbit CANSPI_CS  = P2^2;
  19. sbit CANSPI_SCK = P2^5;
  20. sbit CAN_RS     = P4^7;

  21. sbit CAN_INT    = P3^4;
  22. sbit CAN_CE     = P2^0;
  23. sbit LED1       = P2^4;
  24. sbit LED2       = P2^7;

  25. sbit PKE_C  = P1^6;
  26. sbit PKE_D  = P1^7;
  27. sbit PKE_A  = P3^3;
  28. sbit PKE_B  = P3^4;
  29. bit B_R2;
  30. bit CAN_OK;

  31. static u8 xdata CAN_READ_BUFF01[15];
  32. static u8 xdata CAN_READ_BUFF02[15];
  33. u8 code SEND_CAN_CODE01[]=             //CAN發(fā)送數(shù)據(jù)流
  34.         {14,                            //數(shù)據(jù)個數(shù)
  35.          COMMAND_WRITE_TXB0SIDH,
  36.          0x2A,0x00,0x00,0x00,0x08,     //ID
  37.          0x12,0x34,0x56,0x78,0x90,0xFF,0xFF,0xFF,  //內(nèi)容
  38.          COMMAND_RTST0
  39.         };
  40.        
  41. u8 code CAN_INIT_DATA01[]=       //CAN初始化數(shù)據(jù)流01
  42.         {
  43.          
  44.                         0x02,CANCTRL,     0x80,                 //;進(jìn)入配置模式

  45.                         0x02,CNF1,        0x04,                        //;CAN速率        100K
  46.                         0x02,CNF2,        0x9E,                        //;CAN速率
  47.                         0x02,CNF3,        0x03,                        //;CAN速率

  48.                         0x02,CANINTE,     0x43,

  49.                         0x02,RXB0CTRL,    0x24,                 //;接收緩沖器0        控制寄存器    24H標(biāo)準(zhǔn)楨、滾存
  50.                         0x02,RXB1CTRL,    0x20,                        //;接收緩沖器1        控制寄存器    20標(biāo)準(zhǔn)楨
  51.                         0x02,BFPCTRL,     0x00,                 //;RXnBF引腳控制和狀態(tài)寄存器

  52.                         0x02,RXM0SIDH,          0xFF,            //;驗收屏蔽寄存器0        標(biāo)準(zhǔn)標(biāo)識符高位 (驗證的是RXB0SIDH,為0的是都接收,為1是開啟屏蔽)
  53.                         0x02,RXM0SIDL,          0xE0,                  //;驗收屏蔽寄存器0        標(biāo)準(zhǔn)標(biāo)識符低位
  54.                         0x02,RXM0EID8,          0x00,                  //;驗收屏蔽寄存器0        擴(kuò)展標(biāo)識符高位
  55.                         0x02,RXM0EID0,          0x00,                  //;驗收屏蔽寄存器0        擴(kuò)展標(biāo)識符低位

  56.                         0x02,RXM1SIDH,          0xFF,            //;驗收屏蔽寄存器1        標(biāo)準(zhǔn)標(biāo)識符高位
  57.                         0x02,RXM1SIDL,          0xE0,                  //;驗收屏蔽寄存器1        標(biāo)準(zhǔn)標(biāo)識符低位
  58.                         0x02,RXM1EID8,          0x00,            //;驗收屏蔽寄存器1        擴(kuò)展標(biāo)識符高位
  59.                         0x02,RXM1EID0,          0x00,                  //;驗收屏蔽寄存器1        擴(kuò)展標(biāo)識符低位
  60.                 //;.........................................................................................


  61.                 //;接收CAN地址 2AH,00H
  62.                         0x02,RXF0SIDH,          0x2A,                  ////;驗收濾波寄存器0        標(biāo)準(zhǔn)標(biāo)識符高位
  63.                         0x02,RXF0SIDL,          0x10,            //;驗收濾波寄存器0        標(biāo)準(zhǔn)標(biāo)識符低位
  64.                         0x02,RXF0EID8,          0x00,                  //;驗收濾波寄存器0        擴(kuò)展標(biāo)識符高位
  65.                         0x02,RXF0EID0,          0x00,                  //;驗收濾波寄存器0        擴(kuò)展標(biāo)識符低位

  66.                         0x02,RXF1SIDH,          0xFF,                  //;驗收濾波寄存器1        標(biāo)準(zhǔn)標(biāo)識符高位
  67.                         0x02,RXF1SIDL,          0xE0,                  //;驗收濾波寄存器1        標(biāo)準(zhǔn)標(biāo)識符低位
  68.                         0x02,RXF1EID8,          0x00,                  //;驗收濾波寄存器1        擴(kuò)展標(biāo)識符高位
  69.                         0x02,RXF1EID0,          0x00,                  //;驗收濾波寄存器1        擴(kuò)展標(biāo)識符低位
  70.                 //;.........................................................................
  71.                         0x02,RXF2SIDH,          0x00,                  //;驗收濾波寄存器2        標(biāo)準(zhǔn)標(biāo)識符高位
  72.                         0x02,RXF2SIDL,          0x00,                  //;驗收濾波寄存器2        標(biāo)準(zhǔn)標(biāo)識符低位
  73.                         0x02,RXF2EID8,          0x00,                  //;驗收濾波寄存器2        擴(kuò)展標(biāo)識符高位
  74.                         0x02,RXF2EID0,          0x00,            //;驗收濾波寄存器2        擴(kuò)展標(biāo)識符低位

  75.                         0x02,RXF3SIDH,          0xFF,                  //;驗收濾波寄存器3        標(biāo)準(zhǔn)標(biāo)識符高位
  76.                         0x02,RXF3SIDL,          0xE0,                  //;驗收濾波寄存器3        標(biāo)準(zhǔn)標(biāo)識符低位
  77.                         0x02,RXF3EID8,          0x00,                  //;驗收濾波寄存器3        擴(kuò)展標(biāo)識符高位
  78.                         0x02,RXF3EID0,          0x00,            //;驗收濾波寄存器3        擴(kuò)展標(biāo)識符低位

  79.                         0x02,RXF4SIDH,          0xFF,                   //;驗收濾波寄存器4        標(biāo)準(zhǔn)標(biāo)識符高位
  80.                         0x02,RXF4SIDL,          0xE0,                  //;驗收濾波寄存器4        標(biāo)準(zhǔn)標(biāo)識符低位
  81.                         0x02,RXF4EID8,          0x00,                  //;驗收濾波寄存器4        擴(kuò)展標(biāo)識符高位
  82.                         0x02,RXF4EID0,          0x00,                  //;驗收濾波寄存器4        擴(kuò)展標(biāo)識符低位

  83.                         0x02,RXF5SIDH,          0xFF,                  //;驗收濾波寄存器5        標(biāo)準(zhǔn)標(biāo)識符高位
  84.                         0x02,RXF5SIDL,          0xE0,                  //;驗收濾波寄存器5        標(biāo)準(zhǔn)標(biāo)識符低位
  85.                         0x02,RXF5EID8,          0x00,                  //;驗收濾波寄存器5        擴(kuò)展標(biāo)識符高位
  86.                         0x02,RXF5EID0,          0x00,     //;驗收濾波寄存器5        擴(kuò)展標(biāo)識符低位

  87.                         0x02,CANCTRL,            0x40               //;模式  00-收發(fā)模式   40--自發(fā)自收模式
  88.   };
  89. //========================================================================
  90. // 函數(shù):CANSPI_WRITE_BYTE(u8 data_buff)
  91. // 描述:SPI寫一個字節(jié)
  92. // 參數(shù):data_buff/所傳數(shù)據(jù)
  93. // 返回: none.
  94. //========================================================================
  95. void CANSPI_WRITE_BYTE(u8 data_buff)
  96. {
  97.                 u8 i;
  98.           for(i=0;i<8;i++)        //8位,循環(huán)        8次                                                       
  99.           {
  100.                           if(((data_buff << i)&0x80) != 0)  //先傳輸高位
  101.                                         CANSPI_SI = 1;
  102.                                 else
  103.                                   CANSPI_SI = 0;
  104.                                
  105.                                 _nop_();_nop_(); _nop_(); _nop_(); _nop_();
  106.                                 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  107.                                 _nop_(); _nop_(); _nop_();
  108.                                
  109.                                 CANSPI_SCK = 1;
  110.                                
  111.                                 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  112.                                 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  113.                         _nop_(); _nop_(); _nop_(); _nop_();
  114.                                
  115.                                 CANSPI_SCK = 0;
  116.                                
  117.                                 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  118.                                 _nop_(); _nop_(); _nop_(); _nop_();
  119.           }
  120. }
  121. //========================================================================
  122. // 函數(shù):CANSPI_READ_BYTE(u8 data_buff)
  123. // 描述:SPI讀一個字節(jié)
  124. // 參數(shù):none.
  125. // 返回:data_buff/所讀數(shù)據(jù)
  126. //========================================================================
  127. u8 CANSPI_READ_BYTE(void)
  128. {
  129.                 u8 i,data_buff;
  130.           for(i=0;i<8;i++)        //8位,循環(huán)        8次                                                       
  131.           {
  132.                           CANSPI_SCK = 1;
  133.                           
  134.                           _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  135.                           _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  136.                           _nop_(); _nop_(); _nop_();
  137.                           data_buff = data_buff << 1;
  138.                           if(CANSPI_SO)
  139.                                 {data_buff |= 0x01;}
  140.                                 else
  141.                                 {data_buff &= 0xfe;}       
  142.                                 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  143.                                 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  144.                                 _nop_(); _nop_(); _nop_();
  145.                                
  146.                                 CANSPI_SCK = 0;
  147.                                
  148.                                 _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  149.                         //        _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  150.                         //        _nop_(); _nop_(); _nop_();
  151.           }
  152.                 return (data_buff);
  153. }
  154. //========================================================================
  155. // 函數(shù):CAN_COMMAND_OUT(u8 *P)
  156. // 描述:CAN發(fā)送數(shù)據(jù)子程序
  157. // 參數(shù):發(fā)送數(shù)據(jù)首地址指針
  158. // 返回:none;
  159. //========================================================================
  160. void CAN_COMMAND_OUT(u8 *p)
  161. {
  162.                 u8 i;
  163.           CANSPI_CS = 0;
  164.                 for(i=0;i<14;i++)
  165.           {
  166.                    CANSPI_WRITE_BYTE(p[i+1]);  
  167.           }
  168.           CANSPI_CS = 1;
  169.           _nop_();_nop_();_nop_();
  170.           CANSPI_CS = 0;
  171.           CANSPI_WRITE_BYTE(p[15]);
  172.                 CANSPI_CS = 1;
  173. }
  174. //========================================================================
  175. // 函數(shù):CAN_BUS_INIT(u8 *P)
  176. // 描述:CAN初始化子程序
  177. // 參數(shù):發(fā)送數(shù)據(jù)首地址指針
  178. // 返回:none;
  179. //========================================================================
  180. void CAN_BUS_INIT(u8 *p,u8 num)
  181. {
  182.                 u8 i;
  183.           CANSPI_CS = 0;
  184.                 for(i=0;i<num;i++)
  185.           {
  186.                           CANSPI_CS = 0;
  187.                                 CANSPI_WRITE_BYTE(p[i*3]);
  188.                                 CANSPI_WRITE_BYTE(p[(i*3)+1]);
  189.                                 CANSPI_WRITE_BYTE(p[(i*3)+2]);
  190.                                 CANSPI_CS = 1;
  191.           }
  192.                 for(i=0;i<15;i++)
  193.                 {
  194.                                 CAN_READ_BUFF01[i] = 0;
  195.         CAN_READ_BUFF02[i] = 0;   
  196.                 }
  197. }
  198. //========================================================================
  199. // 函數(shù):CL_ERRB()
  200. // 描述:清除錯誤標(biāo)志寄存器
  201. //      每次接收完數(shù)據(jù),執(zhí)行此子程序,清除接收區(qū)
  202. // 參數(shù):
  203. // 返回:none;
  204. //========================================================================
  205. void CL_ERRB()
  206. {
  207.                 CANSPI_CS = 0;
  208.           CANSPI_WRITE_BYTE(COMMAND_BITMDF);
  209.           CANSPI_WRITE_BYTE(EFLG);
  210.           CANSPI_WRITE_BYTE(0xC0);
  211.           CANSPI_WRITE_BYTE(0x00);
  212.           CANSPI_CS = 1;
  213. }
  214. //========================================================================
  215. // 函數(shù):CAN_DATA_CONTRAST(u8 *p)
  216. // 描述:CAN接收數(shù)據(jù)對比子程序
  217. // 參數(shù):接收數(shù)據(jù)存放指針
  218. // 返回:none;
  219. //========================================================================
  220. //void CAN_DATA_CONTRAST(u8 *p)
  221. //{
  222. //               
  223. //}
  224. //========================================================================
  225. // 函數(shù):CAN_RECEIVE_DATA()
  226. // 描述:CAN接收子程序
  227. // 參數(shù):
  228. // 返回:none;
  229. //========================================================================
  230. void CAN_RECEIVE_DATA()
  231. {
  232.                 u8 i,RXIF_DATA;
  233.                 CAN_RS = 0;
  234.     CAN_OK = 0;
  235.           B_R2   = 0;
  236.           CANSPI_CS = 0;
  237.           CANSPI_WRITE_BYTE(COMMAND_READ);
  238.           CANSPI_WRITE_BYTE(CANINTF);
  239.           RXIF_DATA = CANSPI_READ_BYTE();
  240.           CANSPI_CS = 1;
  241.           RXIF_DATA &= 0x03;
  242.           switch(RXIF_DATA)
  243.                 {
  244.                          case 1:
  245.                                             CANSPI_CS = 0;
  246.                                                         CANSPI_WRITE_BYTE(COMMAND_READ_RXB0SIDH);
  247.                                                         for(i=0;i<13;i++)
  248.                                                         {
  249.                                                                         CAN_READ_BUFF01[i] = CANSPI_READ_BYTE();
  250.                                                         }
  251.                                                         CAN_READ_BUFF01[1] &= 0xf0;
  252.                                                         CAN_READ_BUFF01[2] = 0x00;
  253.                                                         CAN_READ_BUFF01[3] = 0x00;
  254.                                                         CANSPI_CS = 1;
  255.                                                        
  256.                                                         if(CAN_READ_BUFF01[0] == 0x2A)
  257.                                                         {                  
  258.                                                                   if((CAN_READ_BUFF01[5] == 0x12)&&
  259.                                                                                  (CAN_READ_BUFF01[6] == 0x34)&&
  260.                                                                            (CAN_READ_BUFF01[7] == 0x56)&&
  261.                                                                            (CAN_READ_BUFF01[8] == 0x78)&&
  262.                                                                            (CAN_READ_BUFF01[9] == 0x90))
  263.                                                                         {
  264.                                                                                         CAN_OK = 1;
  265.                                                                                
  266.                                                                         }
  267.                   CL_ERRB();
  268.                                                         }
  269.                                                         else
  270.                                                         {       
  271.                                                                  if(!B_R2)
  272.                                                                  {
  273.                                                                                  CL_ERRB();
  274.                                                                  }
  275.                                                                  else
  276.                                                                  {
  277.                                                                                  B_R2 = 0;
  278.                                                                            CANSPI_CS = 0;
  279.                                                                            CANSPI_WRITE_BYTE(COMMAND_READ_RXB1SIDH);
  280.                                                                            for(i=0;i<13;i++)
  281.                                                                                  {
  282.                                                                                                 CAN_READ_BUFF02[i] = CANSPI_READ_BYTE();
  283.                                                                                  }
  284.                                                                                  CAN_READ_BUFF02[1] &= 0xf0;
  285.                                                                                  CAN_READ_BUFF02[2] = 0x00;
  286.                                                                                  CAN_READ_BUFF02[3] = 0x00;
  287.                                                                                  CANSPI_CS = 1;
  288.                                                                                  if(CAN_READ_BUFF01[0] == 0x2A)
  289.                                                                                  {
  290.                                                                                                  if((CAN_READ_BUFF02[5] == 0x12)&&
  291.                                                                                                           (CAN_READ_BUFF02[6] == 0x34)&&
  292.                                                                                                           (CAN_READ_BUFF02[7] == 0x56)&&
  293.                                                                                                           (CAN_READ_BUFF02[8] == 0x78)&&
  294.                                                                                                           (CAN_READ_BUFF02[9] == 0x90))
  295.                                                                                                  {
  296.                                                                                                                  CAN_OK = 1;
  297.                                                                                                  }
  298.                                                                                                  CL_ERRB();
  299.                                                                                  }                 
  300.                                                          }
  301.                                                         }
  302.                                                                
  303.                                                         break;
  304.                          case 2:      
  305.                                              B_R2 = 0;
  306.                                                                            CANSPI_CS = 0;
  307.                                                                            CANSPI_WRITE_BYTE(COMMAND_READ_RXB1SIDH);
  308.                                                                            for(i=0;i<13;i++)
  309.                                                                                  {
  310.                                                                                                 CAN_READ_BUFF02[i] = CANSPI_READ_BYTE();
  311.                                                                                  }
  312.                                                                                  CAN_READ_BUFF02[1] &= 0xf0;
  313.                                                                                  CAN_READ_BUFF02[2] = 0x00;
  314.                                                                                  CAN_READ_BUFF02[3] = 0x00;
  315.                                                                                  if(CAN_READ_BUFF02[0] == 0x2A)
  316.                                                                                  {   
  317.                                                                                                  if((CAN_READ_BUFF02[5] == 0x12)&&
  318.                                                                                                           (CAN_READ_BUFF02[6] == 0x34)&&
  319.                                                                                                           (CAN_READ_BUFF02[7] == 0x56)&&
  320.                                                                                                           (CAN_READ_BUFF02[8] == 0x78)&&
  321.                                                                                                           (CAN_READ_BUFF02[9] == 0x90))
  322.                                                                                                  {
  323.                                                                                                                  CAN_OK = 1;
  324.                                                                                                  }
  325.                                                                                                  CL_ERRB();
  326.                                                                                  }
  327.                                                         break;
  328.                          case 3:B_R2 = 1;
  329.                                                         CANSPI_CS = 0;
  330.                                                         for(i=0;i<13;i++)
  331.                                                         {
  332.                                                                         CAN_READ_BUFF01[i] = CANSPI_READ_BYTE();
  333.                                                         }
  334.                                                         CAN_READ_BUFF01[1] &= 0xf0;
  335.                                                         CAN_READ_BUFF01[2] = 0x00;
  336.                                                         CAN_READ_BUFF01[3] = 0x00;
  337.                                                         CANSPI_CS = 1;
  338.                                                         if(CAN_READ_BUFF01[0] == 0x2A)
  339.                                                         {
  340.                                                                         if((CAN_READ_BUFF01[5] == 0x12)&&
  341.                                                                                  (CAN_READ_BUFF01[6] == 0x34)&&
  342.                                                                            (CAN_READ_BUFF01[7] == 0x56)&&
  343.                                                                            (CAN_READ_BUFF01[8] == 0x78)&&
  344.                                                                            (CAN_READ_BUFF01[9] == 0x90))
  345. ……………………

  346. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼


評分

參與人數(shù) 2黑幣 +55 收起 理由
SKYLAR123 + 5 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏6 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:278170 發(fā)表于 2021-4-17 13:52 | 只看該作者
正需要這塊的資料,多謝樓主分享,學(xué)習(xí) .
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧美国产精品一区二区 | 黄色中文字幕 | 成人免费在线电影 | 精品入口麻豆88视频 | 天天搞天天搞 | 一区二区三区在线 | 久久久免费电影 | 午夜男人免费视频 | 亚洲精精品| 成人午夜性成交 | 一级毛片播放 | 欧美一区二区在线观看 | 国产精品久久久久久久久久了 | 偷拍自拍网 | 国产91精品久久久久久久网曝门 | 亚洲欧美一区二区三区在线 | 久久精品二区 | h在线看| 色站综合 | 亚洲精品自拍 | av电影一区二区 | 中文字幕在线精品 | 精品一区在线免费观看 | 成年免费大片黄在线观看岛国 | 国产女人叫床高潮大片免费 | 国产做爰| 激情91| 国产精品免费在线 | 久久亚 | 精品在线免费观看视频 | 亚洲播放 | 中文字幕视频在线观看 | 亚洲二区在线 | 美女视频. | 黄色免费网址大全 | 色婷婷亚洲一区二区三区 | 天天操天天插 | 天天操天天干天天爽 | 成人a免费 | 四虎影院在线播放 | 超碰在线国产 |