⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 can-demo-1.c

📁 AVR Studio下开发的CAN-232串口通信代码
💻 C
📖 第 1 页 / 共 2 页
字号:
  j+=0x10; for (i=0; i<8; i++) can_dataB[i]= (j+i);
  j+=0x10; for (i=0; i<8; i++) can_dataC[i]= (j+i);
  j+=0x10; for (i=0; i<8; i++) can_dataD[i]= (j+i);
  j+=0x10; for (i=0; i<8; i++) can_dataE[i]= (j+i);

  j =0xF0; for (i=0; i<8; i++) can_dataX[i]= (j+i);
   
  can_tx_MOb0.pt_donne = can_data0;
  can_tx_MOb1.pt_donne = can_data1;
  can_tx_MOb2.pt_donne = can_data2;
  can_tx_MOb3.pt_donne = can_data3;
  can_tx_MOb4.pt_donne = can_data4;
  can_tx_MOb5.pt_donne = can_data5;
  can_tx_MOb6.pt_donne = can_data6;
  can_tx_MOb7.pt_donne = can_data7;
  can_tx_MOb8.pt_donne = can_data8;
  can_tx_MOb9.pt_donne = can_data9;
  can_tx_MObA.pt_donne = can_dataA;
  can_tx_MObB.pt_donne = can_dataB;
  can_tx_MObC.pt_donne = can_dataC;
  can_tx_MObD.pt_donne = can_dataD;
  can_tx_MObE.pt_donne = can_dataE;

  can_rxtxMOb.pt_donne = can_dataX;

  standart_ID =0x0000000; can_tx_MOb0.id.ext = standart_ID;
  extended_ID =0x1DE0001; can_tx_MOb1.id.ext = extended_ID;
  standart_ID+=0x2      ; can_tx_MOb2.id.ext = standart_ID;
  extended_ID+=0x2      ; can_tx_MOb3.id.ext = extended_ID;
  standart_ID+=0x2      ; can_tx_MOb4.id.ext = standart_ID;
  extended_ID+=0x2      ; can_tx_MOb5.id.ext = extended_ID;
  standart_ID+=0x2      ; can_tx_MOb6.id.ext = standart_ID;
  extended_ID+=0x2      ; can_tx_MOb7.id.ext = extended_ID;
  standart_ID+=0x2      ; can_tx_MOb8.id.ext = standart_ID;
  extended_ID+=0x2      ; can_tx_MOb9.id.ext = extended_ID;
  standart_ID+=0x2      ; can_tx_MObA.id.ext = standart_ID;
  extended_ID+=0x2      ; can_tx_MObB.id.ext = extended_ID;
  standart_ID+=0x2      ; can_tx_MObC.id.ext = standart_ID;
  extended_ID+=0x2      ; can_tx_MObD.id.ext = extended_ID;
  standart_ID+=0x2      ; can_tx_MObE.id.ext = standart_ID;

  can_tx_MOb0.ctrl = CONF_NOIDE | CONF_DLC_8;
  can_tx_MOb1.ctrl = CONF_IDE   | CONF_DLC_4;
  can_tx_MOb2.ctrl = CONF_NOIDE | CONF_DLC_8;
  can_tx_MOb3.ctrl = CONF_IDE   | CONF_DLC_4;
  can_tx_MOb4.ctrl = CONF_NOIDE | CONF_DLC_8;
  can_tx_MOb5.ctrl = CONF_IDE   | CONF_DLC_4;
  can_tx_MOb6.ctrl = CONF_NOIDE | CONF_DLC_8;
  can_tx_MOb7.ctrl = CONF_IDE   | CONF_DLC_4;
  can_tx_MOb8.ctrl = CONF_NOIDE | CONF_DLC_8;
  can_tx_MOb9.ctrl = CONF_IDE   | CONF_DLC_4;
  can_tx_MObA.ctrl = CONF_NOIDE | CONF_DLC_8;
  can_tx_MObB.ctrl = CONF_IDE   | CONF_DLC_4;
  can_tx_MObC.ctrl = CONF_NOIDE | CONF_DLC_8;
  can_tx_MObD.ctrl = CONF_IDE   | CONF_DLC_4;
  can_tx_MObE.ctrl = CONF_NOIDE | CONF_DLC_8;
  

/* Clock prescaler Reset & SREG.I Set  */
  CLKPR = 0x80;  CLKPR = 0x00;
  SREG = 0x80;
  
  DDRA=0xFF;
  PORTA=0x00;
  
/*________________________________________*/
/*_____ USART CONFIGURATION ______________*/
/*________________________________________*/

  InitUART_0(UART_BAUD(BAUD_RATE_9600,XTAL_CPU_8)); // Setup the UART 0
  CPrintfUART_0("\r\nFeb 04 -CAN-Demo-1: Tests of CAN.lib routines\r\n");
    
/*________________________________________*/
/*_____ CAN CONTROLLER CONFIGURATION _____*/
/*________________________________________*/

  CAN_CONTROLLER_RESET; 
  RazAllMailbox();

/* Load CAN Timer Prescaler */
  CANTCON = 0xFF;

/* Input Clock of CAN Controller: 8MHz */
  switch (BitRate)
  {
  case 2:
    CanSetBRP  (BitRate_250K[0]);
    CanSetSJW  (BitRate_250K[1]);
    CanSetPRS  (BitRate_250K[2]);
    CanSetPHS2 (BitRate_250K[3]);
    CanSetPHS1 (BitRate_250K[4]);
    break;
  case 1:
    CanSetBRP  (BitRate_500K[0]);
    CanSetSJW  (BitRate_500K[1]);
    CanSetPRS  (BitRate_500K[2]);
    CanSetPHS2 (BitRate_500K[3]);
    CanSetPHS1 (BitRate_500K[4]);
    break;
  case 0: default:
    CanSetBRP  (BitRate_1M[0]);
    CanSetSJW  (BitRate_1M[1]);
    CanSetPRS  (BitRate_1M[2]);
    CanSetPHS2 (BitRate_1M[3]);
    CanSetPHS1 (BitRate_1M[4]);
    break;
  }
  
/* Set SMP */ 
//  CANBT3 = CANBT3 | (1<<SMP);
    
/* Enable all interrupts */ 
  CANGIE=0xFF;    /* with OVRTIM */
//  CANGIE=0xFE;    /* without OVRTIM */
  CANIE2=0xFF; CANIE1=0xFF;
    
/* Enable CAN Controller */ 
  CAN_CONTROLLER_ENABLE; 

/*____________________________________________________________*/
/*__ CONFIGURE THE MESSAGE OBJECTs 0 & 14 TO SEND A MESSAGE __*/
/*____________________________________________________________*/

/* MOb 0 */
    CAN_SET_CHANNEL(CHANNEL_0);
    conf_tx = can_tx_MOb0.ctrl;
    pt_candata_tx = can_tx_MOb0.pt_donne;
    can_tx_id = can_tx_MOb0.id;
    SendCanMsg(); 

/* MOb 1 */
    CAN_SET_CHANNEL(CHANNEL_1);
    conf_tx = can_tx_MOb1.ctrl;
    pt_candata_tx = can_tx_MOb1.pt_donne;
    can_tx_id = can_tx_MOb1.id;
    SendCanMsg(); 

/* MOb 2 */
    CAN_SET_CHANNEL(CHANNEL_2);
    conf_tx = can_tx_MOb2.ctrl;
    pt_candata_tx = can_tx_MOb2.pt_donne;
    can_tx_id = can_tx_MOb2.id;
    SendCanMsg(); 

/* MOb 3 */
    CAN_SET_CHANNEL(CHANNEL_3);
    conf_tx = can_tx_MOb3.ctrl;
    pt_candata_tx = can_tx_MOb3.pt_donne;
    can_tx_id = can_tx_MOb3.id;
    SendCanMsg(); 

/* MOb 4 */
    CAN_SET_CHANNEL(CHANNEL_4);
    conf_tx = can_tx_MOb4.ctrl;
    pt_candata_tx = can_tx_MOb4.pt_donne;
    can_tx_id = can_tx_MOb4.id;
    SendCanMsg(); 

/* MOb 5 */
    CAN_SET_CHANNEL(CHANNEL_5);
    conf_tx = can_tx_MOb5.ctrl;
    pt_candata_tx = can_tx_MOb5.pt_donne;
    can_tx_id = can_tx_MOb5.id;
    SendCanMsg(); 

/* MOb 6 */
    CAN_SET_CHANNEL(CHANNEL_6);
    conf_tx = can_tx_MOb6.ctrl;
    pt_candata_tx = can_tx_MOb6.pt_donne;
    can_tx_id = can_tx_MOb6.id;
    SendCanMsg(); 

/* MOb 7 */
    CAN_SET_CHANNEL(CHANNEL_7);
    conf_tx = can_tx_MOb7.ctrl;
    pt_candata_tx = can_tx_MOb7.pt_donne;
    can_tx_id = can_tx_MOb7.id;
    SendCanMsg(); 

/* MOb 8 */
    CAN_SET_CHANNEL(CHANNEL_8);
    conf_tx = can_tx_MOb8.ctrl;
    pt_candata_tx = can_tx_MOb8.pt_donne;
    can_tx_id = can_tx_MOb8.id;
    SendCanMsg(); 

/* MOb 9 */
    CAN_SET_CHANNEL(CHANNEL_9);
    conf_tx = can_tx_MOb9.ctrl;
    pt_candata_tx = can_tx_MOb9.pt_donne;
    can_tx_id = can_tx_MOb9.id;
    SendCanMsg(); 

/* MOb 10 */
    CAN_SET_CHANNEL(CHANNEL_10);
    conf_tx = can_tx_MObA.ctrl;
    pt_candata_tx = can_tx_MObA.pt_donne;
    can_tx_id = can_tx_MObA.id;
    SendCanMsg(); 

/* MOb 11 */
    CAN_SET_CHANNEL(CHANNEL_11);
    conf_tx = can_tx_MObB.ctrl;
    pt_candata_tx = can_tx_MObB.pt_donne;
    can_tx_id = can_tx_MObB.id;
    SendCanMsg(); 

/* MOb 12 */
    CAN_SET_CHANNEL(CHANNEL_12);
    conf_tx = can_tx_MObC.ctrl;
    pt_candata_tx = can_tx_MObC.pt_donne;
    can_tx_id = can_tx_MObC.id;
    SendCanMsg(); 

/* MOb 13 */
    CAN_SET_CHANNEL(CHANNEL_13);
    conf_tx = can_tx_MObD.ctrl;
    pt_candata_tx = can_tx_MObD.pt_donne;
    can_tx_id = can_tx_MObD.id;
    SendCanMsg(); 

/* MOb 14 */
    CAN_SET_CHANNEL(CHANNEL_14);
    conf_tx = can_tx_MObE.ctrl;
    pt_candata_tx = can_tx_MObE.pt_donne;
    can_tx_id = can_tx_MObE.id;
    SendCanMsg(); 

  while (MOb_Tx_message!=14);  /* wait for the end of all Tx */

  while(TRUE)
  {
  /* Standard reception on MOb 0 */
    CAN_SET_CHANNEL(CHANNEL_0);
    can_rx_filt.ext=0;
    can_rx_msk.ext=0;
    conf_rx = CONF_NOIDE | CONF_MSK_IDE | CONF_NORTR | CONF_DLC_8;
    ConfChannel_Rx();

  /* Extended reception on MOb 1 */
    CAN_SET_CHANNEL(CHANNEL_1);
    can_rx_filt.ext=0;
    can_rx_msk.ext=0;
    conf_rx = CONF_IDE | CONF_MSK_IDE | CONF_NORTR | CONF_DLC_8;
    ConfChannel_Rx();

    while (Rx_message_flag  == FALSE) ; /* Received ? */
      
  /* Get MOb number of the incomming message */
    CAN_SET_CHANNEL(MOb_Rx_message);

  /* Prepare output message if not enougth data ! */
    can_dataX[0] = CANGCON; can_dataX[1] = CANGSTA;
    can_dataX[2] = CANGIT;  can_dataX[3] = CANGIE;
    can_dataX[4] = CANEN2;  can_dataX[5] = CANEN1;
    can_dataX[6] = CANSTMPH;  can_dataX[7] = CANSTMPL;          
     
  /* Read incomming message */
    pt_st_can_rx = & can_rxtxMOb;
    ReadCanMsg (CHANNEL_DISABLE);

  /* Transmit the incomming message on MOb 14 with 8 data */
    CAN_SET_CHANNEL(CHANNEL_14);
    conf_tx= ((can_rxtxMOb.ctrl & (~DLC_msk))| CONF_DLC_8);
    pt_candata_tx = can_rxtxMOb.pt_donne;
    can_tx_id = can_rxtxMOb.id;
    SendCanMsg(); 

 /* Transmit UART message */
    CPrintfUART_0("\r\nUART-0, Message ID: ");
    ID_First = 0; j = 3;
      for (i=0; i<4; i++) 
      { ID_Temp = can_rxtxMOb.id.tab[j];
          UART_Temp = ID_Temp >> 4;
          UART_Temp = 0x30 | UART_Temp;
            if ((UART_Temp == 0x30) & (ID_First == 0)) UART_Temp = 0x20;
              else ID_First = 1;
            if (UART_Temp >= 0x3a) UART_Temp = UART_Temp + 7;
          PutCharUART_0 (UART_Temp);
          UART_Temp = 0x0F & ID_Temp;
          UART_Temp = 0x30 | UART_Temp;
            if ((UART_Temp == 0x30) & (ID_First == 0)) UART_Temp = 0x20;
              else ID_First = 1;
            if (UART_Temp >= 0x3a) UART_Temp = UART_Temp + 7;
          PutCharUART_0 (UART_Temp);
          j--;
      }
    ID_Temp = can_rxtxMOb.id.ext = 0;    /* Reset */

    ID_Temp = CONF_IDE & can_rxtxMOb.ctrl;
      if (ID_Temp == 0)
      { CPrintfUART_0(", CAN 2A (Std)");
      }  
        else
        { CPrintfUART_0(", CAN 2B (Ext)");
      }  
    Rx_message_flag = CLR;
    
  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -