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

📄 can1.lst

📁 c8051f040实验程序含CAN SMBUS IIC
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   CAN1                                                                  12/06/2006 11:41:26 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE CAN1
OBJECT MODULE PLACED IN CAN1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe CAN1.c DB OE

line level    source

   1          //------------------------------------------------------------------------------
   2          // CAN1.c
   3          //------------------------------------------------------------------------------
   4          //
   5          //
   6          // DEVICE: C8051F040
   7          //
   8          // AUTHOR: LS
   9          //
  10          // TOOLS:  Keil C-compiler and Silicon Labs IDE
  11          //
  12          //
  13          // CAN1.c and CAN2.c are a simple example of configuring a CAN network to
  14          // transmit and receive data on a CAN network, and how to move information to
  15          // and from CAN RAM message objects.  Each C8051F040-TB CAN node is configured
  16          // to send a message when it's P3.7 button is depressed/released, with a 0x11
  17          // to indicate the button is pushed, and 0x00 when released. Each node also has
  18          // a message object configured to receive messages. The C8051 tests the
  19          // received data and will turn on/off the target board's LED. When one target
  20          // is loaded with CAN2.c and the other is loaded with CAN1.c, one target
  21          // board's push-button will control the other target board's LED, establishing
  22          // a simple control link via the CAN bus and can be observed directly on the
  23          // target boards.
  24          ////////////////////////////////////////////////////////////////////////////////
  25          
  26          ////////////////////////////////////////////////////////////////////////////////
  27          // Includes
  28          ////////////////////////////////////////////////////////////////////////////////
  29          
  30          #include <c8051f040.h>                          // SFR declarations
  31          
  32          // CAN Protocol Register Index for CAN0ADR, from TABLE 18.1 of the C8051F040
  33          // datasheet
  34          ////////////////////////////////////////////////////////////////////////////////
  35          #define CANCTRL            0x00                 //Control Register
  36          #define CANSTAT            0x01                 //Status register
  37          #define ERRCNT             0x02                 //Error Counter Register
  38          #define BITREG             0x03                 //Bit Timing Register
  39          #define INTREG             0x04                 //Interrupt Low Byte Register
  40          #define CANTSTR            0x05                 //Test register
  41          #define BRPEXT             0x06                 //BRP Extension         Register
  42          ////////////////////////////////////////////////////////////////////////////////
  43          //IF1 Interface Registers
  44          ////////////////////////////////////////////////////////////////////////////////
  45          #define IF1CMDRQST         0x08                 //IF1 Command Rest      Register
  46          #define IF1CMDMSK          0x09                 //IF1 Command Mask      Register
  47          #define IF1MSK1            0x0A                 //IF1 Mask1             Register
  48          #define IF1MSK2            0x0B                 //IF1 Mask2             Register
  49          #define IF1ARB1            0x0C                 //IF1 Arbitration 1     Register
  50          #define IF1ARB2            0x0D                 //IF1 Arbitration 2     Register
  51          #define IF1MSGC            0x0E                 //IF1 Message Control   Register
  52          #define IF1DATA1           0x0F                 //IF1 Data A1           Register
  53          #define IF1DATA2           0x10                 //IF1 Data A2           Register
  54          #define IF1DATB1           0x11                 //IF1 Data B1           Register
  55          #define IF1DATB2           0x12                 //IF1 Data B2           Register
C51 COMPILER V7.50   CAN1                                                                  12/06/2006 11:41:26 PAGE 2   

  56          ////////////////////////////////////////////////////////////////////////////////
  57          //IF2 Interface Registers
  58          ////////////////////////////////////////////////////////////////////////////////
  59          #define IF2CMDRQST         0x20                 //IF2 Command Rest      Register
  60          #define IF2CMDMSK          0x21                 //IF2 Command Mask      Register
  61          #define IF2MSK1            0x22                 //IF2 Mask1             Register
  62          #define IF2MSK2            0x23                 //IF2 Mask2             Register
  63          #define IF2ARB1            0x24                 //IF2 Arbitration 1     Register
  64          #define IF2ARB2            0x25                 //IF2 Arbitration 2     Register
  65          #define IF2MSGC            0x26                 //IF2 Message Control   Register
  66          #define IF2DATA1           0x27                 //IF2 Data A1           Register
  67          #define IF2DATA2           0x28                 //IF2 Data A2           Register
  68          #define IF2DATB1           0x29                 //IF2 Data B1           Register
  69          #define IF2DATB2           0x2A                 //IF2 Data B2           Register
  70          ////////////////////////////////////////////////////////////////////////////////
  71          //Message Handler Registers
  72          ////////////////////////////////////////////////////////////////////////////////
  73          #define TRANSREQ1          0x40                 //Transmission Rest1 Register
  74          #define TRANSREQ2          0x41                 //Transmission Rest2 Register
  75          
  76          #define NEWDAT1            0x48                 //New Data 1            Register
  77          #define NEWDAT2            0x49                 //New Data 2            Register
  78          
  79          #define INTPEND1           0x50                 //Interrupt Pending 1   Register
  80          #define INTPEND2           0x51                 //Interrupt Pending 2   Register
  81          
  82          #define MSGVAL1            0x58                 //Message Valid 1       Register
  83          #define MSGVAL2            0x59                 //Message Valid 2       Register
  84          
  85          ////////////////////////////////////////////////////////////////////////////////
  86          //Global Variables
  87          ////////////////////////////////////////////////////////////////////////////////
  88          char MsgNum;
  89          char status;
  90          int i;
  91          int MOTwoIndex = 0;
  92          int MOOneIndex = 0;
  93          int StatusCopy;
  94          int RXbuffer [4];
  95          int TXbuffer [8];
  96          int MsgIntNum;
  97          int Temperature;
  98          sbit BUTTON = P2^0;
  99          sbit BUTTON1= P2^1;
 100          sbit BUTTON2= P2^2;
 101          sbit BUTTON3= P2^3;
 102          sbit LED = P1^6;
 103          sfr16 CAN0DAT = 0xD8;
 104          
 105          
 106          
 107          ////////////////////////////////////////////////////////////////////////////////
 108          // Function PROTOTYPES
 109          ////////////////////////////////////////////////////////////////////////////////
 110          
 111          // Initialize Message Object
 112          void clear_msg_objects (void);
 113          void init_msg_object_TX (char MsgNum);
 114          void init_msg_object_RX (char MsgNum);
 115          void start_CAN (void);
 116          void transmit_turn_LED_ON (char MsgNum);
 117          void transmit_turn_LED_OFF (char MsgNum);
C51 COMPILER V7.50   CAN1                                                                  12/06/2006 11:41:26 PAGE 3   

 118          void receive_data (char MsgNum);
 119          void external_osc (void);
 120          void config_IO (void);
 121          void flash_LED (void);
 122          void test_reg_write (char test);
 123          void stop_CAN (void);
 124          void delay(int tim);
 125          
 126          void delay(int tim)
 127          { int i,j;
 128   1        for(i=0;i<tim;i++)
 129   1        {for(j=0;j<i;j++);}
 130   1      }
 131          
 132          ////////////////////////////////////////////////////////////////////////////////
 133          // MAIN Routine
 134          ////////////////////////////////////////////////////////////////////////////////
 135          void main (void) {
 136   1        char vid;
 137   1        // disable watchdog timer
 138   1        WDTCN = 0xde;
 139   1        WDTCN = 0xad;
 140   1      
 141   1        //configure Port I/O
 142   1        config_IO();
 143   1      
 144   1        // switch to external oscillator
 145   1        external_osc();
 146   1      
 147   1      
 148   1      ////////////////////////////////////////////////////////////////////////////////
 149   1      // Configure CAN communications
 150   1      //
 151   1      // IF1 used for procedures calles by main program
 152   1      // IF2 used for interrupt service procedure receive_data
 153   1      //
 154   1      // Message Object assignments:
 155   1      //  0x02: Used to transmit commands to toggle its LED, arbitration number 1
 156   1      //
 157   1      ////////////////////////////////////////////////////////////////////////////////
 158   1      
 159   1        // Clear CAN RAM
 160   1        clear_msg_objects();
 161   1      
 162   1        // Initialize message object to transmit data
 163   1        init_msg_object_TX (0x02);
 164   1      
 165   1        // Initialize message object to receive data
 166   1        init_msg_object_RX (0x01);
 167   1      
 168   1        // Enable CAN interrupts in CIP-51
 169   1        EIE2 = 0x20;
 170   1      
 171   1        //Function call to start CAN
 172   1        start_CAN();
 173   1      
 174   1        //Global enable 8051 interrupts
 175   1        EA = 1;
 176   1      
 177   1        //Loop and wait for interrupts
 178   1        while (1)
 179   1          {
C51 COMPILER V7.50   CAN1                                                                  12/06/2006 11:41:26 PAGE 4   

 180   2            if(BUTTON==0){delay(500);if(BUTTON==0){
 181   4                                                     if(vid==0){transmit_turn_LED_ON(0x02);vid=1;}
 182   4                                                     else{transmit_turn_LED_OFF(0x02);vid=0;}
 183   4                                                                                         }
 184   3                         }
 185   2            if(BUTTON1==0){delay(500);if(BUTTON1==0){if(vid==0){transmit_turn_LED_ON(0x02);vid=1;}
 186   4                                                         else{transmit_turn_LED_OFF(0x02);vid=0;}
 187   4                                                                                                 }
 188   3                           }
 189   2             if(BUTTON2==0){delay(500);if(BUTTON2==0){if(vid==0){transmit_turn_LED_ON(0x02);vid=1;}
 190   4                                                          else{transmit_turn_LED_OFF(0x02);vid=0;}
 191   4                                                                                                 }
 192   3                           }
 193   2             if(BUTTON3==0){delay(500);if(BUTTON3==0){if(vid==0){transmit_turn_LED_ON(0x02);vid=1;}
 194   4                                                          else{transmit_turn_LED_OFF(0x02);vid=0;}
 195   4                                                                                                  }
 196   3                           }
 197   2          }
 198   1      }
 199          
 200          
 201          ////////////////////////////////////////////////////////////////////////////////
 202          // Set up C8051F040

⌨️ 快捷键说明

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