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

📄 sja1000_peli.lst

📁 CAN总线通信程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   SJA1000_PELI                                                          03/08/2008 11:03:48 PAGE 1   


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

stmt level    source

   1          #include <AT89x51.h>
   2          #include "SJA1000_PELI.h"
   3          
   4          bit g_TiFlag=0;
   5          bit g_RiFlag=0;
   6          
   7          
   8          
   9          unsigned char xdata *SJA_BASE_ADDR = 0x0000;
  10          
  11          //写数据
  12          void SJARegWrite(unsigned char regAddr,unsigned char setData)
  13          {
  14   1           *(SJA_BASE_ADDR+regAddr) = setData;
  15   1      }
  16          //读数据
  17          unsigned char SJARegRead(unsigned char regAddr)
  18          {
  19   1           unsigned char tempData;
  20   1               tempData = *(SJA_BASE_ADDR+regAddr);
  21   1               return tempData;
  22   1      }
  23          //寄存器自测试
  24          bit SJARegSelfTest(void)
  25          {
  26   1           bit  flag;
  27   1      
  28   1               SJARegWrite(9,0xaa);
  29   1               if (SJARegRead(9) == 0xaa)
  30   1               {
  31   2                   flag = 0;
  32   2               }
  33   1      
  34   1               else 
  35   1               {
  36   2                   flag = 1;
  37   2               }
  38   1      
  39   1               if (!flag) 
  40   1               {
  41   2                   SJARegWrite(9,0x55);
  42   2                       if (SJARegRead(9) == 0x55)
  43   2                       {
  44   3                           flag = 0;
  45   3                       } 
  46   2                       else 
  47   2                       {
  48   3                           flag = 1;
  49   3                       }
  50   2               }
  51   1      
  52   1               return flag ;
  53   1      }
  54          //进入复位模式
  55          bit SJAEnterRstMode(void)
C51 COMPILER V7.06   SJA1000_PELI                                                          03/08/2008 11:03:48 PAGE 2   

  56          {
  57   1           bit flag;
  58   1           unsigned char tempData;
  59   1      
  60   1               tempData = SJARegRead(0);
  61   1               tempData = tempData|0x01;
  62   1               SJARegWrite(0,tempData);
  63   1      
  64   1               if((SJARegRead(0)&0x01)==1)
  65   1               {
  66   2                   flag = 0; 
  67   2               }
  68   1               else
  69   1               {
  70   2                   flag = 1;
  71   2               }
  72   1               return flag;
  73   1      }
  74          //退出复位模式
  75          bit SJAEnterWorkMode(void)
  76          {
  77   1           bit flag;
  78   1               unsigned char tempData;
  79   1      
  80   1               tempData = SJARegRead(0);
  81   1               tempData = tempData&0xfe;
  82   1               SJARegWrite(0,tempData);
  83   1      
  84   1               if((SJARegRead(0)&0x01)==0)
  85   1               {
  86   2                   flag = 0;
  87   2               }
  88   1               else
  89   1               {
  90   2                   flag = 1;
  91   2               }
  92   1               return flag;
  93   1      }
  94          
  95          //设置时钟分频,输出控制寄存器
  96          bit SJAClkOut(unsigned char OCR,unsigned char CDR)
  97          {
  98   1           bit flag;
  99   1               
 100   1               SJARegWrite(8,OCR);
 101   1               SJARegWrite(31,CDR);
 102   1      
 103   1               if((SJARegRead(8)==OCR)&(SJARegRead(31)==CDR))
 104   1               {
 105   2                   flag = 0;
 106   2               }
 107   1               else
 108   1               {
 109   2                   flag = 1;
 110   2               }
 111   1               return flag;
 112   1      }
 113          //中断使能设置
 114          bit SJASetInterrupt(unsigned char ENA_INT)
 115          {
 116   1           bit flag;
 117   1      
C51 COMPILER V7.06   SJA1000_PELI                                                          03/08/2008 11:03:48 PAGE 3   

 118   1               SJARegWrite(4,ENA_INT);
 119   1      
 120   1               if (SJARegRead(4) == ENA_INT)
 121   1               {
 122   2                   flag = 0;
 123   2               }
 124   1               else 
 125   1               {
 126   2                   flag = 1;
 127   2               }
 128   1               return flag;
 129   1      }
 130          //波特率设置
 131          bit SJASetBaudRate(unsigned char BTR0,unsigned char BTR1)
 132          {
 133   1           bit flag;
 134   1               SJARegWrite(6,BTR0);
 135   1               SJARegWrite(7,BTR1);
 136   1      
 137   1               if((SJARegRead(6)==BTR0)&(SJARegRead(7)==BTR1))
 138   1               {
 139   2                   flag = 0;
 140   2               }
 141   1               else
 142   1               {
 143   2                   flag = 1;
 144   2               }
 145   1               return flag;
 146   1      }
 147          //验收代码寄存器设置
 148          bit SJASetACR(   unsigned char ACR0,
 149                           unsigned char ACR1,
 150                                           unsigned char ACR2,
 151                                           unsigned char ACR3 )
 152          {
 153   1           bit flag;
 154   1      
 155   1               SJARegWrite(16,ACR0);
 156   1               SJARegWrite(17,ACR1);
 157   1               SJARegWrite(18,ACR2);
 158   1               SJARegWrite(19,ACR3);
 159   1      
 160   1               if ((SJARegRead(16) ==ACR0)&(SJARegRead(17) ==ACR1)
 161   1                    &(SJARegRead(18) ==ACR2)&(SJARegRead(19) ==ACR3))
 162   1              {
 163   2                  flag = 0;
 164   2              }
 165   1              else 
 166   1              {
 167   2                  flag = 1;
 168   2              }
 169   1              return flag;
 170   1      }
 171          //屏蔽寄存器设置
 172          bit SJASetAMR(   unsigned char AMR0,
 173                           unsigned char AMR1,
 174                                           unsigned char AMR2,
 175                                           unsigned char AMR3  )
 176          {
 177   1           bit flag;
 178   1      
 179   1               SJARegWrite(20,AMR0);
C51 COMPILER V7.06   SJA1000_PELI                                                          03/08/2008 11:03:48 PAGE 4   

 180   1               SJARegWrite(21,AMR1);
 181   1               SJARegWrite(22,AMR2);
 182   1               SJARegWrite(23,AMR3);
 183   1      
 184   1               if ((SJARegRead(20) ==AMR0)&(SJARegRead(21) ==AMR1)
 185   1                    &(SJARegRead(22) ==AMR2)&(SJARegRead(23) ==AMR3))
 186   1              {
 187   2                  flag = 0;
 188   2              }
 189   1              else 
 190   1              {
 191   2                  flag = 1;
 192   2              }
 193   1              return flag;
 194   1      }
 195          //SJA初始化
 196          void SJAInit(void)
 197          {
 198   1          bit flag;
 199   1      
 200   1              flag = SJARegSelfTest();                                           //SJA自测试
 201   1              while(flag)
 202   1              {
 203   2                  flag = SJARegSelfTest();
 204   2                      
 205   2              }
 206   1              
 207   1      
 208   1              flag = SJAEnterRstMode();                                          //进行复位模式
 209   1              while(flag)

⌨️ 快捷键说明

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