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

📄 sja1000.lst

📁 基于C51的现场总线CAN转串口RS232的源码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.01   SJA1000                                                               04/22/2008 17:46:16 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE SJA1000
OBJECT MODULE PLACED IN SJA1000.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE SJA1000.C COMPACT BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          #include "STC89C51RC_RD_PLUS.H"
   3          #include  <absacc.h>       //用到XBYTE
   4          #include <intrins.h>       //用到_nop_();
   5          
   6          
   7          
   8          //宏定义
   9          #define TRUE  1
  10          #define FALSE 0
  11          
  12          
  13          #define CAN_MODE_BASICCAN  0
  14          #define CAN_MODE_PELICAN   1
  15          #define CAN_CONF_TIMEOUT   10   //10ms
  16          
  17          
  18          #define CAN_MODE CAN_MODE_PELICAN    //第一步设置CAN_MODE,选择BasicCan,还是PeliCan? 
  19          
  20          
  21          #define CAN_CONTROL_SET_BAUDRATE  100       //在CAN_Control函数中用到
  22          #define CAN_CONTROL_SET_ACR       101 
  23          #define CAN_CONTROL_SET_AMR       102  
  24          #define CAN_CONTROL_SET_SLEEP     103 
  25          
  26          
  27          //STC内部EEPROM使用有关的宏定义
  28          #define ISP_Byte_Read 1       
  29          #define ISP_Byte_Program 2 
  30          #define ISP_Sector_Erase 3
  31          #define Wait_Time 2;          //    3 对应5M时钟 , 2 对应10M时钟 ,1 对应20M时钟, 0 对应40M时钟 
  32          #define SECTOR1_BTR0_H   0x20  //第一扇区首地址,存放BTR0     注意不同的STC单片机首地址不一样。
  33          #define SECTOR1_BTR0_L   0x00
  34          #define SECTOR1_BTR1_H   0x20  //第一扇区第二个地址,存放BTR1
  35          #define SECTOR1_BTR1_L   0x01
  36          #define SECTOR2_ACR0_H   0x22  //第二扇区首地址,    存放ACR0    
  37          #define SECTOR2_ACR0_L   0x00
  38          #define SECTOR2_ACR1_H   0x22  //第二扇区第二个地址,存放ACR1
  39          #define SECTOR2_ACR1_L   0x01
  40          #define SECTOR2_ACR2_H   0x22  //第二扇区第三个地址,存放ACR2    
  41          #define SECTOR2_ACR2_L   0x02
  42          #define SECTOR2_ACR3_H   0x22  //第二扇区第四个地址,存放ACR3
  43          #define SECTOR2_ACR3_L   0x03
  44          #define SECTOR3_AMR0_H   0x24  //第三扇区首地址,   存放AMR0     
  45          #define SECTOR3_AMR0_L   0x00
  46          #define SECTOR3_AMR1_H   0x24  //第三扇区第二个地址,存放AMR1
  47          #define SECTOR3_AMR1_L   0x01
  48          #define SECTOR3_AMR2_H   0x24  //第三扇区第三个地址,存放AMR2    
  49          #define SECTOR3_AMR2_L   0x02
  50          #define SECTOR3_AMR3_H   0x24  //第三扇区第四个地址,存放AMR3
  51          #define SECTOR3_AMR3_L   0x03
  52          
  53          
  54          
  55          #define RX_BUFF_LEN 32  // CAN接收缓冲区大小
C51 COMPILER V8.01   SJA1000                                                               04/22/2008 17:46:16 PAGE 2   

  56          #define TX_BUFF_LEN 32  // CAN发送缓冲区大小
  57          
  58          
  59          //CAN用到的缓冲区
  60          unsigned char idata RX_BUFF[RX_BUFF_LEN];          // 接收缓冲区    0~RX_BUFF_LEN-1
  61          unsigned char idata TX_BUFF[TX_BUFF_LEN];          // 发送缓冲区    0~TX_BUFF_LEN-1
  62          
  63          unsigned int idata TX_Buff_Head = 0;  // 头指针,写入
  64          unsigned int idata TX_Buff_Tail = 0;  // 尾指针,读出
  65          unsigned int idata RX_Buff_Head = 0;  // 
  66          unsigned int idata RX_Buff_Tail = 0;  //
  67           
  68          //UART用到的缓冲区
  69          #define UART_RX_Buff_LEN  24
  70          #define UART_TX_Buff_LEN  24
  71          unsigned char idata UART_RX_Buff[UART_RX_Buff_LEN];          // 接收缓冲区
  72          unsigned char idata UART_TX_Buff[UART_TX_Buff_LEN];          // 发送缓冲区
  73          
  74          
  75          unsigned int idata UART_RX_Buff_Head = 0;  // 头指针,写入
  76          unsigned int idata UART_RX_Buff_Tail = 0;  // 尾指针,读出
  77          unsigned int idata UART_TX_Buff_Head = 0;  // 
  78          unsigned int idata UART_TX_Buff_Tail = 0;  // 
  79          
  80          
  81          
  82          
  83          
  84          #define SJA_REG_BaseADD  0x1000        //这么选择的原因?   P2^6=1? 应该与片选有关
  85          
  86          #define REG_MODE        XBYTE[SJA_REG_BaseADD + 0x00]    //内部控制寄存器
  87          #define REG_CMR         XBYTE[SJA_REG_BaseADD + 0x01]     //命令寄存器
  88          #define REG_SR          XBYTE[SJA_REG_BaseADD + 0x02]      //状态寄存器
  89          #define REG_IR          XBYTE[SJA_REG_BaseADD + 0x03]      //中断寄存器
  90          #define REG_IR_ABLE XBYTE[SJA_REG_BaseADD + 0x04]  //中断使能寄存器
  91          //05保留   不用管
  92          #define REG_BTR0        XBYTE[SJA_REG_BaseADD + 0x06]     //总线定时寄存器0 
  93          #define REG_BTR1        XBYTE[SJA_REG_BaseADD + 0x07]     //总线定时寄存器1 
  94          #define REG_OCR         XBYTE[SJA_REG_BaseADD + 0x08]      //输出控制寄存器
  95          #define REG_TEST        XBYTE[SJA_REG_BaseADD + 0x09]     //测试寄存器
  96          //0a保留   不用管
  97          #define REG_ALC         XBYTE[SJA_REG_BaseADD + 0x0b]     //仲裁丢失捕捉寄存器
  98          #define REG_ECC         XBYTE[SJA_REG_BaseADD + 0x0c]     //错误代码捕捉寄存器
  99          #define REG_EMLR        XBYTE[SJA_REG_BaseADD + 0x0d]    //错误报警限制寄存器
 100          #define REG_RXERR       XBYTE[SJA_REG_BaseADD + 0x0e]   //RX 错误计数寄存器
 101          #define REG_TXERR       XBYTE[SJA_REG_BaseADD + 0x0f]   //TX 错误计数寄存器
 102          
 103          #define REG_ACR0        XBYTE[SJA_REG_BaseADD + 0x10]
 104          #define REG_ACR1        XBYTE[SJA_REG_BaseADD + 0x11]
 105          #define REG_ACR2        XBYTE[SJA_REG_BaseADD + 0x12]
 106          #define REG_ACR3        XBYTE[SJA_REG_BaseADD + 0x13]
 107          #define REG_AMR0        XBYTE[SJA_REG_BaseADD + 0x14]
 108          #define REG_AMR1        XBYTE[SJA_REG_BaseADD + 0x15]
 109          #define REG_AMR2        XBYTE[SJA_REG_BaseADD + 0x16]
 110          #define REG_AMR3        XBYTE[SJA_REG_BaseADD + 0x17]
 111          
 112          #define REG_RxBuffer0 XBYTE[SJA_REG_BaseADD + 0x10]
 113          #define REG_RxBuffer1 XBYTE[SJA_REG_BaseADD + 0x11]     
 114          #define REG_RxBuffer2 XBYTE[SJA_REG_BaseADD + 0x12]
 115          #define REG_RxBuffer3 XBYTE[SJA_REG_BaseADD + 0x13]
 116          #define REG_RxBuffer4 XBYTE[SJA_REG_BaseADD + 0x14]
 117          
C51 COMPILER V8.01   SJA1000                                                               04/22/2008 17:46:16 PAGE 3   

 118          #define REG_TxBuffer0 XBYTE[SJA_REG_BaseADD + 0x10]
 119          #define REG_TxBuffer1 XBYTE[SJA_REG_BaseADD + 0x11]
 120          #define REG_TxBuffer2 XBYTE[SJA_REG_BaseADD + 0x12]
 121          #define REG_TxBuffer3 XBYTE[SJA_REG_BaseADD + 0x13]
 122          #define REG_TxBuffer4 XBYTE[SJA_REG_BaseADD + 0x14]
 123          
 124          #define REG_DataBuffer1 XBYTE[SJA_REG_BaseADD + 0x15]
 125          #define REG_DataBuffer2 XBYTE[SJA_REG_BaseADD + 0x16]
 126          #define REG_DataBuffer3 XBYTE[SJA_REG_BaseADD + 0x17]
 127          #define REG_DataBuffer4 XBYTE[SJA_REG_BaseADD + 0x18]
 128          #define REG_DataBuffer5 XBYTE[SJA_REG_BaseADD + 0x19]
 129          #define REG_DataBuffer6 XBYTE[SJA_REG_BaseADD + 0x1a]
 130          #define REG_DataBuffer7 XBYTE[SJA_REG_BaseADD + 0x1b]
 131          #define REG_DataBuffer8 XBYTE[SJA_REG_BaseADD + 0x1c]
 132          
 133          
 134          #define REG_RBSA                XBYTE[SJA_REG_BaseADD + 0x1e]        //RX缓冲器起始地址寄存器
 135          #define REG_CDR                 XBYTE[SJA_REG_BaseADD + 0x1f]         //时钟分频寄存器
 136          #define REG_Receive_Counter XBYTE[SJA_REG_BaseADD + 0x1d]  //RX信息计数器(RMC)
 137          
 138          
 139          
 140          
 141          sbit CAN_RST = P4^0; //复位控制 
 142          sbit CAN_INT= P3^2; //中断脚
 143          
 144          struct CAN_CANConfig {
 145                  unsigned char Mode;      //bit0: 0:basicCAN 1:peleican
 146                                           //bit1: 0: 双滤波  1:单滤波 
 147                                                                   //bit2: 0: 标准帧  1:扩展帧    
 148                  unsigned char BTR0;  //波特率
 149                  unsigned char BTR1;  //波特率
 150          
 151                  unsigned char ACR0;  //验收代码
 152                  unsigned char ACR1;  //验收代码
 153                  unsigned char ACR2;  //验收代码
 154                  unsigned char ACR3;  //验收代码
 155          
 156                  unsigned char AMR0;  //屏蔽代码
 157                  unsigned char AMR1;  //屏蔽代码
 158                  unsigned char AMR2;  //屏蔽代码
 159                  unsigned char AMR3;  //屏蔽代码
 160          
 161                  unsigned char EFF0;   //发送识别码,标准帧只用前两个
 162                  unsigned char EFF1;   //发送识别码,标准帧只用前两个
 163                  unsigned char EFF2;   //发送识别码,标准帧只用前两个
 164                  unsigned char EFF3;   //发送识别码,标准帧只用前两个
 165          };
 166          
 167          
 168          struct CAN_CANConfig CANConfig;
 169          
 170          #define  RESET_SJA1000()  {CAN_RST = 0; _nop_(); CAN_RST = 1;}  
 171          #define  ON_CAN_INT()  {EX0 = 1;}
 172          #define  OFF_CAN_INT() {EX0 = 0;}
 173          
 174          //函数声明
 175          
 176          bit send(unsigned char S_Data);
 177          
 178          
 179          bit Serial(void);
C51 COMPILER V8.01   SJA1000                                                               04/22/2008 17:46:16 PAGE 4   

 180          void Delay1ms(unsigned int i);
 181          
 182          
 183          bit CAN_Init(void);
 184          
 185          /*
 186          unsigned char EEPROM_Read(unsigned char AddrH,unsigned char AddrL);
 187          void EEPROM_Write(unsigned char AddrH,unsigned char AddrL,unsigned char Data);
 188          void Sector_Erase(unsigned char AddrH,unsigned char AddrL);
 189          */
 190          
 191          
 192          /******************************************************************             
 193                  延时1ms
 194          
 195          */
 196          void Delay(unsigned int i) 
 197          {
 198   1              while (i--)
 199   1              {
 200   2              };
 201   1      }
 202          
 203          /*
 204          
 205          返回实际读取到的数据
 206           */
 207          

⌨️ 快捷键说明

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