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

📄 发送.lst

📁 51系列单片机CAN多点通信C语言源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   发送                                                                  01/15/2009 10:05:20 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 发送
OBJECT MODULE PLACED IN 发送.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 发送.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <c8051f040.h>                          // SFR declarations
   2          
   3          // CAN Protocol Register Index for CAN0ADR, from TABLE 18.1 of the C8051F040
   4          // datasheet
   5          ////////////////////////////////////////////////////////////////////////////////
   6          #define CANCTRL            0x00                 //Control Register
   7          #define CANSTAT            0x01                 //Status register
   8          #define ERRCNT             0x02                 //Error Counter Register
   9          #define BITREG             0x03                 //Bit Timing Register
  10          #define INTREG             0x04                 //Interrupt Low Byte Register
  11          #define CANTSTR            0x05                 //Test register
  12          #define BRPEXT             0x06                 //BRP Extension         Register
  13          ////////////////////////////////////////////////////////////////////////////////
  14          //IF1 Interface Registers
  15          ////////////////////////////////////////////////////////////////////////////////
  16          #define IF1CMDRQST         0x08                 //IF1 Command Rest      Register
  17          #define IF1CMDMSK          0x09                 //IF1 Command Mask      Register
  18          #define IF1MSK1            0x0A                 //IF1 Mask1             Register
  19          #define IF1MSK2            0x0B                 //IF1 Mask2             Register
  20          #define IF1ARB1            0x0C                 //IF1 Arbitration 1     Register
  21          #define IF1ARB2            0x0D                 //IF1 Arbitration 2     Register
  22          #define IF1MSGC            0x0E                 //IF1 Message Control   Register
  23          #define IF1DATA1           0x0F                 //IF1 Data A1           Register
  24          #define IF1DATA2           0x10                 //IF1 Data A2           Register
  25          #define IF1DATB1           0x11                 //IF1 Data B1           Register
  26          #define IF1DATB2           0x12                 //IF1 Data B2           Register
  27          ////////////////////////////////////////////////////////////////////////////////
  28          //IF2 Interface Registers
  29          ////////////////////////////////////////////////////////////////////////////////
  30          #define IF2CMDRQST         0x20                 //IF2 Command Rest      Register
  31          #define IF2CMDMSK          0x21                 //IF2 Command Mask      Register
  32          #define IF2MSK1            0x22                 //IF2 Mask1             Register
  33          #define IF2MSK2            0x23                 //IF2 Mask2             Register
  34          #define IF2ARB1            0x24                 //IF2 Arbitration 1     Register
  35          #define IF2ARB2            0x25                 //IF2 Arbitration 2     Register
  36          #define IF2MSGC            0x26                 //IF2 Message Control   Register
  37          #define IF2DATA1           0x27                 //IF2 Data A1           Register
  38          #define IF2DATA2           0x28                 //IF2 Data A2           Register
  39          #define IF2DATB1           0x29                 //IF2 Data B1           Register
  40          #define IF2DATB2           0x2A                 //IF2 Data B2           Register
  41          ////////////////////////////////////////////////////////////////////////////////
  42          //Message Handler Registers
  43          ////////////////////////////////////////////////////////////////////////////////
  44          #define TRANSREQ1          0x40                 //Transmission Rest1 Register
  45          #define TRANSREQ2          0x41                 //Transmission Rest2 Register
  46          
  47          #define NEWDAT1            0x48                 //New Data 1            Register
  48          #define NEWDAT2            0x49                 //New Data 2            Register
  49          
  50          #define INTPEND1           0x50                 //Interrupt Pending 1   Register
  51          #define INTPEND2           0x51                 //Interrupt Pending 2   Register
  52          
  53          #define MSGVAL1            0x58                 //Message Valid 1       Register
  54          #define MSGVAL2            0x59                 //Message Valid 2       Register
  55          
C51 COMPILER V7.50   发送                                                                  01/15/2009 10:05:20 PAGE 2   

  56          ////////////////////////////////////////////////////////////////////////////////
  57          //Global Variables
  58          ////////////////////////////////////////////////////////////////////////////////
  59           #define uchar unsigned char
  60           uchar sdata[9]={0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x31};//发送缓冲区
  61          char MsgNum;
  62          char status;
  63          int i;
  64          int j;
  65          int MOTwoIndex = 0;
  66          int MOOneIndex = 0;
  67          int StatusCopy;
  68          int RXbuffer [4];
  69          int TXbuffer [8];
  70          int MsgIntNum;
  71          int Temperature;
  72          sbit BUTTON = P2^0;
  73          sbit BUTTON1= P2^1;
  74          sbit BUTTON2= P2^2;
  75          sbit BUTTON3= P2^3;
  76          sbit LED = P1^6;
  77          sfr16 CAN0DAT = 0xD8;
  78          
  79          
  80          
  81          ////////////////////////////////////////////////////////////////////////////////
  82          // Function PROTOTYPES
  83          ////////////////////////////////////////////////////////////////////////////////
  84          
  85          // Initialize Message Object
  86          void clear_msg_objects (void);
  87          void init_msg_object_TX (char MsgNum,int id);
  88          void init_msg_object_RX (char MsgNum);
  89          void start_CAN (void);
  90          void transmit_data(char MsgNum);
  91          void receive_data (char MsgNum);
  92          void external_osc (void);
  93          void config_IO (void);
  94          void delay(int tim);
  95          void uart_init();
  96          void time_init();
  97          
  98          void delay(int tim)
  99          { int i,j;
 100   1        for(i=0;i<tim;i++)
 101   1        {for(j=0;j<i;j++);}
 102   1      }
 103          
 104          ////////////////////////////////////////////////////////////////////////////////
 105          // MAIN Routine
 106          ////////////////////////////////////////////////////////////////////////////////
 107          void main (void) {
 108   1       
 109   1       
 110   1        // disable watchdog timer
 111   1        WDTCN = 0xde;
 112   1        WDTCN = 0xad;
 113   1      
 114   1        //configure Port I/O
 115   1          config_IO();
 116   1              uart_init();
 117   1              time_init();
C51 COMPILER V7.50   发送                                                                  01/15/2009 10:05:20 PAGE 3   

 118   1      
 119   1        // switch to external oscillator
 120   1          external_osc();
 121   1      
 122   1      
 123   1      ////////////////////////////////////////////////////////////////////////////////
 124   1      // Configure CAN communications
 125   1      //
 126   1      // IF1 used for procedures calles by main program
 127   1      // IF2 used for interrupt service procedure receive_data
 128   1      //
 129   1      // Message Object assignments:
 130   1      //  0x02: Used to transmit commands to toggle its LED, arbitration number 1
 131   1      //
 132   1      ////////////////////////////////////////////////////////////////////////////////
 133   1      
 134   1        // Clear CAN RAM
 135   1        clear_msg_objects();
 136   1      
 137   1        // Initialize message object to transmit data
 138   1        init_msg_object_TX (0x02,1);
 139   1      
 140   1        // Initialize message object to receive data
 141   1        init_msg_object_RX (0x01);
 142   1      
 143   1        // Enable CAN interrupts in CIP-51
 144   1        EIE2 = 0x20;
 145   1      
 146   1        //Function call to start CAN
 147   1        start_CAN();
 148   1      
 149   1        //Global enable 8051 interrupts
 150   1        EA = 1;
 151   1        // IE=0x90;
 152   1        //IP=0x00;//uart0中断优先级为低
 153   1        //EIP2=0x20;//can0中断优先级为高
 154   1        //Loop and wait for interrupts
 155   1      
 156   1         while(1)  //循环发送一组数组数据
 157   1         { 
 158   2            for(j=0;j<9;j++)
 159   2                {
 160   3             transmit_data(0x02);
 161   3                 delay(500);    
 162   3                }
 163   2            
 164   2         }
 165   1      
 166   1        
 167   1      }
 168          
 169          
 170          ////////////////////////////////////////////////////////////////////////////////
 171          // Set up C8051F040
 172          ////////////////////////////////////////////////////////////////////////////////
 173          
 174          // Switch to external oscillator
 175          void external_osc (void)//系统晶振配置
 176          {
 177   1        int n;                        // local variable used in delay FOR loop.
 178   1        SFRPAGE = CONFIG_PAGE;        // switch to config page to config oscillator
 179   1        OSCXCN  = 0x77;               // start external oscillator; 22.1 MHz Crystal
C51 COMPILER V7.50   发送                                                                  01/15/2009 10:05:20 PAGE 4   

 180   1                                      // 采用外部时钟且为2分频
 181   1                                      // system clock is 22.1184MHz / 2 = 11.0592 MHz
 182   1        for (n=0;n<255;n++);          // delay about 1ms
 183   1        while ((OSCXCN & 0x80) == 0); // wait for oscillator to stabilize
 184   1        CLKSEL |= 0x01;               // switch to external oscillator
 185   1      }
 186          
 187          void config_IO (void)      // IO口配置
 188          {
 189   1        SFRPAGE  = CONFIG_PAGE;  // Port SFR's on Configuration page
 190   1        XBR3     = 0x80;         // Configure CAN TX pin (CTX) as push-pull digital output
 191   1        P1MDOUT |= 0x40;         // Configure P1.6 as push-pull to drive LED
 192   1        XBR2     = 0x40;         // Enable Crossbar/low ports

⌨️ 快捷键说明

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