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

📄 comm.lst

📁 SM5964在系统编程的源代码,通过COMM串行口进行程序下载,方便嵌入式系统开发
💻 LST
字号:
C51 COMPILER V7.04   COMM                                                                  04/08/2006 10:08:58 PAGE 1   


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

stmt level    source

   1          #include "main.h"
   2          #include "comm.h"
   3          
   4          //////////////////////////////////////////////////////////
   5          //stx addr cmd lenh lenl data  xor
   6          //0    1    2   3    4    5..
   7          //////////////////////////////////////////////////////////
   8          
   9          xdata  unsigned char g_CommBuffer[600];
  10          unsigned int g_CommLen;
  11          
  12          
  13          /////////////////////////////////////////
  14          //CPU种类:12分频时钟周期
  15          //定时器: T2定时器
  16          //误差: 4.5%
  17          //公式: 波特率= 晶振频率/(32*(65536 - [RCAP2H,RCAP2L]))
  18          //CopyRight by YTH 2002.11.11
  19          /////////////////////////////////////////
  20          #ifdef CRYTAL221184MHZ
  21          void InitComm(unsigned char nBaudRate)
  22          {
  23   1                  TMOD=0x20 |(TMOD&0x0f0);
  24   1                  PCON=0x80;
  25   1                  switch(nBaudRate)
  26   1                  {            
  27   2                  case  Baud9600:
  28   2                           TH1=244;
  29   2                           break;            
  30   2                  case  Baud19200:
  31   2                           TH1=250;
  32   2                           break;
  33   2                  case  Baud38400:
  34   2                           TH1=253;
  35   2                           break;            
  36   2                  case  Baud115200:
  37   2                           TH1=255;
  38   2                           break;
  39   2                  }
  40   1                              TL1=TH1;
  41   1                  SCON=0x50;            
  42   1      
  43   1                              //ES=1;
  44   1                              TR1=1;
  45   1                              
  46   1      
  47   1      }
  48          #endif
  49          
  50          
  51          
  52          #ifdef CRYTAL147456MHZ
              void InitComm(unsigned char nBaudRate)
              {
                          TMOD=0x20 |(TMOD&0x0f0);
C51 COMPILER V7.04   COMM                                                                  04/08/2006 10:08:58 PAGE 2   

                          PCON=0x00;
                          switch(nBaudRate)
                          {
                          case  Baud9600:
                                   TH1=252;
                                   break;
                          case  Baud19200:
                                   TH1=254;
                                   break;
                          case  Baud38400:
                                   TH1=255;
                                   break;
                          }
                                      TL1=TH1;
                          SCON=0x50;            
              
                                      //ES=1;
                                      TR1=1;
                                      
              }
              #endif
  77          #ifdef CRYTAL110592MHZ
              void InitComm(unsigned char nBaudRate)
              {
                          T2CON=0x30;
                          switch(nBaudRate)
                          {
                          
                          case  Baud9600:
                                   RCAP2H=255;RCAP2L=220;
                                   break;            
                          case  Baud19200:
                                   RCAP2H=255;RCAP2L=238;
                                   break;
                          case  Baud38400:
                                   RCAP2H=255;RCAP2L=247;
                                   break;            
                          case  Baud115200:
                                   RCAP2H=255;RCAP2L=253;
                                   break;
                          }
                          SCON=0x50;
                          TR2=1;
              }
              
              #endif
 102          
 103          unsigned char ReadComm1(unsigned char *ch)
 104          {
 105   1      
 106   1              unsigned int timeout= COMM_TIMEOUT1;
 107   1      
 108   1              while(--timeout)
 109   1              {
 110   2                               WatchDog();
 111   2                   if(RI==1)
 112   2                   {
 113   3                       RI=0;
 114   3                       *ch=SBUF;
 115   3                       return ID_OK;
 116   3                   }
 117   2              }
C51 COMPILER V7.04   COMM                                                                  04/08/2006 10:08:58 PAGE 3   

 118   1              return ID_ERR;
 119   1      
 120   1      }
 121          
 122          unsigned char ReadComm(unsigned char *ch)
 123          {
 124   1      
 125   1              unsigned long timeout= COMM_TIMEOUT;
 126   1      
 127   1              while(--timeout)
 128   1              {
 129   2                               WatchDog();
 130   2                   if(RI==1)
 131   2                   {
 132   3                       RI=0;
 133   3                       *ch=SBUF;
 134   3                       return ID_OK;
 135   3                   }
 136   2              }
 137   1              return ID_ERR;
 138   1      
 139   1      }
 140          unsigned char WriteComm(unsigned char ch)
 141          {
 142   1              unsigned long timeout= COMM_TIMEOUT;
 143   1      
 144   1              SBUF=ch;
 145   1              while(--timeout)
 146   1              {
 147   2                               WatchDog();
 148   2                   if(TI==1)
 149   2                   {
 150   3                       TI=0;
 151   3                       return ID_OK;
 152   3                   }
 153   2              }
 154   1              return ID_ERR;
 155   1      }
 156          /*
 157          ********************************************************
 158          **格式:60 addr cmd len data xor
 159          ********************************************************
 160          */
 161          
 162          
 163          unsigned char ReceiveData(void)
 164          {
 165   1      
 166   1         unsigned char  ch;
 167   1         unsigned char  xorcode=0;
 168   1         unsigned int len;
 169   1      
 170   1         NumCounter=0;
 171   1         //startcode   
 172   1         while(1)
 173   1         {
 174   2                      WatchDog();
 175   2      
 176   2              ReadComm(&ch);
 177   2              if(ch==0x60)break;
 178   2      
 179   2                      
C51 COMPILER V7.04   COMM                                                                  04/08/2006 10:08:58 PAGE 4   

 180   2                      if(ch==0x55)NumCounter++;
 181   2                      if(NumCounter>5)
 182   2                      {
 183   3                              WriteComm(0xaa);//Comm Start Byte
 184   3                              WriteComm(0xaa);//Comm Start Byte
 185   3                              WriteComm(0xaa);//Comm Start Byte
 186   3                              WriteComm(0xaa);//Comm Start Byte
 187   3                              WriteComm(0xaa);//Comm Start Byte
 188   3      
 189   3                      }
 190   2                      
 191   2         }
 192   1         //if(ch!=0x60)return COMM_STX_ERR;
 193   1      
 194   1         g_CommBuffer[0]=ch;
 195   1         xorcode ^=ch;
 196   1      
 197   1      
 198   1         //addr
 199   1         if(ReadComm(&ch)) return COMM_TMO_ERR;
 200   1         g_CommBuffer[1]=ch;
 201   1         xorcode ^=ch;
 202   1      
 203   1         //cmd
 204   1         if(ReadComm(&ch)) return COMM_TMO_ERR;
 205   1         g_CommBuffer[2]=ch;   
 206   1         xorcode ^=ch;
 207   1      
 208   1         WatchDog();
 209   1      
 210   1         //len1
 211   1         if(ReadComm(&ch)) return COMM_TMO_ERR;
 212   1         g_CommBuffer[3]=ch;
 213   1         xorcode ^=ch;
 214   1         len=ch;
 215   1      
 216   1      
 217   1         //len2
 218   1         if(ReadComm(&ch)) return COMM_TMO_ERR;
 219   1         g_CommBuffer[4]=ch;
 220   1         xorcode ^=ch;
 221   1         len<<=8;
 222   1         len+=ch;
 223   1      
 224   1      //   *((unsigned char *)(&len)+0)=g_CommBuffer[3];
 225   1        // *((unsigned char *)(&len)+1)=g_CommBuffer[4];
 226   1         g_CommLen=len;
 227   1      
 228   1      
 229   1      
 230   1         if(len>600)return COMM_LEN_ERR;
 231   1      
 232   1      
 233   1         //data
 234   1         for(i=0;i<len;i++)
 235   1         {
 236   2                      WatchDog();
 237   2              if(ReadComm(&ch))  return COMM_TMO_ERR;        
 238   2                      g_CommBuffer[5+i]=ch;
 239   2                      xorcode ^=ch;
 240   2         }
 241   1      
C51 COMPILER V7.04   COMM                                                                  04/08/2006 10:08:58 PAGE 5   

 242   1         //xor
 243   1         if(ReadComm(&ch)) return COMM_TMO_ERR;
 244   1         xorcode ^=ch;
 245   1      
 246   1         //check veryfy
 247   1         if(xorcode==0)return ID_OK; //校验对
 248   1         else          return COMM_XOR_ERR;//校验错
 249   1        
 250   1      }
 251          
 252          
 253          void SendResponse(unsigned char StateCode,unsigned char *StrData,unsigned int Len)
 254          {
 255   1              
 256   1                      unsigned char CrcCode=0;
 257   1                      unsigned char ch;
 258   1      
 259   1      
 260   1                      WatchDog();
 261   1      
 262   1                      PIN_TXEN=RS485_COMM_ENABLE;//不允许发送
 263   1                      //for(i=0;i<100;i++)  WatchDog();              
 264   1      
 265   1                      //start
 266   1              WriteComm(0x60);//Comm Start Byte
 267   1                      CrcCode ^=0x60;
 268   1      
 269   1                      //addr
 270   1                      WriteComm(0x01);
 271   1                      CrcCode ^=0x01;
 272   1      
 273   1      
 274   1                      
 275   1      
 276   1                      //status
 277   1                      WriteComm(StateCode);
 278   1                      CrcCode ^=StateCode;
 279   1      
 280   1                      WatchDog();
 281   1      
 282   1                      //len
 283   1                      ch=((Len>>8)&0xff);
 284   1              WriteComm(ch);
 285   1                      CrcCode ^=ch;
 286   1      
 287   1                      ch=(Len&0xff);
 288   1                      WriteComm(ch);
 289   1                      CrcCode ^=ch;
 290   1      
 291   1      
 292   1                      //data
 293   1              for(i=0;i<Len;i++)
 294   1              {
 295   2                      WatchDog();
 296   2                                      ch=StrData[i];
 297   2                      WriteComm(ch);
 298   2                      CrcCode ^=ch;
 299   2                      
 300   2              }
 301   1      
 302   1                      //xor
 303   1                      WriteComm(CrcCode);
C51 COMPILER V7.04   COMM                                                                  04/08/2006 10:08:58 PAGE 6   

 304   1      
 305   1      
 306   1                      //for(i=0;i<100;i++)WatchDog();
 307   1                      PIN_TXEN=RS485_COMM_DISENABLE;//不允许发送
 308   1              
 309   1      
 310   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    520    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =    600    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2      19
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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