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

📄 xkcan_node.lst

📁 CAN工业节点设计、CAN控制器为SJA1000.C源码
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.09   XKCAN_NODE                                                            03/13/2008 06:00:59 PAGE 1   


C51 COMPILER V8.09, COMPILATION OF MODULE XKCAN_NODE
OBJECT MODULE PLACED IN XKCAN_Node.OBJ
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE XKCAN_Node.c ROM(COMPACT) BROWSE INCDIR(E:\Keil\C51\INC) DEBUG OBJECTEXTEND

line level    source

   1          #include <REGX52.h>
   2          #include <absacc.h>
   3          
   4          #include "xkcan.h"
   5          
   6          //#pragma OT(4, speed)
   7          
   8          // Frame Datas and pointers
   9          _t_can_frame    idata rxCanFrame[2];
  10          _t_can_frame *  idata pWriteRxCanFrame;
  11          _t_can_frame *  idata pWriteRxCanFrameTemp;
  12          _t_can_frame *  idata pReadRxCanFrame;
  13          _t_can_frame *  idata pReadRxCanFrameTemp;
  14          _t_can_frame *  idata pCanFrameTemp;
  15          _t_can_frame *  idata pCanFrameTemp2;
  16          
  17          
  18          _t_can_frame    idata txCanFrameTemp;
  19          _t_can_status   idata sCanDefault;
  20          
  21          extern ubyte *  idata pRx485Frame;
  22          extern _t_485_tuoke_dh4 idata tx485FrameTemp;
  23          
  24          
  25          // Flags and global variables
  26          ubyte volatile flag_can_ir = 0;
  27          ubyte volatile flag_can_txc = 0;
  28          ubyte volatile flag_can_rcv = 0;
  29          
  30          ubyte volatile flag_uart_txc = 1;
  31          ubyte volatile flag_uart_rcv = 0;
  32          ubyte volatile flag_485_rcv = 0;
  33          ubyte volatile flag_485_tx = 0;
  34          
  35          ubyte volatile flag_timer_exp_set = 0;
  36          ubyte volatile flag_timer_exp_timeup = 0;
  37          ubyte volatile timer_clock_pause;
  38          ubyte volatile timer_exp_clock_pause;
  39          uint timer_tick1, timer_tick2;
  40          
  41          ubyte stntype;
  42          ubyte uart_data;
  43          
  44          ubyte NMT_Status;
  45          ubyte EXP_Status;
  46          ubyte NID;
  47          
  48          ubyte cGuardingToggle = 0x80;
  49          ubyte timer_toggle = 0;
  50          
  51          ubyte volatile regStatus[ETN_STATUS_BANK_COUNT + 1];
  52          //ubyte volatile StatusNum = 0;
  53          
  54          // Function Prototypes
  55          void InitBoard();
C51 COMPILER V8.09   XKCAN_NODE                                                            03/13/2008 06:00:59 PAGE 2   

  56          ubyte EnterStatus(ubyte status);
  57          ubyte EnterExpStatus(ubyte status);
  58          void UpdateTimeDisplay();
  59          
  60          void pause();
  61          void delay(uint);
  62          
  63          void ParseCanRxData();
  64          void StatusMachine();
  65          void UpdateRegStatus();
  66          //void serial_IT(void) interrupt SIO_VECTOR
  67          //void ex1_int(void) interrupt IE1_VECTOR
  68          
  69          void main(void)
  70          {
  71   1              ubyte noop = 0;
  72   1              
  73   1              InitBoard();
  74   1      
  75   1              EnterStatus(STATUS_INITIALISING);
  76   1      
  77   1              timer_tick2 = TIMER_Count();
  78   1      
  79   1              while (1)
  80   1              {
  81   2              // Parse Received Data
  82   2      
  83   2                      timer_tick1 = TIMER_Count();
  84   2      
  85   2                      if ( flag_can_rcv == 1 )
  86   2                      {
  87   3                              flag_can_rcv = 0;
  88   3                              ParseCanRxData();
  89   3                      }
  90   2      
  91   2              // Deal with the status machine
  92   2                      
  93   2                      StatusMachine();
  94   2              
  95   2              // Clock Stuffs 
  96   2      
  97   2                      if ((timer_tick_500ms & 1) == 1 ) 
  98   2                      {
  99   3                              timer_tick_500ms = 0;
 100   3      
 101   3      
 102   3                              UpdateClock();
 103   3                              UpdateTimeDisplay();
 104   3      
 105   3                      }
 106   2       
 107   2                      //P1 = ~NID;//~NMT_Status;
 108   2              }
 109   1      }
 110                  
 111          void InitBoard()
 112          {
 113   1      
 114   1              // Set default CAN parameters
 115   1      
 116   1              sCanDefault.btr0 = 0x01; // 250kbps at 16MHz crystal
 117   1              sCanDefault.btr1 = 0x1c;
C51 COMPILER V8.09   XKCAN_NODE                                                            03/13/2008 06:00:59 PAGE 3   

 118   1      
 119   1              //sCanDefault.cobid = _GEN_COBID(0x0F, NID);
 120   1              NID = ~P1;
 121   1              sCanDefault.acr0 = ( (ubyte)NID >>3 ) & 0x0f;
 122   1              sCanDefault.acr1 = ( (ubyte)NID <<5 ) & 0xe0;
 123   1              sCanDefault.acr2 = 0;//( sCanDefault.cobid >>3 ) & 0x0f;
 124   1              sCanDefault.acr3 = 0;//( sCanDefault.cobid <<5 ) & 0xe0;
 125   1      
 126   1              sCanDefault.amr0 = 0xf0;
 127   1              sCanDefault.amr1 = 0x1f;
 128   1              sCanDefault.amr2 = 0xf0;
 129   1              sCanDefault.amr3 = 0x1f;
 130   1              sCanDefault.mod = 0;
 131   1      
 132   1      
 133   1              sCanDefault.cdr = SJA1000_CDR_CLOCK_OFF|SJA1000_CDR_PELICAN_MODE|SJA1000_CDR_CBP;
 134   1              
 135   1              sCanDefault.ocr = SJA1000_OCR_MODE_NORMAL|SJA1000_OCR_TX0_PUSHPULL;
 136   1              sCanDefault.ier = SJA1000_IER_RIE|SJA1000_IER_TIE;
 137   1      
 138   1      
 139   1              pWriteRxCanFrame        = &rxCanFrame[0];
 140   1              pWriteRxCanFrameTemp    = &rxCanFrame[1];
 141   1              pReadRxCanFrame         = &rxCanFrame[0];
 142   1              pReadRxCanFrameTemp     = &rxCanFrame[1];
 143   1      
 144   1              // Device Initialization
 145   1              DIG_Init();
 146   1              TIMER_Init();
 147   1              _485_Init();
 148   1              CAN_Init(&sCanDefault);
 149   1      
 150   1              // Device Open
 151   1              TIMER_Reset();
 152   1              CLOCK_Set(1, 2, 3);
 153   1              CLOCK_Exp_Set(4, 5, 6);
 154   1      
 155   1              DIG_Open();
 156   1              TIMER_Start();
 157   1              CLOCK_Start();
 158   1              CAN_Open(&sCanDefault);
 159   1      
 160   1              // Enable global interrupt
 161   1              EA = 1;
 162   1              EX1 = 1;
 163   1      
 164   1      }
 165          
 166          ubyte EnterStatus(ubyte status)
 167          {
 168   1              if (status == STATUS_INITIALISING)
 169   1              {
 170   2                      NMT_Status = status;
 171   2              }
 172   1              else if (status == STATUS_RESET_APP)
 173   1              {
 174   2                      EnterExpStatus(EXP_PRE_INIT);
 175   2                      NMT_Status = status;
 176   2              }
 177   1              else if (status == STATUS_RESET_COMM)
 178   1              {
 179   2                      NMT_Status = status;
C51 COMPILER V8.09   XKCAN_NODE                                                            03/13/2008 06:00:59 PAGE 4   

 180   2              }
 181   1              else if (status == STATUS_PRE_OPERATIONAL)
 182   1              {
 183   2                      // Send BootUp Frame
 184   2                      cGuardingToggle = (~cGuardingToggle & 0x80);
 185   2                      txCanFrameTemp.dlc = 2;
 186   2                      txCanFrameTemp.cobid = _GEN_D_COBID(FC_D_NMT_EC, NID);
 187   2                      txCanFrameTemp.rtr = 0;
 188   2                      txCanFrameTemp.dat[0] = cGuardingToggle | NMT_Status;
 189   2                      txCanFrameTemp.dat[1] = EXP_Status;
 190   2                                      
 191   2                      CAN_Transmit( &txCanFrameTemp );
 192   2      
 193   2                      NMT_Status = status;
 194   2              }
 195   1              else if (status == STATUS_OPERATIONAL)
 196   1              {
 197   2                      NMT_Status = status;
 198   2              }
 199   1              else if (status == STATUS_STOPPED)
 200   1              {
 201   2                      EnterExpStatus(EXP_STOPPED);
 202   2                      NMT_Status = status;
 203   2              }
 204   1              else 
 205   1              {
 206   2                      //TODO:         Add your error handling code here
 207   2                      //ERROR:        Wrong Status
 208   2                      return STATUS_ERROR;
 209   2              }
 210   1              
 211   1              return status;
 212   1      }
 213          
 214          ubyte EnterExpStatus(ubyte status)
 215          {
 216   1              if (status == EXP_PRE_INIT)
 217   1              {
 218   2                      CLOCK_Exp_Reset();
 219   2                      EXP_Status = status;
 220   2              }
 221   1              else if (status == EXP_INITIALISING)
 222   1              {
 223   2                      CLOCK_Exp_Init();
 224   2                      EXP_Status = status;
 225   2              }
 226   1              else if (status == EXP_STANDBY)
 227   1              {
 228   2                      EXP_Status = status;
 229   2              }

⌨️ 快捷键说明

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