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

📄 main.lst

📁 参考周立功的basic模式的CAN通讯
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   MAIN                                                                  05/18/2006 09:36:31 PAGE 1   


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

stmt level    source

   1          //--------------------------------------------------------------------------
   2          // FileName   : main.C
   3          // Description: main function 
   4          // DateTime   : 2005-07-06 Create
   5          // Author     : jztx-liuweiming
   6          // Version    : TxCmsPrj Ver1.0
   7          //--------------------------------------------------------------------------
   8          #include "main.h"
   9          #include "string.h"
  10          #include "PSD3200.H"
  11          #include "My7132.H"
  12          #include "MyCRC.H"
  13          #include "SJA_PeliCan.h"
  14          
  15          unsigned char  rcv_len;
  16          unsigned char  bdata flag_init;
  17          sbit rcv_flag = flag_init^0;
  18          sbit err_flag = flag_init^2;
  19          unsigned char data  send_data[20], rcv_data[20];
  20          
  21          #define Version  0x0101   // Version 1.0
  22          
  23          xdata PSD_REGS PSD3200_reg _at_ 0x7F00;
  24                                    //PSD Self regiser Address
  25          
  26          #define MAX_TEST_CNT 3000
  27          
  28          unsigned short nTest_Cnt = 0;
  29          
  30          void delay(unsigned int k)
  31          {       
  32   1          unsigned    int     i, j;
  33   1              for(i=0;i<k;i++)
  34   1              {
  35   2                  for(j=0;j<100;j++);
  36   2              }
  37   1      }
  38          
  39          uchar Sja_1000_Init(void)
  40          {
  41   1         //enter reset mode 
  42   1         while ( (REG_ModeControl & 0x01) == 0x00 )
  43   1         {
  44   2           REG_ModeControl = REG_ModeControl & 0x01;
  45   2         }
  46   1      
  47   1         //CanMode + CBP_Bit + DivBy2
  48   1         //REG_ClockDivide = 0x88;
  49   1         REG_ClockDivide = 0xC0;
  50   1         
  51   1         //
  52   1         REG_AcceptCode0 = 0x00;
  53   1         REG_AcceptCode1 = 0x00;
  54   1         REG_AcceptCode2 = 0x00;
  55   1         REG_AcceptCode3 = 0x00;
C51 COMPILER V7.06   MAIN                                                                  05/18/2006 09:36:31 PAGE 2   

  56   1      
  57   1         REG_AcceptMask0 = 0xff;
  58   1         REG_AcceptMask1 = 0xff;
  59   1         REG_AcceptMask2 = 0xff;
  60   1         REG_AcceptMask3 = 0xff;
  61   1      
  62   1         //100Kbpi
  63   1         REG_BusTiming0 = 0x53;
  64   1         REG_BusTiming1 = 0x2F;
  65   1      
  66   1         //Tx1Float + Tx0PshPull + NormalMode
  67   1         //REG_OutControl = 0xaa; //0x02 | 0x18 | 0x00 ;
  68   1         REG_OutControl = 0x1a; //0x02 | 0x18 | 0x00 ;
  69   1      
  70   1         //
  71   1         REG_RxBufStartAdr = 0;
  72   1      
  73   1         do 
  74   1         {
  75   2           REG_ModeControl = 0x08;
  76   2      
  77   2         } while(REG_ModeControl & 0x08 != 0x08);
  78   1      
  79   1         //REG_ModeControl = 0x08;
  80   1        
  81   1      
  82   1         //enable Recv Interrupt
  83   1         REG_InterruptEn = 0x01;
  84   1      
  85   1         return  'o'; 
  86   1      }
  87          //--------------------------------------------------------------------------
  88          // Function    : InitCPU
  89          // Input  Para : void
  90          // Output Para : void
  91          // Retun Val   : void
  92          // Call        : 
  93          // call By     : main
  94          // DateTime    : 2005-7-30
  95          // Author      : liuweiming@gmail.com
  96          // Other info  : 
  97          //--------------------------------------------------------------------------
  98          void InitCPU(void)
  99          {
 100   1      
 101   1          PCON   = 0x80;
 102   1          /******** COM2 ******/
 103   1          
 104   1          T2CON  = 0x04;
 105   1          PCON  |= 0x0C;
 106   1          RCAP2L = 0xb1;   //9600
 107   1          RCAP2H = 0xff;
 108   1          SCON2  = 0x50;   
 109   1          IEA    = 0x10;       // ES1 = 1; IEA.4 
 110   1          TR2    = 1;
 111   1          ET2    = 1;
 112   1          /********** COM1 *******/
 113   1          SCON   = 0x50;
 114   1          TMOD   = 0x21;
 115   1              TH1    = 0xf3;
 116   1              TL1    = 0xf3;
 117   1              TH0    = 0xF8;   //(2^16 - x)*12*1/(晶振*10^6-1) = 时间*10^(-3)
C51 COMPILER V7.06   MAIN                                                                  05/18/2006 09:36:31 PAGE 3   

 118   1              TL0    = 0x30;   //定时1ms
 119   1              TI     = 0;
 120   1              RI     = 0;
 121   1      
 122   1              TR1=1;
 123   1              
 124   1          TR0=1;
 125   1          ET0=1;
 126   1          IT1=1;
 127   1      
 128   1              EX0=1;
 129   1              EX1=1;
 130   1              ES=1;
 131   1          /*******************/
 132   1      }
 133          
 134          void SJA_isr(void) interrupt 0 using 1
 135          {
 136   1              flag_init   = REG_Interrupt;
 137   1      }
 138          
 139          //--------------------------------------------------------------------------
 140          // Function    : timer0_isr
 141          // Input  Para : void
 142          // Output Para : void
 143          // Retun Val   : void
 144          // Description : System Timer0 Interrupt
 145          // Call        : 
 146          // call By     : main
 147          // DateTime    : 2005-7-30
 148          // Author      : liuweiming@gmail.com
 149          // Other info  : 
 150          //--------------------------------------------------------------------------
 151          void timer0_isr(void) interrupt 1 using 2
 152          {
 153   1          TR0   = 0;
 154   1      
 155   1          TH0   = 0xF8;
 156   1              TL0   = 0x30; 
 157   1      
 158   1          TR0   = 1;
 159   1      
 160   1          //Comm1 TimeoOut Cnt -> (Modbus) Comm1Recv Control
 161   1          if ( Comm1Recv_Flag == RECV_COUNT )
 162   1          {
 163   2              if ( nComm1Recv_Cnt++ >= MAX_RECV_CNT )
 164   2              {     
 165   3                  nComm1Recv_End++;
 166   3                  if ( nComm1Recv_End >= MAX_RECV_SUIT )
 167   3                  {
 168   4                      nComm1Recv_End = 0;
 169   4                  }
 170   3                  Comm1Recv[ nComm1Recv_End ].Len = 0;
 171   3                  
 172   3                  Comm1Recv_Flag = RECV_TIMEOUT;
 173   3              }
 174   2          }
 175   1          else
 176   1          {
 177   2              nComm1Recv_Cnt = 0;
 178   2          }
 179   1      
C51 COMPILER V7.06   MAIN                                                                  05/18/2006 09:36:31 PAGE 4   

 180   1          //Comm2 TimeoOut Cnt -> (Modbus) Comm2Recv Control 
 181   1          if ( Comm2Recv_Flag == RECV_COUNT )
 182   1          {
 183   2              if ( nComm2Recv_Cnt++ >= MAX_RECV_CNT )
 184   2              {     
 185   3                  nComm2Recv_End++;
 186   3                  if ( nComm2Recv_End >= MAX_RECV_SUIT )
 187   3                  {
 188   4                      nComm2Recv_End = 0;
 189   4                  }
 190   3                  Comm2Recv[ nComm2Recv_End ].Len = 0;
 191   3      
 192   3                  Comm2Recv_Flag = RECV_TIMEOUT;
 193   3              }
 194   2          }
 195   1          else
 196   1          {
 197   2              nComm2Recv_Cnt = 0;
 198   2          }
 199   1      
 200   1          //Comm1 TimeOut Cnt -> Comm1State Control
 201   1              if ( Comm1State == WAITING )
 202   1          {
 203   2              if ( nComm1Stat_Cnt++ >= MAX_STAT_CNT )
 204   2              {
 205   3                          Comm1State = TIMEOUT;
 206   3              }
 207   2          }
 208   1          else
 209   1          {
 210   2              nComm1Stat_Cnt = 0;
 211   2          }
 212   1      
 213   1              //Comm2 TimeOut Cnt -> Comm2State Control
 214   1              if ( Comm2State == WAITING )
 215   1          {
 216   2              if ( nComm2Stat_Cnt++ >= MAX_STAT_CNT )
 217   2              {
 218   3                          Comm2State = TIMEOUT;
 219   3              }
 220   2          }
 221   1          else
 222   1          {
 223   2              nComm2Stat_Cnt = 0;
 224   2          }
 225   1      
 226   1              nTest_Cnt++;
 227   1      }
 228          //--------------------------------------------------------------------------
 229          // Function    : uPSD_uart1_isr
 230          // Input  Para : void
 231          // Output Para : void
 232          // Retun Val   : void
 233          // Description : System Uart1 Interrupt 
 234          // Call        : 
 235          // call By     : main
 236          // DateTime    : 2005-7-30
 237          // Author      : liuweiming@gmail.com
 238          // Other info  : 
 239          //--------------------------------------------------------------------------
 240          static void uPSD_uart1_isr (void) interrupt SIO1_VECTOR using 2         
 241          {
C51 COMPILER V7.06   MAIN                                                                  05/18/2006 09:36:31 PAGE 5   

 242   1      /*------------------------------------------------
 243   1        comm2 Received data interrupt.
 244   1      ------------------------------------------------*/
 245   1          
 246   1          if ( (SCON2 & 0x01) != 0)
 247   1          {
 248   2                  SCON2 &= 0xFE;                      //RI = 0;
 249   2              
 250   2              Comm2Recv [nComm2Recv_End].Buff[ (Comm2Recv [nComm2Recv_End].Len)++ ] = SBUF2;
 251   2              if ( Comm2Recv [nComm2Recv_End].Len >= MAX_RECV_BUFF )
 252   2              {
 253   3                  Comm2Recv [nComm2Recv_End].Len = 0;
 254   3              }
 255   2      
 256   2              Comm2Recv_Flag = RECV_ONEBYTE;
 257   2          }
 258   1          
 259   1      /*------------------------------------------------
 260   1        comm2 Transmitted data interrupt.
 261   1      ------------------------------------------------*/
 262   1      
 263   1          if ( (SCON2 & 0x02)  != 0)                                                    
 264   1          {
 265   2                  SCON2 &= 0xfd;              //TI = 0; 
 266   2              if ( nComm2Send_Idx < Comm2Send.Len )
 267   2              {
 268   3                  SBUF2 = Comm2Send.Buff [ nComm2Send_Idx ];
 269   3                  nComm2Send_Idx++;
 270   3              }
 271   2              else
 272   2                      {
 273   3                      if ( Comm2Send.Buff[0] != 0x00 )
 274   3                              {
 275   4                              Comm2State = WAITING;
 276   4                              }
 277   3                      }
 278   2          }
 279   1      }
 280          //--------------------------------------------------------------------------
 281          // Function    : uPSD_uart0_isr
 282          // Input  Para : void
 283          // Output Para : void
 284          // Retun Val   : void
 285          // Description : System Uart0 Interrupt 
 286          // Call        : 
 287          // call By     : main
 288          // DateTime    : 2005-7-30
 289          // Author      : liuweiming@gmail.com

⌨️ 快捷键说明

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