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

📄 sja1000.lst

📁 周立功单片机中关于can总线的驱动设计
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   SJA1000                                                               06/08/2005 22:08:24 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE SJA1000
OBJECT MODULE PLACED IN sja1000.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil20\C51\BIN\C51.EXE sja1000.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //-----------------------函数声明,变量定义--------------------------------------------------------
   2          #include <reg52.h>
   3          sbit  int0 = P3^2;
   4          //-----------------------定义寻址的基址--------------------------------------------------------
   5          #define base_Adr 0x00   
   6          //-----------------------定义总线定时寄存器的值--------------------------------------------------------
   7          #define SJA_BTR0 0x00                                  //该值需要用户根据实际需要的波特率进行计算
   8          #define SJA_BTR1 0x16                                  //具体计算见文章说明
   9          //-----------------------设置接收报文类型(标示符)-------------------------------------------------------
             --
  10                                                                //该值需要用户根据实际需要重新配置
  11          #define SJA_ACR 0x00                                  //验收代码寄存器的值
  12          #define SJA_AMR 0x16                                  //验收屏蔽寄存器的值
  13          //-----------------------设置输出始终类型--------------------------------------------------------
  14                                                                //该值需要用户根据实际需要重新配置
  15          #define SJA_OCR 0x00                                  //输出控制寄存器的值
  16          #define SJA_CDR 0x16                                  //始终分频寄存器的值
  17          //-----------------------设置SJA中断,1为开中断--------------------------------------------------------
  18          #define SJA_OIE 0                                    //溢出中断
  19          #define SJA_EIE 0                                    //错误中断
  20          #define SJA_TIE 0                                    //发送中断
  21          #define SJA_RIE 0                                    //接收中断
  22          //-----------------------定义地址指针,指向基址--------------------------------------------------------
  23          unsigned char xdata *SJA_base_Adr = base_Adr;
  24          //-----------------------定义硬件故障标志位--------------------------------------------------------
  25          bit bdata    connect_OK=0;                            //connect_OK=1设备连接正常
  26                                                                //connect_OK=0设备连接故障
  27          //-----------------------定义硬件故障标志位--------------------------------------------------------
  28          bit bdata    SJA_workmode=1;                          //SJA_workmode=1SJA工作在工作模式
  29                                                                //SJA_workmode=0工作在复位模式
  30          //-----------------------定义SJA1000读写缓冲区的数据结构--------------------------------------------------
             -------
  31          struct BASICCAN_BUFstruct{
  32                         unsigned char FrameID_H;
  33                         unsigned char FrameLENTH ;
  34                                     unsigned char FrameKIND  ;
  35                                     unsigned char FrameID_L3 ;
  36                                     unsigned char Frame_Data[8];
  37                                     }BASICCAN_FRAME,receive_BUF,send_BUF;
  38          //BASICCAN_BUFstruct send_BUF;
  39          //------------------------------------------------------------------------------------------------------
  40          // 函数类别 SJA1000基本操作
  41          // 函数名称 CANREG_write
  42          // 入口函数 SJAREG_ADR,setting
  43          // 出口函数 无
  44          // 函数功能 写SJA1000的寄存器
  45          //------------------------------------------------------------------------------------------------------
  46          void CANREG_write(unsigned char SJAREG_ADR, unsigned char setting)
  47                     {
  48   1                          *(SJA_base_Adr+SJAREG_ADR)=setting;
  49   1                  }
  50          //------------------------------------------------------------------------------------------------------
  51          // 函数类别 SJA1000基本操作
  52          // 函数名称 CANREG_write
  53          // 入口函数 SJAREG_ADR
C51 COMPILER V7.06   SJA1000                                                               06/08/2005 22:08:24 PAGE 2   

  54          // 出口函数 SJAREG_data
  55          // 函数功能 读SJA1000的寄存器
  56          //------------------------------------------------------------------------------------------------------
  57          unsigned char CANREG_read(unsigned char SJAREG_ADR)
  58          {
  59   1      unsigned char SJAREG_data;
  60   1      SJAREG_data=*(SJA_base_Adr+SJAREG_ADR);
  61   1      return(SJAREG_data);
  62   1      }
  63          //------------------------------------------------------------------------------------------------------
  64          // 函数类别   SJA1000基本操作
  65          // 函数名称   SJAconnect_judge
  66          // 入口函数   无
  67          // 出口函数   无
  68          // 全局变量   connect_OK
  69          // 操作寄存器 测试寄存器(地址09)
  70          // 函数功能   判断SJA1000与控制器连接是否正常
  71          //------------------------------------------------------------------------------------------------------
  72          void SJAconnect_judge(void)
  73          {
  74   1         CANREG_write(0x09,0xAA);                //写AA到测试寄存器(地址09)
  75   1         if(CANREG_read(0x09)==0xAA)
  76   1          {
  77   2           connect_OK=1;                         //连接正常 
  78   2           }
  79   1              else 
  80   1              {
  81   2              connect_OK=0;                         //连接故障
  82   2              }  
  83   1      }
  84          
  85          //------------------------------------------------------------------------------------------------------
  86          // 函数类别   SJA1000基本操作
  87          // 函数名称   setting_SJA_resetmode
  88          // 入口函数   无
  89          // 出口函数   无
  90          // 全局变量   SJA_workmode
  91          // 操作寄存器 控制寄存器(地址00)
  92          // 函数功能   设置SJA工作在复位模式
  93          //------------------------------------------------------------------------------------------------------
  94          void setting_SJA_resetmode(void)
  95          {
  96   1      unsigned char CONTROL_REGdata;  
  97   1      CONTROL_REGdata=CANREG_read(0x00);
  98   1      CONTROL_REGdata=CONTROL_REGdata|0x01;
  99   1           CANREG_write(0x00,CONTROL_REGdata);
 100   1           if((CANREG_read(0x00)&0x01)==1) 
 101   1                  {
 102   2               SJA_workmode=0;                        //置复位模式成功
 103   2                      }
 104   1               else 
 105   1                 {
 106   2              SJA_workmode=1;                         //置复位模式失败
 107   2                  }  
 108   1      }
 109          
 110          //------------------------------------------------------------------------------------------------------
 111          // 函数类别   SJA1000基本操作
 112          // 函数名称   setting_SJA_resetmode
 113          // 入口函数   无
 114          // 出口函数   无
 115          // 全局变量   SJA_workmode
C51 COMPILER V7.06   SJA1000                                                               06/08/2005 22:08:24 PAGE 3   

 116          // 操作寄存器 控制寄存器(地址00)
 117          // 函数功能   设置SJA工作在正常工作模式
 118          //------------------------------------------------------------------------------------------------------
 119          void setting_SJA_workingmode(void)
 120          {
 121   1      unsigned char CONTROL_REGdata;  
 122   1      CONTROL_REGdata=CANREG_read(0x00);
 123   1      CONTROL_REGdata=CONTROL_REGdata&0xFE;
 124   1           CANREG_write(0x00,CONTROL_REGdata);
 125   1           if((CANREG_read(0x00)&0x01)==0) 
 126   1                  {
 127   2               SJA_workmode=1;                        //置工作模式成功
 128   2                      }
 129   1               else 
 130   1                 {
 131   2              SJA_workmode=0;                         //置工作模式失败
 132   2                  }  
 133   1      }
 134          //------------------------------------------------------------------------------------------------------
 135          // 函数类别   SJA1000基本操作
 136          // 函数名称   setting_SJA_rate
 137          // 入口函数   SJA_BTR0,SJA_BTR1
 138          // 出口函数   setting_success
 139          // 操作寄存器 总线定时寄存器BTR1(地址07)和BTR0(地址06)
 140          // 函数功能   设置SJA波特率
 141          // 特殊要求   只能在复位工作模式下设置
 142          //------------------------------------------------------------------------------------------------------
 143          bit setting_SJA_rate(void)
 144          {
 145   1      bit setting_success;  
 146   1      while(SJA_workmode)
 147   1            {
 148   2                setting_SJA_resetmode();                   //设置SJA工作在复位模式
 149   2                }
 150   1           CANREG_write(0x06,SJA_BTR0);
 151   1               CANREG_write(0x07,SJA_BTR1);
 152   1           if((CANREG_read(0x06)==SJA_BTR0)&(CANREG_read(0x07)==SJA_BTR1))
 153   1                  {
 154   2               setting_success=1;                        //波特率设置成功
 155   2                      }
 156   1               else 
 157   1                 {
 158   2              setting_success=0;                         //波特率设置失败
 159   2                  }  
 160   1      return(setting_success);
 161   1      }
 162          
 163          //------------------------------------------------------------------------------------------------------
 164          // 函数类别   SJA1000基本操作
 165          // 函数名称   setting_SJA_dataselect
 166          // 入口函数   SJA_ACR,SJA_AMR
 167          // 出口函数   setting_success
 168          // 操作寄存器 验收代码寄存器ACR(地址04)和验收屏蔽寄存器AMR(地址05)
 169          // 函数功能   设置SJA接收数据类型
 170          // 特殊要求   只能在复位工作模式下设置
 171          //------------------------------------------------------------------------------------------------------
 172          bit setting_SJA_dataselect(void)
 173          {
 174   1      bit setting_success;  
 175   1      while(SJA_workmode)
 176   1            {
 177   2                setting_SJA_resetmode();                   //设置SJA工作在复位模式
C51 COMPILER V7.06   SJA1000                                                               06/08/2005 22:08:24 PAGE 4   

 178   2                }
 179   1           CANREG_write(0x04,SJA_ACR);
 180   1               CANREG_write(0x05,SJA_AMR);
 181   1           if((CANREG_read(0x04)==SJA_ACR)&(CANREG_read(0x05)==SJA_AMR))
 182   1                  {
 183   2               setting_success=1;                        //滤波器设置成功
 184   2                      }
 185   1               else 
 186   1                 {
 187   2              setting_success=0;                         //滤波器设置失败
 188   2                  }  
 189   1      return(setting_success);
 190   1      }
 191          
 192          //------------------------------------------------------------------------------------------------------
 193          // 函数类别   SJA1000基本操作
 194          // 函数名称   setting_SJA_CLK
 195          // 入口函数   SJA_OCR,SJA_CDR
 196          // 出口函数   setting_success
 197          // 操作寄存器 输出控制寄存器OCR(地址08)和时钟分频寄存器CDR(地址31)
 198          // 函数功能   设置SJA输出始终类型
 199          // 特殊要求   只能在复位工作模式下设置
 200          //------------------------------------------------------------------------------------------------------
 201          bit setting_SJA_CLK(void)
 202          {
 203   1      bit setting_success;  
 204   1      while(SJA_workmode)
 205   1            {
 206   2                setting_SJA_resetmode();                   //设置SJA工作在复位模式
 207   2                }
 208   1           CANREG_write(0x08,SJA_OCR);
 209   1               CANREG_write(31,SJA_CDR);
 210   1           if((CANREG_read(0x08)==SJA_OCR)&(CANREG_read(31)==SJA_CDR))
 211   1                  {
 212   2               setting_success=1;                        //滤波器设置成功
 213   2                      }
 214   1               else 
 215   1                 {
 216   2              setting_success=0;                         //滤波器设置失败
 217   2                  }  

⌨️ 快捷键说明

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