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

📄 basiccan_final1.lst

📁 设计了一个基于51单片机的CAN节点
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V6.23a  BASICCAN_FINAL1                                                       09/20/2008 12:27:03 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE BASICCAN_FINAL1
OBJECT MODULE PLACED IN basiccan_final1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE basiccan_final1.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg52.h>
   2          #include <string.h>
   3          
   4          #define uchar unsigned char 
   5          #define uint unsigned int 
   6          
   7          #define         SJA_BaseAdr       0xfe00     //定义sja1000的片选基址
   8          
   9          //计算SJA1000在电路中的实际地址:基址+内部寄存器地址
  10          
  11          /************************************************************************
  12           * 以下的定义为SJA1000的内部寄存器的地址,不可修改                      *
  13           *     各寄存器的具体功能清参阅sja1000的数据手册                        *
  14           ************************************************************************/
  15          #define         REG_CONTROL       SJA_BaseAdr+0x00       //内部控制寄存器
  16          #define         REG_COMMAND       SJA_BaseAdr+0x01       //命令寄存器
  17          #define         REG_STATUS        SJA_BaseAdr+0x02       //状态寄存器
  18          #define         REG_INTERRUPT     SJA_BaseAdr+0x03       //中断寄存器
  19          #define         REG_ACR           SJA_BaseAdr+0x04       //验收代码寄存器
  20          #define         REG_AMR           SJA_BaseAdr+0x05       //验收屏蔽寄存器
  21          #define         REG_BTR0          SJA_BaseAdr+0x06       //总线定时寄存器0 
  22          #define         REG_BTR1          SJA_BaseAdr+0x07       //总线定时寄存器1 
  23          #define         REG_OCR           SJA_BaseAdr+0x08       //输出控制寄存器
  24          #define         REG_TEST          SJA_BaseAdr+0x09       //测试寄存器
  25            
  26          //以下为发送缓冲区寄存器定义
  27          
  28          #define         REG_TxBuffer1     SJA_BaseAdr+0x0A         //发送缓冲区1
  29          #define         REG_TxBuffer2     SJA_BaseAdr+0x0B         //发送缓冲区2
  30          #define         REG_TxBuffer3     SJA_BaseAdr+0x0C         //发送缓冲区3
  31          #define         REG_TxBuffer4     SJA_BaseAdr+0x0D         //发送缓冲区4
  32          #define         REG_TxBuffer5     SJA_BaseAdr+0x0E         //发送缓冲区5
  33          #define         REG_TxBuffer6     SJA_BaseAdr+0x0F         //发送缓冲区6
  34          #define         REG_TxBuffer7     SJA_BaseAdr+0x10         //发送缓冲区7
  35          #define         REG_TxBuffer8     SJA_BaseAdr+0x11         //发送缓冲区8
  36          #define         REG_TxBuffer9     SJA_BaseAdr+0x12         //发送缓冲区9
  37          #define         REG_TxBuffer10    SJA_BaseAdr+0x13         //发送缓冲区10
  38          
  39          //以下为接收缓冲区寄存器定义
  40          #define         REG_RxBuffer1     SJA_BaseAdr+0x14         //接收缓冲区1
  41          #define         REG_RxBuffer2     SJA_BaseAdr+0x15         //接收缓冲区2
  42          #define         REG_RxBuffer3     SJA_BaseAdr+0x16         //接收缓冲区3
  43          #define         REG_RxBuffer4     SJA_BaseAdr+0x17         //接收缓冲区4
  44          #define         REG_RxBuffer5     SJA_BaseAdr+0x18         //接收缓冲区5
  45          #define         REG_RxBuffer6     SJA_BaseAdr+0x19         //接收缓冲区6
  46          #define         REG_RxBuffer7     SJA_BaseAdr+0x1A         //接收缓冲区7
  47          #define         REG_RxBuffer8     SJA_BaseAdr+0x1B         //接收缓冲区8
  48          #define         REG_RxBuffer9     SJA_BaseAdr+0x1C         //接收缓冲区9
  49          #define         REG_RxBuffer10    SJA_BaseAdr+0x1D         //接收缓冲区10
  50          
  51          /************************************************************************
  52           *内部地址 01EH 备用                                                    *
  53           ************************************************************************/
  54          
  55          /************************************************************************
C51 COMPILER V6.23a  BASICCAN_FINAL1                                                       09/20/2008 12:27:03 PAGE 2   

  56           *时钟分频寄存器(内部地址01FH)                                          *
  57           ************************************************************************/
  58          #define         REG_CDR           SJA_BaseAdr+0x1F          //时钟分频寄存器
  59          
  60          
  61          uchar xdata  *SJA_BCANAdr;//定义指向片外RAM的指针(SJA1000的基址)
  62          
  63          static uchar data BandRateBuf;//用于保存当前要设置的波特率
  64          
  65          static uchar idata send_data[10];//用于缓存将要发送的数据
  66          
  67          uchar dispbitcode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xBF,
             -0x89,0x8C,0xC7};
  68                     //依次表示0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F,-,H,P,L
  69          
  70                     
  71          uint dispbuf;//
  72          
  73          static uint idata band_rate[13]={20,40,50,80,100,125,200,250,400,500,666,800,1000};//用于显示选择的波特率
  74          
  75          
  76          sbit P20=P2^0;//
  77          sbit P14=P1^4;//
  78          sbit P15=P1^5;//
  79          sbit P17=P1^7;//
  80          sbit ST=P3^0;//
  81          sbit OE=P3^1;//
  82          sbit EOC=P3^3;//
  83          sbit CLK=P3^2;//??
  84          sbit sja=P2^0;
  85          sbit P32=P3^2;
  86          
  87          /************************************************************************
  88           *定义命令字                                                            *
  89           ************************************************************************/ 
  90          #define         TR_CMD           0x01          //发送请求命令
  91          #define         AT_CMD           0x02          //中止发送命令
  92          #define         RRB_CMD          0x04          //释放接收缓冲区
  93          #define         COS_CMD          0x08          //清除超载状态数据溢出
  94          #define         GTS_CMD          0x10          //进入休眠状态命令  
  95          
  96          /************************************************************************
  97           *定义16M的晶体下,CAN总线波特率                                        *
  98           ************************************************************************/
  99          #define         ByteRate_20k      0x00          //波特率20kbps
 100          #define         ByteRate_40k      0x01          //波特率40kbps
 101          #define         ByteRate_50k      0x02          //波特率50kbps
 102          #define         ByteRate_80k      0x03          //波特率80kbps
 103          #define         ByteRate_100k     0x04          //波特率100kbps
 104          #define         ByteRate_125k     0x05          //波特率125kbps
 105          #define         ByteRate_200k     0x06          //波特率200kbps
 106          #define         ByteRate_250k     0x07          //波特率250kbps
 107          #define         ByteRate_400k     0x08          //波特率400kbps
 108          #define         ByteRate_500k     0x09          //波特率500kbps
 109          #define         ByteRate_666k     0x0a          //波特率666kbps
 110          #define         ByteRate_800k     0x0b          //波特率800kbps
 111          #define         ByteRate_1000k    0x0c          //波特率1000kbps
 112          
 113          /*-------------------------------------------------------------------------------------------
 114           *  以下为BASICCAN SJA1000的错误字                                                          *
 115           -------------------------------------------------------------------------------------------*/
 116          #define     CAN_INTERFACE_0K    0                /*SJA1000接口正常                       */
C51 COMPILER V6.23a  BASICCAN_FINAL1                                                       09/20/2008 12:27:03 PAGE 3   

 117          #define     CAN_BUS_0K          0                /*CAN总线工作正常                       */
 118          #define     CAN_INTERFACE_ERR   0XFF             /*SJA1000接口错误?                     */
 119          #define     CAN_ENTRESET_ERR    0XFE             /*SJA1000不能进入复位模式   */
 120          #define     CAN_QUITRESET_ERR   0XFD             /*SJA1000不能退出复位模式       */
 121          #define     CAN_INITOBJECT_ERR  0XFC             /*初始化报文验收滤波器错    */
 122          #define     CAN_INITBTR_ERR     0XFB             /*初始化总线波特率错          */
 123          #define     CAN_INITOUTCTL_ERR  0XFA             /*初始化输出控制错误            */
 124          #define     CAN_INTCLKDIV_ERR   0XF9             /*初始化时钟分频控制器错        */
 125          #define     CAN_BUS_ERR         0XF8             /*SJA1000发送数据错                     */
 126          
 127          
 128          /************************************************************************
 129           *以下为基本的函数说明(BasicCAN)                                       *
 130           ************************************************************************/
 131          
 132          /************************************************************************
 133           *函数原型:  bit   BCAN_CREATE_COMMUNATION(void)                        * 
 134           *参数说明:  无                                                         *
 135           *返回值:                                                               *
 136           *           0 ; 表示SJA1000接口正常                                    *
 137           *           1 ; 表示SJA1000与处理器接口不正常                          *
 138           *                                                                      * 
 139           *说明:该函数用于检测CAN控制器的接口是否正常                            *
 140           ************************************************************************/
 141           bit   BCAN_CREATE_COMMUNATION(void)
 142           {  
 143   1          SJA_BCANAdr=REG_TEST;                     //访问测试寄存器            
 144   1          
 145   1          *SJA_BCANAdr   =0xaa;                     //写入测试值
 146   1          if(*SJA_BCANAdr == 0xaa)
 147   1          {
 148   2              return    0;                          //读测试正确
 149   2          }
 150   1          else
 151   1          {    
 152   2             return    1;
 153   2          } 
 154   1       }       
 155          
 156          /************************************************************************
 157           *函数原型:      bit   BCAN_ENTER_RETMODEL(void)                        *
 158           *参数说明:  无                                                         *
 159           *返回值:                                                               *
 160           *           0 ; 表示成功进入复位工作模式                               *
 161           *           1 ; 表示不能进入复位工作模式                               *
 162           *                                                                      * 
 163           *说明:      CAN控制器进入复位工作模式                                  *
 164           ************************************************************************/ 
 165           bit   BCAN_ENTER_RETMODEL(void)
 166           {
 167   1          uchar   TempData;
 168   1          SJA_BCANAdr  = REG_CONTROL;                   //访问地址指向控制寄存器 
 169   1          TempData=  *SJA_BCANAdr;                      //保存原始值
 170   1          *SJA_BCANAdr=(TempData|0x01);                 //置位复位请求
 171   1          if((*SJA_BCANAdr&0x01) == 1)
 172   1          {
 173   2             return   0;
 174   2          }
 175   1          else
 176   1          {
 177   2             return   1;
 178   2          }
C51 COMPILER V6.23a  BASICCAN_FINAL1                                                       09/20/2008 12:27:03 PAGE 4   

 179   1          
 180   1       }
 181          
 182          /************************************************************************
 183           *函数原型:      bit   BCAN_QUIT_RETMODEL(void)                         *
 184           *参数说明:  无                                                         *
 185           *返回值:                                                               *
 186           *           0 ; 表示成功退出复位工作模式                               *
 187           *           1 ; 表示不能退出复位工作模式                               *
 188           *                                                                      * 
 189           *说明:      CAN控制器退出复位工作模式                                  *
 190           ************************************************************************/ 
 191           bit   BCAN_QUIT_RETMODEL(void)
 192           {
 193   1          uchar   TempData;
 194   1          SJA_BCANAdr = REG_CONTROL;                   //访问地址指向控制寄存器 

⌨️ 快捷键说明

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