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

📄 can.lst

📁 采用sja1000开发can总线的源代码
💻 LST
字号:
C51 COMPILER V3.20,  SN-50203013  CAN                                                      02/18/04  15:50:14  PAGE 1   


DOS C51 COMPILER V3.20, COMPILATION OF MODULE CAN
OBJECT MODULE PLACED IN CAN.OBJ
COMPILER INVOKED BY: D:\C51\C51.EXE CAN.C

stmt level    source

   1          #define BASE_CAN 0x4000
   2          #define CON_REG	 (unsigned char xdata*)(BASE_CAN)/*mode*/
   3          #define CMD_REG	 (unsigned char xdata*)(BASE_CAN+1)
   4          #define STS_REG	 (unsigned char xdata*)(BASE_CAN+2)
   5          #define INT_REG	 (unsigned char xdata*)(BASE_CAN+3)
   6          #define IE_REG   (unsigned char xdata*)(BASE_CAN+4)
   7          #define ACC0_REG (unsigned char xdata*)(BASE_CAN+16)
   8          #define ACC1_REG (unsigned char xdata*)(BASE_CAN+17)
   9          #define ACC2_REG (unsigned char xdata*)(BASE_CAN+18)
  10          #define ACC3_REG (unsigned char xdata*)(BASE_CAN+19)
  11          #define ACM0_REG (unsigned char xdata*)(BASE_CAN+20)
  12          #define ACM1_REG (unsigned char xdata*)(BASE_CAN+21)
  13          #define ACM2_REG (unsigned char xdata*)(BASE_CAN+22)
  14          #define ACM3_REG (unsigned char xdata*)(BASE_CAN+23)
  15          #define BTR0_REG (unsigned char xdata*)(BASE_CAN+6)
  16          #define BTR1_REG (unsigned char xdata*)(BASE_CAN+7)
  17          #define OUT_REG  (unsigned char xdata*)(BASE_CAN+8)
  18          #define TEST_REG (unsigned char xdata*)(BASE_CAN+9)
  19          #define ALC_REG  (unsigned char xdata*)(BASE_CAN+11)
  20          #define ECC_REG  (unsigned char xdata*)(BASE_CAN+12)
  21          #define EWL_REG  (unsigned char xdata*)(BASE_CAN+13)
  22          #define REC_REG  (unsigned char xdata*)(BASE_CAN+14)
  23          #define TEC_REG  (unsigned char xdata*)(BASE_CAN+15)
  24          #define RX_FRAME  (unsigned char xdata*)(BASE_CAN+16)
  25          #define TX_FRAME  (unsigned char xdata*)(BASE_CAN+16)
  26          #define RxMC_REG  (unsigned char xdata*)(BASE_CAN+29)
  27          #define RBSA_REG  (unsigned char xdata*)(BASE_CAN+30)
  28          
  29          #define CLK_REG	 (unsigned char xdata*)(BASE_CAN+31)
  30          #define RX_REG   (unsigned char xdata*)(BASE_CAN+16)
  31          #define TX_REG   (unsigned char xdata*)(BASE_CAN+16)
  32          
  33          
  34          #include "REG51.h"
  35          #include </C51/string.h>
  36          #include </C51/intrins.h>
  37          #include "can.h"
  38          #include "sio.h"
  39          
  40          
  41          
  42          MSG_BUF can_in;
  43          MSG_BUF can_out;
  44          
  45          unsigned char bdata sts;
  46          sbit rdy=sts^0;
  47          sbit ovr=sts^1;
  48          sbit tbs=sts^2;
  49          sbit tcs=sts^3;
  50          sbit rs=sts^4;
  51          sbit ts=sts^5;
  52          sbit es=sts^6;
  53          sbit bs=sts^7;
  54          
  55          unsigned char bdata int_;
C51 COMPILER V3.20,  SN-50203013  CAN                                                      02/18/04  15:50:14  PAGE 2   

  56          sbit int_ri=int_^0;
  57          sbit int_ti=int_^1;
  58          sbit int_ei=int_^2;
  59          sbit int_oi=int_^3;
  60          sbit int_wi=int_^4;
  61          
  62          static void can_isr (void) interrupt 0 using 3
  63          {
  64   1      unsigned char  i,len;
  65   1      unsigned int id;
  66   1      EA=0;
  67   1      //sts=*(STS_REG);
  68   1      int_=*(INT_REG);
  69   1      if(int_ri)
  70   1      	{
  71   2      		i=(*(RX_REG))&0x0f;
  72   2      		len=i<8?i:8;
  73   2      		id=*(RX_REG+1);
  74   2      		id<<=8;
  75   2      		id|=*(RX_REG+2);
  76   2      		id>>=5;
  77   2      		can_in.ID=id;
  78   2       		can_in.LEN=i;
  79   2      	        for (i=0; i < len; i++)
  80   2          	        (can_in.BUF[i]) = *(RX_REG+i+3); // copy bytes 
  81   2      		clr_rxbuf();
  82   2      //                SBUF = can_in.BUF[0];
  83   2                      SBUF = can_in.ID;
  84   2      	}
  85   1      EA=1;
  86   1      }
  87          
  88          void can_init (void)
  89          {
  90   1         EA = 0;
  91   1         *(CON_REG)  = 0x01;
  92   1         *(CLK_REG)  = 0x88;//PeliCAN mode clock off
  93   1         *(ACC0_REG)  = 0x0;
  94   1         *(ACC1_REG)  = 0x70;
  95   1         *(ACC2_REG)  = 0x0;
  96   1         *(ACC3_REG)  = 0x70;
  97   1         *(ACM0_REG)  = 0xBF;
  98   1         *(ACM1_REG)  = 0xFF;
  99   1         *(ACM2_REG)  = 0xBF;
 100   1         *(ACM3_REG)  = 0xFF;
 101   1         *(IE_REG)    = 0x01;
 102   1         *(BTR0_REG) = 0x1;
 103   1         *(BTR1_REG) = 0x1C;
 104   1         *(OUT_REG)  = 0xAA;
 105   1         *(RBSA_REG) = 0x0;
 106   1         *(CON_REG)  = 0x00;
 107   1         IT0 = 0;
 108   1         EX0 = 1;
 109   1         PX0 = 1;
 110   1         EA  = 1;
 111   1      //   while ((*(STS_REG)) & 0x80);//wait until controller is active
 112   1      }
 113          
 114          void clr_rxbuf()
 115          {
 116   1        *(CMD_REG)=0x04;
 117   1      }
C51 COMPILER V3.20,  SN-50203013  CAN                                                      02/18/04  15:50:14  PAGE 3   

 118          
 119          //void clr_ovr()
 120          //{
 121          //()*(CMD_REG)=0x08;
 122          //}
 123          
 124          //void go_sleep()
 125          //{
 126          //()*(CMD_REG)=0x10;
 127          //}
 128          
 129          //void req_tx()
 130          //{
 131          //()*(CMD_REG)=0x01;
 132          //}
 133          
 134          //void stop_tx()
 135          //{
 136          //()*(CMD_REG)=0x02;
 137          //}
 138          
 139          //unsigned char check_busoff_state (void)
 140          //{
 141          // Check status register for bus-off state 
 142          //   if ((*(STS_REG)) & 0x80)
 143          //      return (0xFF);	            // CAN controller is in bus-off 
 144          //   else
 145          //      return (0);                   // CAN controller active 
 146          //}
 147          
 148          //a example ,can_rxbuf---->rs232c txbuf
 149          
 150          //char can_getmsg (void)
 151          //{
 152          
 153          //}   
 154          
 155          
 156          
 157          //unsigned char can_rbuflen (void)
 158          //{
 159          //}
 160          
 161          
 162          
 163          void transmit_message ( MSG_BUF *pTransmitBuf )
 164          {
 165   1      unsigned long Identifier;                   // CAN message identifier 
 166   1      unsigned char  Length;                       // lenght of data frame 
 167   1      unsigned char  i;                            // local loop counter 
 168   1      
 169   1      // Prepare length code and identifier.                                 
 170   1         Length     = pTransmitBuf->LEN<8 ?pTransmitBuf->LEN :8;
 171   1         Identifier = (pTransmitBuf->ID << 5);
 172   1      
 173   1      // Wait until write access to CAN controller buffer is allowed          
 174   1         while ( !((*(STS_REG)) & 0x04) );
 175   1      
 176   1      // Write message to transmit buffer                                     
 177   1      
 178   1        
 179   1         *(TX_REG) = (unsigned char)Length;
C51 COMPILER V3.20,  SN-50203013  CAN                                                      02/18/04  15:50:14  PAGE 4   

 180   1         *(TX_REG+2)= (unsigned char)Identifier;       // write identifier 
 181   1         *(TX_REG+1)= (unsigned char)(Identifier >> 8);       // write identifier 
 182   1         for (i=0; i < Length; i++)       // write data bytes 
 183   1            *(TX_REG+3+i) = *(unsigned char *)(pTransmitBuf->BUF+i); // copy data byte  
 184   1      
 185   1      // Init a transmission request.                                         
 186   1         *(CMD_REG)  = 0x01;
 187   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    340    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     28       5
   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 + -