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

📄 sja1000_peli.lst

📁 这个源码主要是实现简单型的232转CAN功能的源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.06   SJA1000_PELI                                                          07/11/2007 15:55:53 PAGE 1   


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

line level    source

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

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

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

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

⌨️ 快捷键说明

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