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

📄 can.c

📁 Keil 下编译的基于mcs51单片机的PCA82C250CAN收发器控制的程序源代码。
💻 C
📖 第 1 页 / 共 3 页
字号:
//****************************************************************************
// @Module        CAN
// @Filename      CAN.C
// @Project       
//----------------------------------------------------------------------------
// @Controller    Infineon C505C-2R
//
// @Compiler      Keil
//
// @Codegenerator DAvE 2-0-0
//
// @Description   This file contains all functions that use the CAN peripheral
//                
//
//----------------------------------------------------------------------------
// @Date          2001-2-24 12:51:13
//****************************************************************************

///////////////////////////////////////////////////////////////////////////////
// Author:Li An Chuan                                                        //
// All copyrights for this routine are reserved;Unauthorized down loading or //
// other kinds of copying prohibited!                                        //
///////////////////////////////////////////////////////////////////////////////

//Project includes
#include "MAIN.H"
#include "CAN.H"
#include "PER.H"

//***************************************************************************
// @Global Variables
//***************************************************************************

////////////////////初始化函数/////////////////////////////////////////////////
//****************************************************************************
// @Function      void CAN_vInit(void)
//
//----------------------------------------------------------------------------
// @Description   This function initializes the CAN component. It effects 
//                all necessary configurations of the SFR, depending on 
//                the selected operating mode. The configuration determines 
//                whether the CAN interrupts are to be released and the 
//                priority of the released interrupt.
//
//----------------------------------------------------------------------------
// @Returnvalue   none
//
//----------------------------------------------------------------------------
// @Parameters    none
//
//----------------------------------------------------------------------------
// @Date          01-2-24 12:51:13
//
//****************************************************************************

void CAN_vInit(void) reentrant
{

  //  ------------ CAN Control/Status Register --------------
  //  start the initialization of the CAN Modul
  CR  = 0x41;  // set INIT and CCE
  
  ///  ------------ Bit Timing Register ---------------------
  /// baudrate =  250.000 KBaud
  /// there are 5 time quanta before sample point
  /// there are 4 time quanta after sample point
  /// the (re)synchronization jump width is 2 time quanta
  BTR1  = 0x49;  // set Bit Timing Register
  BTR0  = 0x42; 

  GMS1 = 0x00;  // set Global Mask Short Register 1
  GMS0 = 0x00;  // set Global Mask Short Register 0

  UGML1 = 0xFF;  // set Upper Global Mask Long Register 1
  UGML0 = 0xFF;  // set Upper Global Mask Long Register 0

  LGML1 = 0xFF;  // set Lower Global Mask Long Register 1
  LGML0 = 0xFF;  // set Lower Global Mask Long Register 0

  UMLM1 = 0xFF;  //set last message object Mask Register
  UMLM0 = 0xFF;
  LMLM1 = 0xFF;
  LMLM0 = 0xFF;
 
  //  ------------------------------------------------------------------------
  /// ----------------- Configure Message Object 1 ---------------------------
  //  ------------------------------------------------------------------------
  /// Message object 1 is valid.
  /// disable transmit interrupt
  ///ID=0x01;CVN-101M
  CAN_OBJ[0].MCR1  = 0x55;    // set Message Control Register 1
  CAN_OBJ[0].MCR0  = 0x95;    // set Message Control Register 0;
                              // enable MSGVAL and TXIE
  /// message direction is transmit
  /// standard 11-bit identifier
  /// 8 valid data bytes
  CAN_OBJ[0].MCFG = 0x88;     // set Message Configuration Register
                              //data length 8;transmit direction
  //ID=01;
  CAN_OBJ[0].UAR1  = 0x20;    // set Upper Arbitration Register 1
  CAN_OBJ[0].UAR0  = 0x00;    // set Upper Arbitration Register 0
  CAN_OBJ[0].LAR1  = 0x00;    // set Lower Arbitration Register 1
  CAN_OBJ[0].LAR0  = 0x00;    // set Lower Arbitration Register 0
      
  CAN_OBJ[0].Data[0] = 0x00;   // set data byte 0 
  CAN_OBJ[0].Data[1] = 0x00;   // set data byte 1
  CAN_OBJ[0].Data[2] = 0x00;   // set data byte 2 
  CAN_OBJ[0].Data[3] = 0x00;   // set data byte 3
  CAN_OBJ[0].Data[4] = 0x00;   // set data byte 4 
  CAN_OBJ[0].Data[5] = 0x00;   // set data byte 5
  CAN_OBJ[0].Data[6] = 0x00;   // set data byte 6 
  CAN_OBJ[0].Data[7] = 0x00;   // set data byte 7
  
  //  ------------------------------------------------------------------------
  /// ----------------- Configure Message Object 2 ---------------------------
  //  ------------------------------------------------------------------------
  /// Message object 2 is valid
  /// enable receive interrupt
  CAN_OBJ[1].MCR1  = 0x55;    // set Message Control Register 1
  CAN_OBJ[1].MCR0  = 0x99;    // set Message Control Register 0
                              // enable MSGVAL and RXIE
  /// message direction is receive
  /// standard 11-bit identifier
  CAN_OBJ[1].MCFG = 0x00;     // set Message Configuration Register

  CAN_OBJ[1].UAR1  = 0x40;    // set Upper Arbitration Register 1
  CAN_OBJ[1].UAR0  = 0x00;    // set Upper Arbitration Register 0
  CAN_OBJ[1].LAR1  = 0x00;    // set Lower Arbitration Register 1
  CAN_OBJ[1].LAR0  = 0x00;    // set Lower Arbitration Register 0
                              //ID=0x02.  

  //  ------------------------------------------------------------------------
  /// ----------------- Configure Message Object 3 ---------------------------
   /// message object 3 is not valid
  CAN_OBJ[2].MCR1  = 0x55;    // set Message Control Register 1
  CAN_OBJ[2].MCR0  = 0x95;    // set Message Control Register 0;
                              // enable MSGVAL and TXIE
  /// message direction is transmit
  /// standard 11-bit identifier
  /// 8 valid data bytes
  CAN_OBJ[2].MCFG = 0x88;     // set Message Configuration Register
                              //data length 8;transmit direction
  //ID=03;
  CAN_OBJ[2].UAR1  = 0x60;    // set Upper Arbitration Register 1
  CAN_OBJ[2].UAR0  = 0x00;    // set Upper Arbitration Register 0
  CAN_OBJ[2].LAR1  = 0x00;    // set Lower Arbitration Register 1
  CAN_OBJ[2].LAR0  = 0x00;    // set Lower Arbitration Register 0
      
  CAN_OBJ[2].Data[0] = 0x00;   // set data byte 0 
  CAN_OBJ[2].Data[1] = 0x00;   // set data byte 1
  CAN_OBJ[2].Data[2] = 0x00;   // set data byte 2 
  CAN_OBJ[2].Data[3] = 0x00;   // set data byte 3
  CAN_OBJ[2].Data[4] = 0x00;   // set data byte 4 
  CAN_OBJ[2].Data[5] = 0x00;   // set data byte 5
  CAN_OBJ[2].Data[6] = 0x00;   // set data byte 6 
  CAN_OBJ[2].Data[7] = 0x00;   // set data byte 7

  //  ------------------------------------------------------------------------
  /// ----------------- Configure Message Object 4 ---------------------------
  //  ------------------------------------------------------------------------
   /// message object 4 is not valid
  CAN_OBJ[3].MCR1  = 0x55;    // set Message Control Register 1
  CAN_OBJ[3].MCR0  = 0x95;    // set Message Control Register 0;
                              // enable MSGVAL and TXIE
  /// message direction is transmit
  /// standard 11-bit identifier
  /// 8 valid data bytes
  CAN_OBJ[3].MCFG = 0x88;     // set Message Configuration Register
                              //data length 8;transmit direction
  //ID=04;
  CAN_OBJ[3].UAR1  = 0x80;    // set Upper Arbitration Register 1
  CAN_OBJ[3].UAR0  = 0x00;    // set Upper Arbitration Register 0
  CAN_OBJ[3].LAR1  = 0x00;    // set Lower Arbitration Register 1
  CAN_OBJ[3].LAR0  = 0x00;    // set Lower Arbitration Register 0
      
  CAN_OBJ[3].Data[0] = 0x00;   // set data byte 0 
  CAN_OBJ[3].Data[1] = 0x00;   // set data byte 1
  CAN_OBJ[3].Data[2] = 0x00;   // set data byte 2 
  CAN_OBJ[3].Data[3] = 0x00;   // set data byte 3
  CAN_OBJ[3].Data[4] = 0x00;   // set data byte 4 
  CAN_OBJ[3].Data[5] = 0x00;   // set data byte 5
  CAN_OBJ[3].Data[6] = 0x00;   // set data byte 6 
  CAN_OBJ[3].Data[7] = 0x00;   // set data byte 7
  //  ------------------------------------------------------------------------
  /// ----------------- Configure Message Object 5 ---------------------------
  //  ------------------------------------------------------------------------
   /// message object 5 is not valid
  CAN_OBJ[4].MCR1  = 0x55;    // set Message Control Register 1
  CAN_OBJ[4].MCR0  = 0x95;    // set Message Control Register 0;
                              // enable MSGVAL and TXIE
  /// message direction is transmit
  /// standard 11-bit identifier
  /// 8 valid data bytes
  CAN_OBJ[4].MCFG = 0x88;     // set Message Configuration Register
                              //data length 8;transmit direction
  //ID=05;
  CAN_OBJ[4].UAR1  = 0xa0;    // set Upper Arbitration Register 1
  CAN_OBJ[4].UAR0  = 0x00;    // set Upper Arbitration Register 0
  CAN_OBJ[4].LAR1  = 0x00;    // set Lower Arbitration Register 1
  CAN_OBJ[4].LAR0  = 0x00;    // set Lower Arbitration Register 0
      
  CAN_OBJ[4].Data[0] = 0x00;   // set data byte 0 
  CAN_OBJ[4].Data[1] = 0x00;   // set data byte 1
  CAN_OBJ[4].Data[2] = 0x00;   // set data byte 2 
  CAN_OBJ[4].Data[3] = 0x00;   // set data byte 3
  CAN_OBJ[4].Data[4] = 0x00;   // set data byte 4 
  CAN_OBJ[4].Data[5] = 0x00;   // set data byte 5
  CAN_OBJ[4].Data[6] = 0x00;   // set data byte 6 
  CAN_OBJ[4].Data[7] = 0x00;   // set data byte 7

  //  ------------------------------------------------------------------------
  /// ----------------- Configure Message Object 6 ---------------------------
  //  ------------------------------------------------------------------------
  /// message object 5 is not valid
  CAN_OBJ[5].MCR1  = 0x55;    // set Message Control Register 1
  CAN_OBJ[5].MCR0  = 0x95;    // set Message Control Register 0;
                              // enable MSGVAL and TXIE
  /// message direction is transmit
  /// standard 11-bit identifier
  /// 8 valid data bytes
  CAN_OBJ[5].MCFG = 0x88;     // set Message Configuration Register
                              //data length 8;transmit direction
  //ID=05;
  CAN_OBJ[5].UAR1  = 0xc0;    // set Upper Arbitration Register 1
  CAN_OBJ[5].UAR0  = 0x00;    // set Upper Arbitration Register 0
  CAN_OBJ[5].LAR1  = 0x00;    // set Lower Arbitration Register 1
  CAN_OBJ[5].LAR0  = 0x00;    // set Lower Arbitration Register 0
      
  CAN_OBJ[5].Data[0] = 0x00;   // set data byte 0 
  CAN_OBJ[5].Data[1] = 0x00;   // set data byte 1
  CAN_OBJ[5].Data[2] = 0x00;   // set data byte 2 
  CAN_OBJ[5].Data[3] = 0x00;   // set data byte 3
  CAN_OBJ[5].Data[4] = 0x00;   // set data byte 4 
  CAN_OBJ[5].Data[5] = 0x00;   // set data byte 5
  CAN_OBJ[5].Data[6] = 0x00;   // set data byte 6 
  CAN_OBJ[5].Data[7] = 0x00;   // set data byte 7

  //  ------------------------------------------------------------------------
  /// ----------------- Configure Message Object 7 ---------------------------
   /// message object 7 is not valid
  CAN_OBJ[6].MCR1  = 0x55;    // set Message Control Register 1
  CAN_OBJ[6].MCR0  = 0x55;    // set Message Control Register 0

  //  ------------------------------------------------------------------------
  /// ----------------- Configure Message Object 8 ---------------------------
  //  ------------------------------------------------------------------------
  /// message object 8 is not valid
  CAN_OBJ[7].MCR1  = 0x55;    // set Message Control Register 1
  CAN_OBJ[7].MCR0  = 0x55;    // set Message Control Register 0


  //  ------------------------------------------------------------------------
  /// ----------------- Configure Message Object 9 ---------------------------
  //  ------------------------------------------------------------------------
  /// message object 9 is not valid
  CAN_OBJ[8].MCR1  = 0x55;    // set Message Control Register 1
  CAN_OBJ[8].MCR0  = 0x55;    // set Message Control Register 0


  //  ------------------------------------------------------------------------
  /// ----------------- Configure Message Object 10 ---------------------------
  //  ------------------------------------------------------------------------
  /// message object 10 is not valid
  CAN_OBJ[9].MCR1  = 0x55;    // set Message Control Register 1
  CAN_OBJ[9].MCR0  = 0x55;    // set Message Control Register 0


  //  ------------------------------------------------------------------------
  /// ----------------- Configure Message Object 11 ---------------------------
  //  ------------------------------------------------------------------------
  /// message object 11 is not valid
  CAN_OBJ[10].MCR1  = 0x55;    // set Message Control Register 1
  CAN_OBJ[10].MCR0  = 0x55;    // set Message Control Register 0


  //  ------------------------------------------------------------------------
  /// ----------------- Configure Message Object 12 ---------------------------
  //  ------------------------------------------------------------------------
  /// message object 12 is not valid
  CAN_OBJ[11].MCR1  = 0x55;    // set Message Control Register 1
  CAN_OBJ[11].MCR0  = 0x55;    // set Message Control Register 0


  //  ------------------------------------------------------------------------
  /// ----------------- Configure Message Object 13 ---------------------------
  //  ------------------------------------------------------------------------
  /// message object 13 is not valid
  CAN_OBJ[12].MCR1  = 0x55;    // set Message Control Register 1
  CAN_OBJ[12].MCR0  = 0x55;    // set Message Control Register 0


  //  ------------------------------------------------------------------------
  /// ----------------- Configure Message Object 14 ---------------------------
  //  ------------------------------------------------------------------------
  /// message object 14 is not valid
  CAN_OBJ[13].MCR1  = 0x55;    // set Message Control Register 1
  CAN_OBJ[13].MCR0  = 0x55;    // set Message Control Register 0


  //  ------------------------------------------------------------------------
  /// ----------------- Configure Message Object 15 ---------------------------
  //  ------------------------------------------------------------------------
  /// message object 15 is not valid
  CAN_OBJ[14].MCR1  = 0x55;    // set Message Control Register 1
  CAN_OBJ[14].MCR0  = 0x55;    // set Message Control Register 0


  /// ------------ CAN Control Register ---------------------
  //  reset CCE and INIT
  CR = 0x0a;//set IE of the Control Register.
            //TEST=0;CCE=0;EIE=0;SIE=0;IE=1;INIT=0.
//	CR =0x02; // IE=1;
}

////////////////////////与接收有关的函数/////////////////////////////////////////
//****************************************************************************
// @Function      bit CAN_bNewData(unsigned char ObjNr)
//
//----------------------------------------------------------------------------
// @Description   This function checks whether the selected RECEIVE OBJECT has 
//                received a new message. If so the function returns the 
//                value "1". 
//
//----------------------------------------------------------------------------
// @Returnvalue   1 the message object has received a new message, else 0

⌨️ 快捷键说明

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