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

📄 sja_bcanfunc.lst

📁 单片机C51环境下的CAN通讯程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   SJA_BCANFUNC                                                          12/02/2005 15:25:41 PAGE 1   


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

stmt level    source

   1          #include    "SJA_BCANCONF.H"
   2          #include    <string.h>
   3          
   4          
   5          
   6          
   7          /************************************************************************
   8           *以下为基本的函数说明(BasicCAN)                                       *
   9           ************************************************************************/
  10          
  11          /************************************************************************
  12           *函数原型:  bit   BCAN_CREATE_COMMUNATION(void)                        * 
  13           *参数说明:  无                                                         *
  14           *返回值:                                                               *
  15           *           0 ; 表示SJA1000接口正常                                    *
  16           *           1 ; 表示SJA1000与处理器接口不正常                          *
  17           *                                                                      * 
  18           *说明:该函数用于检测CAN控制器的接口是否正常                            *
  19           ************************************************************************/
  20           bit   BCAN_CREATE_COMMUNATION(void)
  21           {  
  22   1          SJA_BCANAdr=REG_TEST;                     //访问测试寄存器            
  23   1          
  24   1          *SJA_BCANAdr=0xAA;                     //写入测试值
  25   1          if(*SJA_BCANAdr == 0xAA)
  26   1          {
  27   2              return    0;                          //读测试正确
  28   2          }
  29   1          else
  30   1          {    
  31   2             return    1;
  32   2          } 
  33   1       }       
  34          
  35          /************************************************************************
  36           *函数原型:      bit   BCAN_ENTER_RETMODEL(void)                        *
  37           *参数说明:  无                                                         *
  38           *返回值:                                                               *
  39           *           0 ; 表示成功进入复位工作模式                               *
  40           *           1 ; 表示不能进入复位工作模式                               *
  41           *                                                                      * 
  42           *说明:      CAN控制器进入复位工作模式                                  *
  43           ************************************************************************/ 
  44           bit   BCAN_ENTER_RETMODEL(void)
  45           {
  46   1          unsigned   char   TempData;
  47   1          SJA_BCANAdr  = REG_CONTROL;                   //访问地址指向控制寄存器 
  48   1          TempData=  *SJA_BCANAdr;                      //保存原始值
  49   1          *SJA_BCANAdr=(TempData|0x01);                 //置位复位请求
  50   1          if((*SJA_BCANAdr&0x01) == 1)
  51   1          {
  52   2             return   0;
  53   2          }
  54   1          else
  55   1          {
C51 COMPILER V7.06   SJA_BCANFUNC                                                          12/02/2005 15:25:41 PAGE 2   

  56   2             return   1;
  57   2          }
  58   1          
  59   1       }
  60          
  61          /************************************************************************
  62           *函数原型:      bit   BCAN_QUIT_RETMODEL(void)                         *
  63           *参数说明:  无                                                         *
  64           *返回值:                                                               *
  65           *           0 ; 表示成功退出复位工作模式                               *
  66           *           1 ; 表示不能退出复位工作模式                               *
  67           *                                                                      * 
  68           *说明:      CAN控制器退出复位工作模式                                  *
  69           ************************************************************************/ 
  70           bit   BCAN_QUIT_RETMODEL(void)
  71           {
  72   1          unsigned   char   TempData;
  73   1          SJA_BCANAdr = REG_CONTROL;                   //访问地址指向控制寄存器 
  74   1          TempData    = *SJA_BCANAdr;                  //保存原始值
  75   1          *SJA_BCANAdr=(TempData&0xfe);                //清除复位请求
  76   1          if((*SJA_BCANAdr&0x01) == 0)
  77   1          {
  78   2             return   0;                               //
  79   2          }
  80   1          else
  81   1          {
  82   2             return   1;                              //退出成功
  83   2          }
  84   1      
  85   1       }
  86          
  87          /************************************************************************
  88          ;*函数原型:   bit   BCAN_SET_BANDRATE(unsigned char CAN_ByteRate)       *
  89          ;*参数说明:  R7            波特率(Kbit/s) BTR0     BTR1               *
  90          ;*           0              20              053H,    02FH                *
  91          ;*           1              40              087H,    0FFH               *  
  92          ;*           2              50              047H,    02FH                *
  93          ;*           3              80              083H,    0FFH               *  
  94          ;*           4              100             043H,    02FH               *
  95          ;*           5              125             03H,     01CH                *
  96          ;*           6              200             081H,    0FAH                *
  97          ;*           7              250             01H,     01CH               *
  98          ;*           8              400             080H,    0B6H            *
  99          ;*           9              500             00H,     01CH                *
 100          ;*           10             666             080H,    0B6H               *
 101          ;*           11             800             00H,     016H                 *
 102          ;*           12             1000            00H,     014H                  *
 103          ;*返回值:                                                               *
 104          ;*           0 ;波特率设置成功                                          *
 105          ;*           1 ;波特率设置失败                                          *
 106          ;*                                                                      * 
 107          ;*说明:设置CAN控制器SJA1000通讯波特率.SJA1000的晶振为必须为16MHZ,       *
 108          ;*     其它晶体的频率的值的波特率,需自己计算 。该子程序只能用于        *
 109          ;*     复位模式                                                         *  
 110          ;************************************************************************/
 111           bit BCAN_SET_BANDRATE(unsigned char CAN_ByteRate)
 112            {
 113   1          unsigned char BR_num=CAN_ByteRate,BTR0_num,BTR1_num;
 114   1          switch(BR_num)
 115   1           {
 116   2             case     ByteRate_20k:       //20Kb/sd的预设值
 117   2              BTR0_num=0x53;
C51 COMPILER V7.06   SJA_BCANFUNC                                                          12/02/2005 15:25:41 PAGE 3   

 118   2              BTR1_num=0x2F;
 119   2              break; 
 120   2             case     ByteRate_40k:       //40Kb/sd的预设值
 121   2              BTR0_num=0x87;
 122   2              BTR1_num=0xFF;
 123   2              break; 
 124   2             case     ByteRate_50k:       //50Kb/sd的预设值
 125   2              BTR0_num=0x47;
 126   2              BTR1_num=0x2F;
 127   2              break; 
 128   2             case     ByteRate_80k:       //80Kb/sd的预设值
 129   2              BTR0_num=0x83;
 130   2              BTR1_num=0xFF;
 131   2              break; 
 132   2          case     ByteRate_100k:     //100Kb/sd的预设值      
 133   2              BTR0_num=0x43;
 134   2              BTR1_num=0x2F;
 135   2              break; 
 136   2          case     ByteRate_125k:     //125Kb/sd的预设值
 137   2              BTR0_num=0x03;
 138   2              BTR1_num=0x1C;
 139   2              break; 
 140   2          case     ByteRate_200k:     //200Kb/sd的预设值
 141   2              BTR0_num=0x81;
 142   2              BTR1_num=0xFA;
 143   2              break; 
 144   2          case     ByteRate_250k:     //250Kb/sd的预设值
 145   2              BTR0_num=0x01;
 146   2              BTR1_num=0x1C;
 147   2              break; 
 148   2          case     ByteRate_400k:     //400Kb/sd的预设值
 149   2              BTR0_num=0x80;
 150   2              BTR1_num=0xB6;
 151   2              break; 
 152   2          case     ByteRate_500k:     //500Kb/sd的预设值
 153   2              BTR0_num=0x00;
 154   2              BTR1_num=0x1C;
 155   2              break; 
 156   2          case     ByteRate_666k:     //666Kb/sd的预设值
 157   2              BTR0_num=0x80;
 158   2              BTR1_num=0xB6;
 159   2              break; 
 160   2          case     ByteRate_800k:     //800Kb/sd的预设值
 161   2              BTR0_num=0x00;
 162   2              BTR1_num=0x16;
 163   2              break; 
 164   2          case     ByteRate_1000k:        //1000Kb/sd的预设值
 165   2              BTR0_num=0x00;
 166   2              BTR1_num=0x14;
 167   2              break;  
 168   2          default:
 169   2             return 1;                //无此预设波特率值
 170   2          break;
 171   2       }
 172   1        SJA_BCANAdr=REG_BTR0;
 173   1        *SJA_BCANAdr=BTR0_num;
 174   1        if(*SJA_BCANAdr!=BTR0_num)
 175   1          {
 176   2            return 1;
 177   2             }
 178   1        SJA_BCANAdr=REG_BTR1;
 179   1        *SJA_BCANAdr=BTR1_num;
C51 COMPILER V7.06   SJA_BCANFUNC                                                          12/02/2005 15:25:41 PAGE 4   

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

⌨️ 快捷键说明

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