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

📄 ncca-m-01.lst

📁 基于单片机AT89c51ed2的CAN通讯
💻 LST
字号:
C51 COMPILER V7.50   NCCA_M_01                                                             03/25/2008 13:02:22 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE NCCA_M_01
OBJECT MODULE PLACED IN NCCA-M-01.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE NCCA-M-01.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "AT89S8252.H"
   2          #include "absacc.h"
   3          
   4          #define FIFO_LEVEL 16
   5          #define UBYTE unsigned char
   6          
   7          #define SJA_REG_BaseADD 0x0800   
   8          
   9          #define RAM_DATA_IN_BASE  0x000
  10          #define RAM_DATA_OUT_BASE 0x200
  11          #define RAM_PARA_IN_BASE  0x400
  12          #define RAM_PARA_OUT_BASE 0x520
  13          #define RAM_CTRL_AREA_BASE 0x7C0
  14          #define NODEID_ADDR 0x640
  15          #define IN_IO_LENGTH 0x7F0
  16          #define OUT_IO_LENGTH 0x7F6
  17          #define BusStatusAddr 0x7DA 
  18          
  19          #define REG_MOD     XBYTE[SJA_REG_BaseADD + 0x00]//0
  20          #define REG_CMD     XBYTE[SJA_REG_BaseADD + 0x01]//1
  21          #define REG_SR      XBYTE[SJA_REG_BaseADD + 0x02]//2
  22          #define REG_IFR     XBYTE[SJA_REG_BaseADD + 0x03]//3
  23          #define REG_IER     XBYTE[SJA_REG_BaseADD + 0x04]//4
  24          #define REG_BTR0    XBYTE[SJA_REG_BaseADD + 0x06]//6  05 rvd
  25          #define REG_BTR1    XBYTE[SJA_REG_BaseADD + 0x07]//7
  26          #define REG_OCR     XBYTE[SJA_REG_BaseADD + 0x08]//8
  27          #define REG_TEST    XBYTE[SJA_REG_BaseADD + 0x09]//9
  28          #define REG_ALC     XBYTE[SJA_REG_BaseADD + 0x0b]//11 0a rvd
  29          #define REG_ECC     XBYTE[SJA_REG_BaseADD + 0x0c]//12
  30          #define REG_EWLR    XBYTE[SJA_REG_BaseADD + 0x0d]//13
  31          #define REG_RXERR   XBYTE[SJA_REG_BaseADD + 0x0e]//14
  32          #define REG_TXERR   XBYTE[SJA_REG_BaseADD + 0x0f]//15
  33          
  34          #define REG_ACR0 XBYTE[SJA_REG_BaseADD + 0x10]//16
  35          #define REG_ACR1 XBYTE[SJA_REG_BaseADD + 0x11]//17
  36          #define REG_ACR2 XBYTE[SJA_REG_BaseADD + 0x12]//18
  37          #define REG_ACR3 XBYTE[SJA_REG_BaseADD + 0x13]//19
  38          #define REG_AMR0 XBYTE[SJA_REG_BaseADD + 0x14]//20
  39          #define REG_AMR1 XBYTE[SJA_REG_BaseADD + 0x15]//21
  40          #define REG_AMR2 XBYTE[SJA_REG_BaseADD + 0x16]//22
  41          #define REG_AMR3 XBYTE[SJA_REG_BaseADD + 0x17]//23
  42          
  43          #define REG_RxIDBuffer0 XBYTE[SJA_REG_BaseADD + 0x10]//16
  44          #define REG_RxIDBuffer1 XBYTE[SJA_REG_BaseADD + 0x11]//17
  45          #define REG_RxIDBuffer2 XBYTE[SJA_REG_BaseADD + 0x12]//18
  46          #define REG_RxIDBuffer3 XBYTE[SJA_REG_BaseADD + 0x13]//19
  47          #define REG_RxIDBuffer4 XBYTE[SJA_REG_BaseADD + 0x14]//20
  48          //
  49          #define REG_TxIDBuffer0 XBYTE[SJA_REG_BaseADD + 0x10]//16
  50          #define REG_TxIDBuffer1 XBYTE[SJA_REG_BaseADD + 0x11]//17
  51          #define REG_TxIDBuffer2 XBYTE[SJA_REG_BaseADD + 0x12]//18
  52          #define REG_TxIDBuffer3 XBYTE[SJA_REG_BaseADD + 0x13]//19
  53          #define REG_TxIDBuffer4 XBYTE[SJA_REG_BaseADD + 0x14]//20
  54          
  55          #define REG_DataBuffer1 XBYTE[SJA_REG_BaseADD + 0x15]//21
C51 COMPILER V7.50   NCCA_M_01                                                             03/25/2008 13:02:22 PAGE 2   

  56          #define REG_DataBuffer2 XBYTE[SJA_REG_BaseADD + 0x16]//22
  57          #define REG_DataBuffer3 XBYTE[SJA_REG_BaseADD + 0x17]//23
  58          #define REG_DataBuffer4 XBYTE[SJA_REG_BaseADD + 0x18]//24
  59          #define REG_DataBuffer5 XBYTE[SJA_REG_BaseADD + 0x19]//25
  60          #define REG_DataBuffer6 XBYTE[SJA_REG_BaseADD + 0x1a]//26
  61          #define REG_DataBuffer7 XBYTE[SJA_REG_BaseADD + 0x1b]//27
  62          #define REG_DataBuffer8 XBYTE[SJA_REG_BaseADD + 0x1c]//28
  63          //
  64          #define REG_RMC   XBYTE[SJA_REG_BaseADD + 0x1d]//29
  65          #define REG_RBSA  XBYTE[SJA_REG_BaseADD + 0x1e]//30
  66          #define REG_CDR   XBYTE[SJA_REG_BaseADD + 0x1f]//31
  67          
  68          unsigned char xdata _REG_CMD   _at_ 0x801;
  69          unsigned char xdata _REG_SR    _at_ 0x802;
  70          unsigned char xdata _REG_ACR0  _at_ 0x810;
  71          unsigned char xdata _REG_ACR1  _at_ 0x811;
  72          unsigned char xdata _REG_ACR2  _at_ 0x812;
  73          unsigned char xdata _REG_ACR3  _at_ 0x813;
  74          unsigned char xdata _REG_AMR0  _at_ 0x814;
  75          unsigned char xdata _REG_AMR1  _at_ 0x815;
  76          unsigned char xdata _REG_AMR2  _at_ 0x816;
  77          unsigned char xdata _REG_AMR3  _at_ 0x817;
  78          
  79          unsigned char xdata _REG_DataBuffer4  _at_ 0x818;
  80          unsigned char xdata _REG_DataBuffer5  _at_ 0x819;
  81          unsigned char xdata _REG_DataBuffer6  _at_ 0x81a;                       
  82          unsigned char xdata _REG_DataBuffer7  _at_ 0x81b;
  83          unsigned char xdata _REG_DataBuffer8  _at_ 0x81c;
  84          
  85          #define ON 0
  86          #define OFF 1
  87          
  88          sbit SJARst = P1 ^ 1; //SJA1000 reset   
  89          sbit CANComIndicator=P3 ^ 3;   
  90          sbit SPIComIndicator=P1 ^ 3;
  91          sbit ACKM=P1^2;
  92          sbit ACKS=P1^0;
  93          sbit SS=P1^4;
  94          sbit stne=P1^1;
  95          
  96          void SPIComm();
  97          
  98          struct COBIDD
  99          {
 100            unsigned int rvd1               :3;
 101            unsigned int nodeID   :7;
 102            unsigned int FuncCode :4;
 103            unsigned int rvd2         :2;
 104            unsigned int rvd3       ;       
 105          };
 106          
 107          struct sja1000TxIDALL
 108          {
 109            unsigned char TxID3;
 110            unsigned char TxID4;
 111            unsigned char TxID1;
 112            unsigned char TxID2;
 113          };
 114          union canTxIDD
 115          {
 116            struct COBIDD COBID;
 117            struct sja1000TxIDALL all; 
C51 COMPILER V7.50   NCCA_M_01                                                             03/25/2008 13:02:22 PAGE 3   

 118          };
 119          union canTxIDD  canTxID;
 120          
 121          struct sja1000RxIDALL
 122          {
 123            unsigned char RxID3;
 124            unsigned char RxID4;
 125            unsigned char RxID1;
 126            unsigned char RxID2;
 127          };
 128          union canRxIDD
 129          {
 130            struct COBIDD COBID;
 131            struct sja1000RxIDALL all; 
 132          };
 133          union canRxIDD  canRxID;  
 134          unsigned char temp_data1,SRcpy,CANOfflinTime,CANRdata[8],CANSdata[8];
 135          UBYTE i;
 136          UBYTE rdata1[17],sdata[16],Sum,SPIOfflinTime;
 137          
 138          main()
 139          {
 140   1      SPIComIndicator=1;
 141   1      for(i=0;i<16;i++)
 142   1      {
 143   2          sdata[i] = 0;
 144   2          rdata1[i] = 0;
 145   2      }
 146   1      SPCON=0XFE;
 147   1      ACKM=ACKS;
 148   1       SS=0;
 149   1       CANOfflinTime = 0;
 150   1       canTxID.all.TxID1=0;
 151   1       canTxID.all.TxID2=0;
 152   1       canTxID.all.TxID3=0;
 153   1       canTxID.all.TxID4=0;
 154   1       SJARst = 1;
 155   1       for(i = 0;i < 225;i++);
 156   1       SJARst = 0;
 157   1       for(i = 0;i < 225;i++);
 158   1       SJARst = 1;
 159   1       for(i = 0;i < 225;i++);
 160   1       REG_MOD = 0x01; 
 161   1       temp_data1 = REG_MOD;
 162   1       if((temp_data1 & 0x01)!=0) 
 163   1       {
 164   2       REG_MOD  = 0x05;
 165   2       REG_BTR0 = 0x87;
 166   2       REG_BTR1 = 0x0b4; 
 167   2       REG_OCR = 0x1a;
 168   2       REG_CDR = 0xc8; 
 169   2       REG_RBSA = 0x00;
 170   2       REG_ACR0 = 0x0ff;
 171   2       REG_ACR1 = 0x0ff;
 172   2       REG_ACR2 = 0x0ff;
 173   2       REG_ACR3 = 0x0ff;
 174   2       REG_AMR0 = 0x0ff;
 175   2       REG_AMR1 = 0x0ff;
 176   2       REG_AMR2 = 0x0ff;
 177   2       REG_AMR3 = 0x0ff;
 178   2       REG_IER = 0x0b;// enable TIE RIE DOIE
 179   2       }
C51 COMPILER V7.50   NCCA_M_01                                                             03/25/2008 13:02:22 PAGE 4   

 180   1       temp_data1 = REG_MOD;
 181   1       REG_MOD = temp_data1 & 0x0fe; 
 182   1       //_REG_CMD=0x01;
 183   1       
 184   1       EA=1;
 185   1       EX0=1;//enable ex0
 186   1      
 187   1       REG_TxIDBuffer0 = 0x88; //??? ???8  dsp:2no.,99,2,10,0xffffffe
 188   1       REG_TxIDBuffer1 = 0x00;
 189   1       REG_TxIDBuffer2 = 0x01;
 190   1      
 191   1       REG_TxIDBuffer3 = 0x02 ;
 192   1       REG_TxIDBuffer4 = 0x0f0;
 193   1       REG_DataBuffer1 = 0x03;
 194   1       REG_DataBuffer2 = 0x04;
 195   1       REG_DataBuffer3 = 0x05;
 196   1       REG_DataBuffer4 = 0x06;
 197   1       REG_DataBuffer5 = 0x07;
 198   1       REG_DataBuffer6 = 0x08;
 199   1       REG_DataBuffer7 = 0x09;
 200   1       REG_DataBuffer8 = 0x0a;
 201   1      
 202   1       REG_CMD = 0x10;//SelfReceptionRequest
 203   1      
 204   1      for(;;)
 205   1      {
 206   2      
 207   2       SPIComm();
 208   2      }
 209   1      }
 210          
 211          void SPIComm()
 212          {
 213   1              char temp;
 214   1              SPIOfflinTime++;
 215   1              if((ACKM==ACKS)||(SPIOfflinTime==255))
 216   1          {
 217   2                      if(SPIOfflinTime==255)
 218   2                      {
 219   3                              SPIComIndicator=1;
 220   3                      }
 221   2              else
 222   2                      {
 223   3                      SPIComIndicator=0;
 224   3                      }
 225   2      
 226   2                      SPIOfflinTime=0;
 227   2      //              SS=1;
 228   2                      SPDAT =sdata[0];
 229   2                      temp = SPDAT ;
 230   2                      while ((SPSTA & 0x80) == 0);
 231   2                      rdata1[0]=SPDAT;
 232   2      //              SS=0;
 233   2      
 234   2             for(i = 0; i < FIFO_LEVEL; i++)
 235   2                 {
 236   3      //              SS=1;
 237   3                      SPDAT =sdata[i];
 238   3                      while ((SPSTA & 0x80) == 0);
 239   3                      rdata1[i+1]=SPDAT;
 240   3      //              SS=0;
 241   3                 }
C51 COMPILER V7.50   NCCA_M_01                                                             03/25/2008 13:02:22 PAGE 5   

 242   2      
 243   2                 ACKM=!ACKS;
 244   2                 if(rdata1[0]==0x5A)
 245   2             {
 246   3                Sum=0;
 247   3                        for(i=1;i<FIFO_LEVEL-1;i++)
 248   3                        {
 249   4                              Sum += rdata1[i];
 250   4                        }
 251   3      
 252   3                        if((Sum & 0x0ff)==rdata1[FIFO_LEVEL-1])
 253   3                        {
 254   4      
 255   4                        }
 256   3             }
 257   2             sdata[0]=0x5A;
 258   2      
 259   2                 Sum=0;
 260   2             for(i=1;i<FIFO_LEVEL-1;i++)
 261   2                 {
 262   3                        Sum += sdata[i];
 263   3                 }
 264   2                 sdata[FIFO_LEVEL-1]=Sum & 0x0ff;
 265   2           }
 266   1      }
 267          
 268          void EXINT0_isr()  interrupt 0 using 1
 269          {
 270   1        SRcpy = REG_IFR;
 271   1        if(SRcpy & 0x02)
 272   1        {
 273   2              
 274   2       REG_TxIDBuffer0 = 0x88; 
 275   2       REG_TxIDBuffer1 = 0x55;
 276   2       REG_TxIDBuffer2 = 0x55; 
 277   2       REG_TxIDBuffer3 = 0x55;
 278   2       REG_TxIDBuffer4 = 0x50;
 279   2        
 280   2       REG_DataBuffer1 = rdata1[1];
 281   2       REG_DataBuffer2 = rdata1[2];
 282   2       REG_DataBuffer3 = rdata1[3];
 283   2       REG_DataBuffer4 = rdata1[4];
 284   2       REG_DataBuffer5 = rdata1[5];
 285   2       REG_DataBuffer6 = rdata1[6];
 286   2       REG_DataBuffer7 = rdata1[7];
 287   2       REG_DataBuffer8 = rdata1[8];
 288   2       
 289   2        REG_CMD = 0x1;//TransmitionRequest  
 290   2        }
 291   1        
 292   1       if(SRcpy & 0x01)
 293   1       {
 294   2        canRxID.all.RxID1 = REG_RxIDBuffer1;
 295   2        canRxID.all.RxID2 = REG_RxIDBuffer2;
 296   2       
 297   2        canRxID.all.RxID3 = REG_RxIDBuffer3;
 298   2        canRxID.all.RxID4 = REG_RxIDBuffer4;
 299   2      
 300   2       sdata[1] = REG_DataBuffer1;
 301   2       sdata[2] = REG_DataBuffer2;
 302   2       sdata[3] = REG_DataBuffer3;
 303   2       sdata[4] = REG_DataBuffer4;
C51 COMPILER V7.50   NCCA_M_01                                                             03/25/2008 13:02:22 PAGE 6   

 304   2       sdata[5] = REG_DataBuffer5;
 305   2       sdata[6] = REG_DataBuffer6;
 306   2       sdata[7] = REG_DataBuffer7;
 307   2       sdata[8] = REG_DataBuffer8; 
 308   2        
 309   2       CANComIndicator=ON;
 310   2       REG_CMD = 0x4;
 311   2       }
 312   1       else
 313   1       {
 314   2         CANOfflinTime++;
 315   2         if(CANOfflinTime==255)
 316   2         {
 317   3             CANComIndicator=OFF;
 318   3         }
 319   2       }
 320   1         if(SRcpy & 0x08)
 321   1       {
 322   2         REG_CMD = 0x8;
 323   2       }
 324   1      }
 325          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    519    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     63       1
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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