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

📄 sja_basiccan.lst

📁 参考周立功的basic模式的CAN通讯
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   SJA_BASICCAN                                                          05/11/2006 15:34:24 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE SJA_BASICCAN
OBJECT MODULE PLACED IN SJA_BasicCan.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SJA_BasicCan.c LARGE BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //----------------------------------------------------------------------
   2          // FileName   : SJA_BasicCan.c
   3          // Description: BasicCan 功能实现文件
   4          // DateTime   : 2005-08-31 Create
   5          // Author     : jztx-liuweiming
   6          // Version    : TxCmsPrj Ver1.0
   7          //----------------------------------------------------------------------
   8          // SJA1000, 16M晶振 BasicCan模式, 2005年8月31日调试完成, 参考周立功源代码
   9          // 锦州拓新电力电子公司 刘伟明
  10          //----------------------------------------------------------------------
  11          
  12          /************************************************************************
  13          **描述:    独立的CAN 控制器SJA1000基本硬件头文件定义(BasicCAN 工作方式)
  14          **文件名:   SJA_BcanFunc.H
  15          **应用语言: KEIL C51
  16          **版本 :    V1.0
  17          **广州周立功单片机发展有限公司 保留所有的版权
  18          *************************************************************************/
  19          
  20          #include    "SJA_BasicCan.H"
  21          #include    <string.h>
  22          
  23          /************************************************************************
  24           *以下为基本的函数说明(BasicCAN)                                       *
  25           ************************************************************************/
  26          
  27          /************************************************************************
  28           *函数原型:  bit   BCan_SelfTest(void)                                  * 
  29           *参数说明:  无                                                         *
  30           *返回值:                                                               *
  31           *           0 ; 表示SJA1000接口正常                                    *
  32           *           1 ; 表示SJA1000与处理器接口不正常                          *
  33           *                                                                      * 
  34           *说明: 该函数用于检测CAN控制器的接口是否正常                           *
  35           ************************************************************************/
  36           bit   BCan_SelfTest(void)
  37           {  
  38   1          Sja_BasicCan  = REG_TEST;                //访问测试寄存器          
  39   1          *Sja_BasicCan = 0xAA;                    //写入测试值
  40   1          if ( *Sja_BasicCan == 0xAA )
  41   1          {
  42   2            return    0;                           //读测试正确
  43   2          }
  44   1          else
  45   1          {    
  46   2            return    1;
  47   2          } 
  48   1       }      
  49          
  50          /************************************************************************
  51           *函数原型:      bit   BCan_Enter_RstModel(void)                        *
  52           *参数说明:  无                                                         *
  53           *返回值:                                                               *
  54           *           0 ; 表示成功进入复位工作模式                               *
  55           *           1 ; 表示不能进入复位工作模式                               *
C51 COMPILER V7.06   SJA_BASICCAN                                                          05/11/2006 15:34:24 PAGE 2   

  56           *                                                                      * 
  57           *说明:      CAN控制器进入复位工作模式                                  *
  58           ************************************************************************/ 
  59           bit   BCan_Enter_RstModel(void)
  60           {
  61   1          unsigned   char   TempData;
  62   1          Sja_BasicCan  = REG_CONTROL;                   //访问地址指向控制寄存器 
  63   1          TempData     = *Sja_BasicCan;                  //保存原始值
  64   1          *Sja_BasicCan = (TempData | 0x01);             //置位复位请求
  65   1          if ( (*Sja_BasicCan&0x01) == 1 )
  66   1          {
  67   2            return   0;
  68   2          }
  69   1          else
  70   1          {
  71   2            return   1;
  72   2          }
  73   1       }
  74          
  75          /************************************************************************
  76           *函数原型:      bit   BCan_Quit_RstModel(void)                         *
  77           *参数说明:  无                                                         *
  78           *返回值:                                                               *
  79           *           0 ; 表示成功退出复位工作模式                               *
  80           *           1 ; 表示不能退出复位工作模式                               *
  81           *                                                                      * 
  82           *说明:      CAN控制器退出复位工作模式                                  *
  83           ************************************************************************/ 
  84           bit   BCan_Quit_RstModel(void)
  85           {
  86   1          unsigned   char   TempData;
  87   1          Sja_BasicCan  = REG_CONTROL;                  //访问地址指向控制寄存器 
  88   1          TempData     = *Sja_BasicCan;                 //保存原始值
  89   1          *Sja_BasicCan = (TempData & 0xfe);               //清除复位请求
  90   1          if ( (*Sja_BasicCan&0x01) == 0 )
  91   1          {
  92   2            return   0;                                //退出成功
  93   2          }
  94   1          else
  95   1          {
  96   2            return   1;                                //退出失败
  97   2          }
  98   1       }
  99          
 100          /************************************************************************
 101          ;*函数原型:   bit  BCan_Set_BandRateE(unsigned char CAN_ByteRate)       *
 102          ;*参数说明:  CAN_ByteRate  波特率(Kbit/s) BTR0     BTR1               *
 103          ;*           0              20              053H,    02FH               *
 104          ;*           1              40              087H,    0FFH               *  
 105          ;*           2              50              047H,    02FH               *
 106          ;*           3              80              083H,    0FFH               *
 107          ;*           4              100             043H,    02fH               *
 108          ;*           5              125             03H,     01cH               *
 109          ;*           6              200             081H,    0faH               *
 110          ;*           7              250             01H,     01cH               *
 111          ;*           8              400             080H,    0faH               *
 112          ;*           9              500             00H,     01cH               *
 113          ;*           10             666             080H,    0b6H               *
 114          ;*           11             800             00H,     016H               *
 115          ;*           12             1000            00H,     014H               *
 116          ;*以上设置CAN控制器SJA1000通讯波特率. SJA1000的晶振为必须为16MHZ,       *
 117          ///////////////////////////////////////////////////////////////////////// 
C51 COMPILER V7.06   SJA_BASICCAN                                                          05/11/2006 15:34:24 PAGE 3   

 118          ;*参数说明:  CAN_ByteRate    波特率(Kbit/s) BTR0     BTR1             *
 119          ;*           0              5                 0EFH     0FFH             *
 120          ;*           1              10                0D7H     0FFH             *
 121          ;*           2              20                0CBH     0FFH             *
 122          ;*           3              40                0C5H     0FFH             *
 123          ;*           4              50                0C9H     0A7H             *
 124          ;*           5              80                0C2H     0FFH             *
 125          ;*           6              100               04H      0A7H             *
 126          ;*           7              200               02H      025H             *
 127          ;*           8              250               01H      045H             *
 128          ;*           9              300               01H      025H             *
 129          ;*           10             500               01H      012H             *
 130          ;*           11             600               00H      025H             *
 131          ;*           12             1000              00H      012H             *
 132          ;*                                                                      *
 133          ;*以上设置CAN控制器SJA1000通讯波特率. SJA1000的晶振为必须为12MHZ,       *
 134          ///////////////////////////////////////////////////////////////////////// 
 135          ;*返回值:                                                               *
 136          ;*           0 ;波特率设置成功                                          *
 137          ;*           1 ;波特率设置失败                                          *
 138          ;*                                                                      * 
 139          ;*说明:其它晶体的频率的值的波特率,需自己计算 。该子程序只能用于        *
 140          ;*     复位模式                                                         *  
 141          ;************************************************************************/
 142           
 143          unsigned  char  code    SJA_BTR_CODETAB[]={
 144              0x53,0x2F,                         //;(晶振16MHZ) 20KBPS的预设值
 145              0x87,0xFF,                     //;(晶振16MHZ) 40KBPS的预设值
 146              0x47,0x2F,                     //;(晶振16MHZ) 50KBPS的预设值
 147              0x83,0xFF,                     //;(晶振16MHZ) 80KBPS的预设值
 148              0x43,0x2f,                     //;(晶振16MHZ) 100KBPS的预设值
 149              0x03,0x1c,                     //;(晶振16MHZ) 125KBPS的预设值
 150              0x81,0xfa,                     //;(晶振16MHZ) 200KBPS的预设值
 151              0x01,0x1c,                     //;(晶振16MHZ) 250KBPS的预设值
 152              0x80,0xfa,                     //;(晶振16MHZ) 400KBPS的预设值
 153              0x00,0x1c,                     //;(晶振16MHZ) 500KBPS的预设值
 154              0x80,0xb6,                     //;(晶振16MHZ) 666KBPS的预设值
 155              0x00,0x16,                     //;(晶振16MHZ) 800KBPS的预设值
 156              0x00,0x14                      //;(晶振16MHZ) 1000KBPS的预设值 
 157          };
 158          
 159          bit   BCan_Set_BandRate(unsigned char CAN_ByteRate)
 160          {
 161   1        //载入标准波特率的的预设值
 162   1        unsigned  char  BTR0_num, BTR1_num;
 163   1        BTR0_num = SJA_BTR_CODETAB[CAN_ByteRate*2];
 164   1        BTR1_num = SJA_BTR_CODETAB[CAN_ByteRate*2 + 1];
 165   1        
 166   1        Sja_BasicCan  = REG_BTR0;             //访问地址指向总线定时寄存器0
 167   1        *Sja_BasicCan = BTR0_num;             //写入参数
 168   1        if ( *Sja_BasicCan != BTR0_num )      //校验写入值
 169   1        {
 170   2          return  1; 
 171   2        }
 172   1      
 173   1        Sja_BasicCan  = REG_BTR1;             //访问地址指向总线定时寄存器0
 174   1        *Sja_BasicCan = BTR1_num;             //写入参数
 175   1        if ( *Sja_BasicCan != BTR1_num )      //校验写入值
 176   1        {
 177   2          return  1; 
 178   2        }
 179   1      
C51 COMPILER V7.06   SJA_BASICCAN                                                          05/11/2006 15:34:24 PAGE 4   

 180   1        return    0;
 181   1      }  
 182          
 183          /************************************************************************
 184          ;*函数原型:   bit    BCan_Set_Object(unsigned char  BCAN_ACR,           *
 185                                               unsigned char  BCAN_AMR)           *
 186          *参数说明:                                                              *
 187           *    BCAN_ACR:存放验收代码寄存器(ACR)的参数设置                      *
 188           *    BCAN_AMR:存放接收屏蔽寄存器(AMR)的参数设置                      *
 189          ;*返回值:                                                               *
 190          ;*           0 ;通信对象设置成功                                        *
 191          ;*           1 ;通信对象设置失败                                        *
 192          ;*                                                                      * 
 193          ;*说明:设置CAN节点的通讯对象,允许接收的报文ID号的高8位(D10--D3) 。     *
 194          ;*     允许接收的报文,是由AMR和ACR共同决定的.                           *  
 195          ;*    满足以下条件的ID号的报文才可以被接收                              *
 196          ;*[(ID.10-ID.3)≡(AC.7-AC.0)]||(AM.7-AM.0)≡11111111              *
 197          ;*    该子程序只能用于复位模式                                          * 
 198          ;************************************************************************/
 199          bit BCan_Set_Object(unsigned char  BCAN_ACR, unsigned char  BCAN_AMR)
 200          {

⌨️ 快捷键说明

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