str.lst

来自「本程序是一个RS232转网口的。是一个透明传输的模块」· LST 代码 · 共 313 行

LST
313
字号
C51 COMPILER V7.06   STR                                                                   09/26/2008 13:36:18 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE STR
OBJECT MODULE PLACED IN ..\OUT\str.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\Source\str.c BROWSE DEBUG OBJECTEXTEND PRINT(..\OUT\str.lst) OBJECT(..\O
                    -UT\str.obj)

stmt level    source

   1          /*
   2          *****************************************************************************************************
   3          *
   4          *  File name: string.c
   5          *****************************************************************************************************
   6          */
   7          #include "..\head\includes.h"
   8          
   9          /*
  10          *****************************************************************************************************
  11          *Func:     N位的ASCII码化为HEX
  12          *Note:
  13          *    1: count = 5   *data++ (12345)
  14          *    2: x=1*10000/1  x=x+2*10000/10   x=x+3*10000/100 ...
  15          *****************************************************************************************************
  16          */
  17          unsigned long DecToHex(unsigned char xdata *data_ptr, unsigned char count)
  18          {
  19   1          unsigned char i;
  20   1              unsigned long xdata count_value_temp=0;
  21   1              unsigned long xdata count_value=0;
  22   1              unsigned long xdata  mod=1;
  23   1      
  24   1          switch(count) {
  25   2                  case 5:
  26   2                           for (i=0; i<count; i++) {
  27   3                       count_value_temp = (*(data_ptr + i)-0x30) ;
  28   3                               count_value = count_value + count_value_temp * (10000 / mod );
  29   3                           mod *= 10;
  30   3                           }
  31   2                           break;
  32   2                      case 4:
  33   2                           for (i=0; i<count; i++) {
  34   3                       count_value_temp = (*(data_ptr + i)-0x30) ;
  35   3                               count_value = count_value + count_value_temp * (1000 / mod );
  36   3                           mod *= 10;
  37   3                           }
  38   2                           break;
  39   2                  case 3:
  40   2                           for (i=0; i<count; i++) {
  41   3                       count_value_temp = (*(data_ptr + i)-0x30) ;
  42   3                               count_value = count_value + count_value_temp * (100 / mod );
  43   3                           mod *= 10;
  44   3                           }
  45   2                           break;
  46   2                      case 2:
  47   2                           for (i=0; i<count; i++) {
  48   3                       count_value_temp = (*(data_ptr + i)-0x30) ;
  49   3                               count_value = count_value + count_value_temp * (10 / mod );
  50   3                           mod *= 10;
  51   3                           }
  52   2                           break;
  53   2                      case 1:
  54   2                           count_value = *data_ptr - 0x30;
C51 COMPILER V7.06   STR                                                                   09/26/2008 13:36:18 PAGE 2   

  55   2                           break;
  56   2                      default :
  57   2                           count_value = 0;
  58   2                           break;
  59   2          }
  60   1              return (count_value);
  61   1      }
  62          
  63          
  64          /*
  65          *****************************************************************************************************
  66          *FUNC:
  67          *NOTE:  
  68          *****************************************************************************************************
  69          */
  70          #if 1
  71          unsigned char xdata Data_Length[6];
  72          void HexToDec(unsigned int  H_value )
  73          {       
  74   1          if ((H_value >= 10000) && (H_value <= 65535)) {
  75   2                  Data_Length[0] = H_value / 10000 + 0x30;
  76   2              Data_Length[1] = (H_value % 10000) / 1000 + 0x30;
  77   2                      Data_Length[2] = (H_value % 1000) / 100 + 0x30;
  78   2                      Data_Length[3] = (H_value % 100) / 10 + 0x30;
  79   2                      Data_Length[4] = H_value % 10 + 0x30;   
  80   2              }
  81   1         
  82   1              if ((H_value >= 1000) && (H_value <= 9999)) {
  83   2              Data_Length[0] = 0x30;
  84   2                  Data_Length[1] = H_value / 1000 + 0x30;
  85   2                      Data_Length[2] = (H_value % 1000) / 100 + 0x30;
  86   2                      Data_Length[3] = (H_value % 100) / 10 + 0x30;
  87   2                      Data_Length[4] = H_value % 10 + 0x30;   
  88   2              } else if ((H_value >= 100) && (H_value <= 999)) {      
  89   2                  Data_Length[0] = 0x30; 
  90   2                      Data_Length[1] = 0x30;
  91   2                      Data_Length[2] = H_value / 100 + 0x30;
  92   2                      Data_Length[3] = (H_value % 100) / 10 + 0x30; 
  93   2                      Data_Length[4] = H_value % 10 + 0x30;
  94   2              } else if ((H_value >= 10) && (H_value <= 99)) {
  95   2                  Data_Length[0] = 0x30; 
  96   2                      Data_Length[1] = 0x30;
  97   2                      Data_Length[2] = 0x30;
  98   2                      Data_Length[3] = H_value / 10 + 0x30;
  99   2                      Data_Length[4] = H_value % 10 + 0x30;
 100   2              } else if ((H_value >= 0) && (H_value <= 9)) {
 101   2              Data_Length[0] = 0x30; 
 102   2                      Data_Length[1] = 0x30;
 103   2                      Data_Length[2] = 0x30;
 104   2                      Data_Length[3] = 0x30;
 105   2                      Data_Length[4] = H_value + 0x30;        
 106   2              }
 107   1      
 108   1          Data_Length[5] = '\0';
 109   1      }
 110          
 111          /*
 112          *****************************************************************************************************
 113          *FUNC:
 114          *NOTE:       "1235455555555555555555555555555555 AT OK"         "AT OK"
 115          *****************************************************************************************************
 116          */
C51 COMPILER V7.06   STR                                                                   09/26/2008 13:36:18 PAGE 3   

 117          unsigned char *StrCompare(unsigned char *mother, unsigned char *son, unsigned int len)
 118          {
 119   1          unsigned int i;
 120   1              unsigned char *son_temp;
 121   1              unsigned char *mother_temp;
 122   1              unsigned char *return_ptr=0;
 123   1      
 124   1          for (i=0; i<len; i++) {
 125   2                  return_ptr = mother_temp =  mother+i;
 126   2                      son_temp = son;
 127   2                  if (*mother_temp == *son_temp) {          // 查找母串第一个与字串匹配
 128   3                          while (*son_temp) {                                   //从第一个位置开始,查找子串所有匹配
 129   4                              if (*son_temp++ == *mother_temp) {
 130   5                                              if (mother_temp < (mother+len)) {
 131   6                                                  mother_temp++;
 132   6                                              } else {
 133   6                                                      return 0;
 134   6                                              }
 135   5                                      } else {
 136   5                                              goto loop;
 137   5                                      }
 138   4                          }
 139   3                              return return_ptr;    
 140   3                      }
 141   2                      loop:
 142   2                      ;   
 143   2              }
 144   1              return 0;
 145   1      }
 146          
 147          /*
 148          *****************************************************************************************************
 149          *FUNC:
 150          *NOTE:  
 151          *****************************************************************************************************
 152          */
 153          #if 1
 154          void ReplaceTag(unsigned char xdata *start, char *replace, unsigned char replace_len) 
 155          { 
 156   1         unsigned char idata i=0;
 157   1         
 158   1         if (start == NULL) return;
 159   1      
 160   1         while(*replace) {
 161   2             *start++ = *replace++;
 162   2                 if (i < replace_len) {
 163   3                 i++;
 164   3                 } else {
 165   3                 return;
 166   3                 }
 167   2         }
 168   1      
 169   1         for (; i<replace_len; i++) {   //
 170   2             *start++ = 0x20;           // 空格
 171   2         }
 172   1        
 173   1         /*
 174   1         for (i=0; i < 8; i++) {
 175   1             if (i < 5) {
 176   1                 ptr[i] = sub[i];
 177   1                 } else {
 178   1                     ptr[i] = 0x20;  // 空格
C51 COMPILER V7.06   STR                                                                   09/26/2008 13:36:18 PAGE 4   

 179   1                 }
 180   1         }
 181   1         */
 182   1      }
 183          #endif
 184          
 185          
 186          /*
 187          *****************************************************************************************************
 188          *FUNC:
 189          *NOTE: 192.168.0.100     00192 5位
 190          *****************************************************************************************************
 191          */
 192          unsigned char xdata IpString[16];
 193          void IpToStr(union IP_address sourceip)
 194          {
 195   1          unsigned char i,j,count,start,bit_num;
 196   1      
 197   1          j = 0;
 198   1              count=0;
 199   1          start=0;
 200   1          bit_num=0;
 201   1      
 202   1              for (i=0; i<4; i++) {
 203   2                  if (sourceip.bytes[i] >= 100) {
 204   3                  bit_num = 3;
 205   3                  } else if (sourceip.bytes[i] >= 10){
 206   3                  bit_num = 2; 
 207   3                  } else {
 208   3                  bit_num = 1;
 209   3                  }
 210   2                  start = 5-bit_num;
 211   2              HexToDec(sourceip.bytes[i]);   //将IP化为字符串后存在Data_Length里
 212   2      
 213   2                      for (j=0; j<bit_num; j++) {
 214   3                  IpString[count++] = Data_Length[start+j];
 215   3                      }
 216   2                      if (i == 3) {
 217   3                  IpString[count] = 0;       //结束符
 218   3                      } else {
 219   3                  IpString[count++] = '.';
 220   3                      }
 221   2          }            
 222   1      }
 223          
 224          
 225          /*
 226          *****************************************************************************************************
 227          *FUNC:
 228          *NOTE: 7200秒     24小时50分钟50秒
 229          *****************************************************************************************************
 230          */
 231          char xdata TimeString[20];
 232          void TimeToStr(unsigned long seconds)
 233          {
 234   1              unsigned char time[3]={0,0,0};
 235   1          unsigned char i,j,count,start,bit_num;
 236   1      
 237   1          j = 0;
 238   1              count=0;
 239   1          start=0;
 240   1          bit_num=0;
C51 COMPILER V7.06   STR                                                                   09/26/2008 13:36:18 PAGE 5   

 241   1      
 242   1      
 243   1              time[0] = seconds/3600;        // hours
 244   1          time[1] = (seconds%3600)/60;   // mins
 245   1              time[2] = seconds%60;          // secs
 246   1      
 247   1              for (i=0; i<3; i++) {
 248   2                  if (time[i] >= 100) {
 249   3                  bit_num = 3;
 250   3                  } else if (time[i] >= 10){
 251   3                  bit_num = 2; 
 252   3                  } else {
 253   3                  bit_num = 1;
 254   3                  }
 255   2                  start = 5-bit_num;
 256   2              HexToDec(time[i]);   //将IP化为字符串后存在Data_Length里
 257   2      
 258   2                      for (j=0; j<bit_num; j++) {
 259   3                  TimeString[count++] = Data_Length[start+j];
 260   3                      }
 261   2                      if (i == 0) {
 262   3                  TimeString[count++] = 0xd0;       //"小" 
 263   3                              TimeString[count++] = 0xa1;       
 264   3                  TimeString[count++] = 0xca;       
 265   3                              TimeString[count++] = 0xb1;       //"时" 
 266   3                      } else if (i == 1) {             
 267   3                  TimeString[count++] = 0xb7;       //"分" 
 268   3                              TimeString[count++] = 0xd6;       
 269   3                  TimeString[count++] = 0xd6;       
 270   3                              TimeString[count++] = 0xd3;       //"钟" 
 271   3                      } else {                              
 272   3                  TimeString[count++] = 0xc3;       //"秒"  
 273   3                              TimeString[count++] = 0xeb;       
 274   3                              TimeString[count++] = 0;          // 结束符
 275   3                      }
 276   2          }            
 277   1      }
 278          
 279          
 280          #endif


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2010    ----
   CONSTANT SIZE    =      3    ----
   XDATA SIZE       =     42      12
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      49
   IDATA SIZE       =   ----       1
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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