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

📄 appli.lst

📁 压缩包中包括多个常用的汇编
💻 LST
📖 第 1 页 / 共 5 页
字号:
 480   4                      }
 481   3                      break;
 482   3      
 483   3                  case 4:/*收到本机地址或者广播地址*/
 484   3                      if ( (var1 == ADDRESS[1]) || (var1 == 0) )
 485   3                      {
 486   4                          prec_num = 2;
 487   4                          prec_buf[1] = var1;
 488   4                          serial_flag = 5;
 489   4                      }
C51 COMPILER V7.09   APPLI                                                                 10/09/2005 20:45:34 PAGE 9   

 490   3                      else
 491   3                      {
 492   4                          serial_flag = 0;
 493   4                      }
 494   3                      break;
 495   3      
 496   3                  case 5:/*数据长度*/
 497   3                      prec_num = 3;
 498   3                      prec_buf[2] = var1;
 499   3                      serial_lengthl = var1;
 500   3                      serial_flag = 6;
 501   3                      break;
 502   3      
 503   3                  case 6:
 504   3                      prec_num = 4;
 505   3                      prec_buf[3] = var1;
 506   3                      serial_length |= var1;
 507   3                      serial_length = ( (serial_length << 8) & 0xff00 ) + serial_lengthl + 3;
 508   3                      serial_flag = 7;
 509   3                      break;
 510   3      
 511   3                  case 7:
 512   3                      prec_buf[prec_num] = var1;
 513   3                      prec_num++;
 514   3                      serial_length--;
 515   3                      if (serial_length == 0)
 516   3                      {
 517   4                          crc_data = CalCRC16_1021(prec_buf, prec_num - 2); /* 计算crc校验和(从组地址开始到ETX 
             -)*/
 518   4      
 519   4                          if ( ( (crc_data & 0x00ff) == prec_buf[prec_num - 2]) && ( ( (crc_data >>8) & 0x00ff) 
             -== prec_buf[prec_num - 1]) ) /* 校验和正确 */
 520   4                          {
 521   5                              prec_num = 1;
 522   5                              var1 = 0;
 523   5      
 524   5                              if ( (prec_buf[4] >= 0x31) && (prec_buf[4] <= 0x3b) ) /* 命令有效 */
 525   5                              {
 526   6                                  if (prec_buf[1] != 0x00) /* 如果不是广播地址则回应ACK*/
 527   6                                      msg_last_push(MSG_ACK,0);
 528   6      
 529   6                                  command_decoder(); /* 如果校验和正确,则进行命令解码 */
 530   6                              }
 531   5                              else
 532   5                              {
 533   6                                  msg_last_push(MSG_NAK,0);/* 接收数据错误,则发送NAK */
 534   6                              }
 535   5                          }
 536   4                          else
 537   4                          {
 538   5                              msg_last_push(MSG_NAK,0);/* 接收数据错误,则发送NAK */
 539   5                          }
 540   4                          serial_flag = 0;
 541   4                          prec_num = 1;
 542   4                      }
 543   3                      break;
 544   3      
 545   3                  default:
 546   3                      serial_flag = 0;
 547   3                      prec_num = 1;
 548   3                      break;
 549   3              }
C51 COMPILER V7.09   APPLI                                                                 10/09/2005 20:45:34 PAGE 10  

 550   2          }
 551   1      }
 552          
 553          /* 串口发送一个字节 */
 554          void com_send_command(u_char onebyte)
 555          {
 556   1          psend_int = 0;
 557   1          SBUF = onebyte;
 558   1          while (psend_int != 1);
 559   1      }
 560          
 561          /* 向主机发送消息帧,入口参数:消息类型 */
 562          void send_command(u_char command)
 563          {
 564   1      
 565   1          switch (command)
 566   1          {
 567   2              case ACK:
 568   2                  com_send_command(SYN);
 569   2                  com_send_command(SYN);
 570   2                  com_send_command(ACK);
 571   2                  break;
 572   2      
 573   2              case NAK:
 574   2                  com_send_command(SYN);
 575   2                  com_send_command(SYN);
 576   2                  com_send_command(NAK);
 577   2                  break;
 578   2      
 579   2              default:
 580   2                  break;
 581   2          }
 582   1      }
 583          
 584          /* 系统消息进入栈首 */
 585          void msg_first_push(u_char type, u_char value)
 586          {
 587   1          if (msg_number < MAX_MSGNUM)
 588   1          {
 589   2               msg_number = msg_number + 1;
 590   2      
 591   2               if (msg_readp == 0)
 592   2               {
 593   3                   msg_readp=MAX_MSGNUM-1;
 594   3               }
 595   2               else
 596   2               {
 597   3                   msg_readp = msg_readp - 1;
 598   3               }
 599   2      
 600   2               msg_type[ msg_readp]  = type;
 601   2               msg_value[ msg_readp] = value;
 602   2          }
 603   1      }
 604          
 605          /* 系统消息进入栈尾 */
 606          void msg_last_push(u_char type, u_char value)
 607          {
 608   1          if (msg_number < MAX_MSGNUM)
 609   1          {
 610   2              msg_number = msg_number + 1;
 611   2              msg_type[ msg_writep]  = type;
C51 COMPILER V7.09   APPLI                                                                 10/09/2005 20:45:34 PAGE 11  

 612   2              msg_value[ msg_writep] = value;
 613   2              msg_writep = msg_writep + 1;
 614   2      
 615   2              if (msg_writep >= MAX_MSGNUM)
 616   2              {
 617   3                  msg_writep = 0;
 618   3              }
 619   2          }
 620   1      }
 621          
 622          /* 主消息处理子程序 */
 623          void main_message_process(void)
 624          {
 625   1          u_char i;
 626   1          u_int crc_data = 0;
 627   1          switch (msg_nowtype)
 628   1          {
 629   2              case MSG_TIMER:                   /* 定时器消息处理 */
 630   2                  switch (msg_nowvalue)
 631   2                  {
 632   3                      case T_WATCHDOG:          /* 1秒定时到      */
 633   3                          clear_timer(T_WATCHDOG);
 634   3                          WDI = ~WDI;           /* 喂狗           */
 635   3                          set_timer(WD_TIMER_LEN, 0, T_WATCHDOG);
 636   3      
 637   3                          break;
 638   3      
 639   3                      case T_SAMPLE:            /* 5秒定时到  */
 640   3      
 641   3                          clear_timer(T_SAMPLE);
 642   3      
 643   3                          /* add 20050922 */
 644   3                          clear_timer(T_LUMIN);
 645   3                          EX1  = 0;         /* 关外部中断1  */
 646   3                          /* end of add */
 647   3      
 648   3                          cur_temp = get_temperature();/* 读当前温度 */
 649   3                          analog_in_data = adc_1549(); /* 读当前模入*/
 650   3                          if (lcd_flag)
 651   3                          {
 652   4                              lcd_flag = 0;
 653   4                              sd2300_read_date();
 654   4                              show_time();
 655   4                          }
 656   3                          else
 657   3                          {
 658   4                              lcd_flag = 1;
 659   4                              show_current_environment(cur_temp, cur_lumin, analog_in_data, SWITCH_IN);
 660   4                          }
 661   3      
 662   3                          set_timer(QUERY_TIMER_LEN, 0, T_SAMPLE);
 663   3      
 664   3                          /* add 20050922 */
 665   3                          fhz_tlc555 = 0;
 666   3                          EX1  = 1;         /* 开外部中断1  */
 667   3                          set_timer(LUMIN_TIMER_LEN, 0, T_LUMIN);
 668   3                          /* end of add */
 669   3      
 670   3                          break;
 671   3      
 672   3                      case T_LUMIN:         /* 2.5秒定时到  */
 673   3                          clear_timer(T_LUMIN);
C51 COMPILER V7.09   APPLI                                                                 10/09/2005 20:45:34 PAGE 12  

 674   3      
 675   3                          EX1  = 0;         /* 关外部中断1  */
 676   3                          fhz_tlc555 = (fhz_tlc555 * 2) /5;
 677   3                          cur_lumin = calc_lumin(fhz_tlc555); /*计算当前光强*/
 678   3                          fhz_tlc555 = 0;
 679   3                          EX1  = 1;         /* 开外部中断1  */
 680   3      
 681   3                          set_timer(LUMIN_TIMER_LEN, 0, T_LUMIN);
 682   3                          break;
 683   3      
 684   3                      default:
 685   3                          break;
 686   3                  }
 687   2                  break;
 688   2      
 689   2              case MSG_GET_LIMIT:           /* 请求当前报警阈值   */
 690   2      
 691   2                  send_buf[0] = ADDRESS[0]; /* 通讯组地址 */
 692   2                  send_buf[1] = ADDRESS[1]; /* 开发板地址 */
 693   2                  send_buf[2] = 0x05;       /* 数据长度低字节 */
 694   2                  send_buf[3] = 0x00;       /* 数据长度高字节 */
 695   2                  send_buf[4] = 0x32;       /* 消息类型:报警阈值 */
 696   2      
 697   2                  send_buf[5] = alarm_limit.temp_uthreshold;  /* 超低温度 */
 698   2                  send_buf[6] = alarm_limit.temp_othreshold;  /* 超高温度 */
 699   2                  send_buf[7] = alarm_limit.lumin_uthreshold; /* 超低光强 */
 700   2                  send_buf[8] = alarm_limit.lumin_othreshold; /* 超高光强 */
 701   2      
 702   2                  send_buf[9] = 0x03;
 703   2      
 704   2                  crc_data = CalCRC16_1021(send_buf, 10);
 705   2      
 706   2                  send_buf[10] = ( crc_data & 0x00ff );         /* 校验位低字节 */
 707   2                  send_buf[11] = ( ( crc_data & 0xff00 ) >> 8 );/* 校验位高字节 */
 708   2      
 709   2                  com_send_command(SYN);    /* 发送数据 */
 710   2                  com_send_command(SYN);
 711   2                  com_send_command(STX);
 712   2                  for (i=0; i<12; i++)
 713   2                  {
 714   3                      com_send_command(send_buf[i]);
 715   3                  }
 716   2                  break;
 717   2      
 718   2              case MSG_READ_DATE:           /* 读取日期消息处理   */
 719   2      
 720   2                  send_buf[0] = ADDRESS[0]; /* 通讯组地址 */

⌨️ 快捷键说明

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