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

📄 appli.lst

📁 压缩包中包括多个常用的汇编
💻 LST
📖 第 1 页 / 共 5 页
字号:
 237   3              }
 238   2          }
 239   1      }
 240          
 241          /* 清除指定定时器 */
C51 COMPILER V7.09   APPLI                                                                 10/09/2005 20:45:34 PAGE 5   

 242          void clear_timer(u_char id)
 243          {
 244   1          u_char loop;
 245   1      
 246   1          for (loop=0; loop<MAX_TNUM; loop++)
 247   1          {
 248   2              if ( (timer_sign[loop] == 1) && (timer_id[loop] == id) )
 249   2              {
 250   3                  timer_sign[loop]  = 0;
 251   3                  timer_count[loop] = 0;       /*定时计数*/
 252   3              }
 253   2          }
 254   1          count_timer_map();
 255   1      }
 256          
 257          /* 命令解码子程序 */
 258          void command_decoder(void)
 259          {
 260   1          u_char i = 0;
 261   1      
 262   1          if (prec_buf[4] == 0x31)       /* 设置报警阈值   */
 263   1          {
 264   2              alarm_limit.temp_uthreshold  = prec_buf[5];  /* 超低温度 */
 265   2              alarm_limit.temp_othreshold  = prec_buf[6];  /* 超高温度 */
 266   2              alarm_limit.lumin_uthreshold = prec_buf[7];  /* 超低光强 */
 267   2              alarm_limit.lumin_othreshold = prec_buf[8];  /* 超高光强 */
 268   2              return;
 269   2          }
 270   1          else if (prec_buf[4] == 0x32)  /* 请求报警阈值 */
 271   1          {
 272   2              msg_last_push(MSG_GET_LIMIT,0);
 273   2              return;
 274   2          }
 275   1          else if (prec_buf[4] == 0x33)  /* 修改当前时间 */
 276   1          {
 277   2              for (i=0; i<7; i++)
 278   2              {
 279   3                  date[i] = prec_buf[i+5];
 280   3              }
 281   2              sd2300_write_date();       /* 写入时间数据 */
 282   2              return;
 283   2          }
 284   1          else if (prec_buf[4] == 0x34)  /* 请求当前时间 */
 285   1          {
 286   2              sd2300_read_date();
 287   2              msg_last_push(MSG_READ_DATE,0);
 288   2              return;
 289   2          }
 290   1          else if (prec_buf[4] == 0x35)  /* 请求当前数据 */
 291   1          {
 292   2              msg_last_push(MSG_CUR_DATA,0);
 293   2              return;
 294   2          }
 295   1          else if (prec_buf[4] == 0x36)  /* 请求看门狗信息*/
 296   1          {
 297   2              msg_last_push(MSG_WATCHDOG,0);
 298   2              return;
 299   2          }
 300   1          else if (prec_buf[4] == 0x37)  /* 请求报警情况 */
 301   1          {
 302   2              msg_last_push(MSG_ALARM_STATE,0);
 303   2              return;
C51 COMPILER V7.09   APPLI                                                                 10/09/2005 20:45:34 PAGE 6   

 304   2          }
 305   1          else if (prec_buf[4] == 0x38)  /* 配置设备地址 */
 306   1          {
 307   2              ADDRESS[0] = prec_buf[5];  /* 通讯组地址   */
 308   2              ADDRESS[1] = prec_buf[6];  /* 开发板地址   */
 309   2      
 310   2              write_iic_data(ADDRESS, 0, 2);/* 将地址信息写入EEPROM */
 311   2              return;
 312   2          }
 313   1          else if (prec_buf[4] == 0x39)  /* 请求设备地址 */
 314   1          {
 315   2              msg_last_push(MSG_GET_ADDRESS,0);
 316   2              return;
 317   2          }
 318   1          else if (prec_buf[4] == 0x3a)  /* 控制模拟量输出 */
 319   1          {
 320   2              analog_out_data |= prec_buf[6];
 321   2              analog_out_data <<= 8;
 322   2              analog_out_data |= prec_buf[5];
 323   2              dac_5615(analog_out_data); /* 输出模拟量 */
 324   2              return;
 325   2          }
 326   1          else if (prec_buf[4] == 0x3b)  /* 控制开关量输出 */
 327   1          {
 328   2              if (prec_buf[5] == 0)
 329   2                  CTRL_RELAY = 0;        /* 继电器关 */
 330   2              else
 331   2                  CTRL_RELAY = 1;        /* 继电器开 */
 332   2      
 333   2              return;
 334   2          }
 335   1      }
 336          
 337          /* 该子程序可根据需要修改 搜索系统消息 */
 338          void message_loop(void)
 339          {
 340   1          u_char i = 0;
 341   1          u_char j = 0;
 342   1          u_char k = 0;
 343   1      
 344   1          /* 搜索定时消息 */
 345   1          if (timer_int == 1)
 346   1          {
 347   2              timer_int = 0;
 348   2              if (timer_number > 0)
 349   2              {
 350   3                  for (i=0; i<timer_number; i++)
 351   3                  {
 352   4                      j = timer_map[i];
 353   4                      timer_count[j]++;
 354   4                      if (timer_count[j] >=  timer_len[j])
 355   4                      {
 356   5                          msg_first_push(MSG_TIMER, timer_id[j]);
 357   5                          timer_sign[j]  = 0;
 358   5                          timer_count[j] = 0;   /* 定时计数 */
 359   5                          k = 1;
 360   5                      }
 361   4                  }
 362   3                  if (k != 0)
 363   3                  {
 364   4                      count_timer_map();
 365   4                  }
C51 COMPILER V7.09   APPLI                                                                 10/09/2005 20:45:34 PAGE 7   

 366   3              }
 367   2          }
 368   1           /* 键盘扫描 */
 369   1          key_setmenu_lcd();
 370   1          if (key_code != 0xFF) /* 如果有按键则停止采样定时 */
 371   1          {
 372   2              clear_timer(T_SAMPLE);
 373   2              tsample_flag = 0;
 374   2          }
 375   1          else if (!tsample_flag)/* 无按键并且采样定时器处于停止状态,则启动采样定时器 */
 376   1          {
 377   2              set_timer(QUERY_TIMER_LEN,0,T_SAMPLE);
 378   2              tsample_flag = 1;
 379   2          }
 380   1      
 381   1          com_command_receive(); /* 接收命令 */
 382   1      }
 383          
 384          /*计算CRC校验和使用MTT(0X1021)
 385          参数:
 386           pBuff 为需计算CRC的缓冲区的头指针
 387           BufferLen 缓冲区长度(以字节计)
 388           */
 389          u_short CalCRC16_1021(u_char x[], u_short BufferLen)
 390          {
 391   1          u_short i;
 392   1          u_char  j;
 393   1          u_short crc16 = 0;
 394   1          u_short mask = 0x1021;
 395   1          u_char *pByteBuffer;
 396   1          u_char tmpbyte;
 397   1          u_short calval;
 398   1      
 399   1          pByteBuffer = &x[0];
 400   1      
 401   1          for (i = 0; i < BufferLen; i++)
 402   1          {
 403   2              tmpbyte = *pByteBuffer;
 404   2              calval = tmpbyte << 8;
 405   2              for (j = 0; j < 8; j++)
 406   2              {
 407   3                  if ((crc16 ^ calval) & 0x8000)
 408   3                      crc16 = (crc16 << 1) ^ mask;
 409   3                  else
 410   3                      crc16 <<= 1;
 411   3      
 412   3                  calval <<= 1;
 413   3              }
 414   2              pByteBuffer++;
 415   2          }
 416   1          return crc16;
 417   1      }
 418          
 419          /* 串行接收处理 */
 420          void com_command_receive(void)
 421          {
 422   1          u_char var1,var4;
 423   1          u_int crc_data = 0;
 424   1          var4 = pint_read;
 425   1      
 426   1          if (var4 != pint_write)
 427   1          {
C51 COMPILER V7.09   APPLI                                                                 10/09/2005 20:45:34 PAGE 8   

 428   2              var1 = pint_buf[var4];
 429   2              var4 = var4+1;
 430   2              if (var4 >= MAX_RINTL)
 431   2                  var4=0;
 432   2      
 433   2              pint_read = var4;
 434   2      
 435   2              switch(serial_flag)
 436   2              {
 437   3                  case 0: /*收到起始位*/
 438   3                      if (var1 == SYN)
 439   3                      {
 440   4                          serial_flag = 1;
 441   4                      }
 442   3                      else
 443   3                      {
 444   4                          serial_flag = 0;
 445   4                      }
 446   3                      break;
 447   3      
 448   3                  case 1:/*收到起始位*/
 449   3                      if (var1 == SYN)
 450   3                      {
 451   4                          serial_flag = 2;
 452   4                      }
 453   3                      else
 454   3                      {
 455   4                          serial_flag = 0;
 456   4                      }
 457   3                      break;
 458   3      
 459   3                  case 2:/*收到同步位*/
 460   3                      if (var1 == STX)
 461   3                      {
 462   4                          serial_flag = 3;
 463   4                      }
 464   3                      else
 465   3                      {
 466   4                          serial_flag = 0;
 467   4                      }
 468   3                      break;
 469   3      
 470   3                  case 3: /*收到组地址*/
 471   3                      if (var1 == ADDRESS[0])
 472   3                      {
 473   4                          serial_flag = 4;
 474   4                          prec_num = 1;
 475   4                          prec_buf[0] = var1;
 476   4                      }
 477   3                      else
 478   3                      {
 479   4                          serial_flag = 0;

⌨️ 快捷键说明

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