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

📄 main.lst

📁 EM4095 程序 可以参考下 keil 下编译!
💻 LST
📖 第 1 页 / 共 5 页
字号:
 491   2                      autodection_data[j]=0;
 492   2              }
 493   1              for(i=0;i<0xf8;i++)
 494   1              {
 495   2                      if(DEMOD_OUT == 0)              //等待低电平,超时退出
 496   2                              break;
 497   2              }
 498   1              if(i>=0xf0)
 499   1              {
 500   2                      return_00();
 501   2                      return;
 502   2              }
 503   1              for(i=0;i<0xf8;i++)
 504   1              {
 505   2                      if(DEMOD_OUT == 1)              //等待高电平,超时退出
 506   2                              break;
 507   2              }
 508   1              if(i>=0xf0)
 509   1              {
 510   2                      return_00();
 511   2                      return;
 512   2              }
 513   1              ET2=1;
 514   1              TR2=1;                                  //counter 2 start run,interrupt enable
 515   1              flag_wait=1;
 516   1              
 517   1              while(flag_wait)                //counter 2 is runing 
 518   1              {
 519   2                      for(i=0;i<0xf8;i++)
 520   2                      {
 521   3                              if(DEMOD_OUT == 0)              //等待低电平,超时退出
 522   3                                      break;
 523   3                      }
 524   2                      if(i>=0xf0)
 525   2                      {
 526   3                              return_00();
 527   3                              return;
 528   3                      }
 529   2              
 530   2                      
 531   2                      icr=count_module(); 
 532   2                      capt=icr-last_capture;
 533   2                      last_capture=icr;
 534   2                      if ((capt>MaxCaptureHalfDateRate)&&(capt<MaxCaptureDateRate)) 
 535   2                              break;  //1p hi,64个时钟
 536   2                      for(i=0;i<0xf8;i++)
 537   2                      {
 538   3                              if(DEMOD_OUT == 1)              //等待高电平,超时退出
 539   3                                      break;
 540   3                      }
 541   2                      if(i>=0xf0)
 542   2                      {
 543   3                              return_00();
 544   3                              return;
 545   3                      }
 546   2                      
 547   2                      icr=count_module(); 
 548   2                      capt=icr-last_capture;
C51 COMPILER V7.50   MAIN                                                                  06/12/2006 16:06:45 PAGE 10  

 549   2                      last_capture=icr;                               
 550   2              }
 551   1                      
 552   1              flag_RO_last_capt_half=0;
 553   1              flag_invalid_edge_manchester=0;
 554   1              count_autodection_bit=0;
 555   1              array_subscript=0;
 556   1              bit_subscript=0;
 557   1                      
 558   1      //      //manchester
 559   1              times_capture_manchester=0;
 560   1              while(flag_wait)                                //counter 2 is runing 
 561   1              {
 562   2                      for(i=0;i<0xf8;i++)
 563   2                      {
 564   3                              if(DEMOD_OUT == 1)              //,test low time 等待高电平,超时退出
 565   3                                      break;
 566   3                      }
 567   2                      
 568   2                      if(i>=0xf0)
 569   2                      {
 570   3                              return_00();
 571   3                              return;
 572   3                      }
 573   2                      
 574   2                      icr=count_module(); 
 575   2                      capt=icr-last_capture;
 576   2                      last_capture=icr;
 577   2                      if((capt<MaxCaptureHalfDateRate)&&(flag_invalid_edge_manchester==0))
 578   2                      {       //0.5p low
 579   3                              flag_invalid_edge_manchester=1;
 580   3                              if((times_capture_manchester%2)==0)     
 581   3                              {
 582   4                                      array_subscript=(count_autodection_bit>>3);
 583   4                                      bit_subscript=(count_autodection_bit%8);
 584   4                                      autodection_data[array_subscript]=(autodection_data[array_subscript]|(1<<bit_subscript));                                       
 585   4                              }
 586   3                              count_autodection_bit++;
 587   3                      }
 588   2                      else if ((capt<MaxCaptureHalfDateRate)&&(flag_invalid_edge_manchester==1))
 589   2                      {       //0.5p low
 590   3                              flag_invalid_edge_manchester=0;
 591   3                      }
 592   2                      else if ((capt>MaxCaptureHalfDateRate)&&(capt<MaxCaptureDateRate))
 593   2                      {       //1p low
 594   3                              if((times_capture_manchester%2)==0)     
 595   3                              {
 596   4                                      array_subscript=(count_autodection_bit>>3);
 597   4                                      bit_subscript=(count_autodection_bit%8);
 598   4                                      autodection_data[array_subscript]=(autodection_data[array_subscript]|(1<<bit_subscript));                                       
 599   4                              }
 600   3                              count_autodection_bit++;                                        
 601   3                      }
 602   2                      times_capture_manchester++;
 603   2                      //----- 
 604   2                      for(i=0;i<0xf8;i++)
 605   2                      {
 606   3                              if(DEMOD_OUT == 0)              //等待低电平,超时退出
 607   3                                      break;
 608   3                      }
 609   2                      if(i>=0xf0)
 610   2                      {
C51 COMPILER V7.50   MAIN                                                                  06/12/2006 16:06:45 PAGE 11  

 611   3                              return_00();
 612   3                              return;
 613   3                      }
 614   2                      
 615   2                      icr=count_module(); 
 616   2                      capt=icr-last_capture;
 617   2                      last_capture=icr;       
 618   2                      if((capt<MaxCaptureHalfDateRate)&&(flag_invalid_edge_manchester==0))
 619   2                      {       //0.5p hi
 620   3                              flag_invalid_edge_manchester=1;
 621   3                              if((times_capture_manchester%2)==0)     
 622   3                              {
 623   4                                      array_subscript=(count_autodection_bit>>3);
 624   4                                      bit_subscript=(count_autodection_bit%8);
 625   4                                      autodection_data[array_subscript]=(autodection_data[array_subscript]|(1<<bit_subscript));                                       
 626   4                              }
 627   3                              count_autodection_bit++;
 628   3                      }
 629   2                      else if ((capt<MaxCaptureHalfDateRate)&&(flag_invalid_edge_manchester==1))
 630   2                      {               //0.5p hi
 631   3                              flag_invalid_edge_manchester=0;
 632   3                      }
 633   2                      else if ((capt>MaxCaptureHalfDateRate)&&(capt<MaxCaptureDateRate))
 634   2                      {       //1p hi
 635   3                              if((times_capture_manchester%2)==0)
 636   3                              {
 637   4                                      array_subscript=(count_autodection_bit>>3);
 638   4                                      bit_subscript=(count_autodection_bit%8);
 639   4                                      autodection_data[array_subscript]=(autodection_data[array_subscript]|(1<<bit_subscript));                                       
 640   4                              }
 641   3                              count_autodection_bit++;                                        
 642   3                      }
 643   2                      times_capture_manchester++;             
 644   2              }
 645   1                      
 646   1                      
 647   1                      //数据提取:找标志头、找停止位、检查校验和,一旦正确提取数据退出循环
 648   1              if(count_autodection_bit>64)
 649   1              {
 650   2                      flag_header_found=0;
 651   2                      for (j=0;j<(count_autodection_bit-54);j++)              //找标志头9 bit 1
 652   2                      {
 653   3                              array_subscript=(j>>3);
 654   3                              bit_subscript=(j%8);
 655   3                              if ((autodection_data[array_subscript]&(1<<bit_subscript))==0)  //不等于0,即可判断此位为1
 656   3                              {
 657   4                                      flag_header_found=1;
 658   4                                      for (k=(j+1);k<(j+10);k++)
 659   4                                      {
 660   5                                              array_subscript=(k>>3);
 661   5                                              bit_subscript=(k%8);
 662   5                                              if ((autodection_data[array_subscript]&(1<<bit_subscript))==0) 
 663   5                                              {
 664   6                                                      flag_header_found=0;
 665   6                                              break;  
 666   6                                              }                                       
 667   5                                      }
 668   4                                      if(flag_header_found==1) break;                                         
 669   4                              }
 670   3                      }
 671   2                              
 672   2                      flag_stop_found=0;
C51 COMPILER V7.50   MAIN                                                                  06/12/2006 16:06:45 PAGE 12  

 673   2                      if (flag_header_found==1)//停止位
 674   2                      {
 675   3                              array_subscript=((j+64)>>3);
 676   3                              bit_subscript=((j+64)%8);
 677   3                              if ((autodection_data[array_subscript]&(1<<bit_subscript))==0) flag_stop_found=1;
 678   3                      }
 679   2                              
 680   2                      flag_line_check=0;
 681   2                      if (flag_stop_found==1) //行校验
 682   2                      {
 683   3                              for (k=(j+10);k<(j+60);k=(k+5))
 684   3                              {
 685   4                                      check=0;
 686   4                                      for(l=k;l<(k+4);l++)
 687   4                                      {
 688   5                                              array_subscript=(l>>3);
 689   5                                              bit_subscript=(l%8);
 690   5                                              check=check^((autodection_data[array_subscript]>>bit_subscript)&1);
 691   5                                      }
 692   4                                      array_subscript=(l>>3);
 693   4                                      bit_subscript=(l%8);
 694   4                                      if ((autodection_data[array_subscript]&(1<<bit_subscript))!=(check<<bit_subscript))     
 695   4                                      {
 696   5                                              flag_line_check=0;
 697   5                                              break;
 698   5                                      }
 699   4                                      flag_line_check=1;                                      
 700   4                              }
 701   3                      }                               
 702   2                                      
 703   2                      flag_column_check=0;
 704   2                      if (flag_line_check==1)         //列校验
 705   2                      {
 706   3                              for(k=(j+10);k<(j+14);k++)
 707   3                              {
 708   4                                      check=0;
 709   4                                      for(l=k;l<(k+50);l=(l+5))
 710   4                                      {
 711   5                                              array_subscript=(l>>3);
 712   5                                              bit_subscript=(l%8);
 713   5                                              check=check^((autodection_data[array_subscript]>>bit_subscript)&1);                                                     
 714   5                                      }
 715   4                                      array_subscript=(l>>3);
 716   4                                      bit_subscript=(l%8);
 717   4                                      if ((autodection_data[array_subscript]&(1<<bit_subscript))!=(check<<bit_subscript))
 718   4                                      {
 719   5                                              flag_column_check=0;
 720   5                                              break;
 721   5                                      }
 722   4                                      flag_column_check=1;    
 723   4                              }
 724   3                      }
 725   2                                      
 726   2                      if (flag_column_check==1)               //提取数据
 727   2                      {
 728   3                              custID=0;
 729   3                              DataItem[0]=0;DataItem[1]=0;DataItem[2]=0;DataItem[3]=0;
 730   3                              //客户ID
 731   3                              bit_number=7;
 732   3                              for (k=(j+10);k<(j+14);k++)
 733   3                              {
 734   4                                      array_subscript=(k>>3);
C51 COMPILER V7.50   MAIN                                                                  06/12/2006 16:06:45 PAGE 13  

 735   4                                      bit_subscript=(k%8);
 736   4                                      custID=(custID|(((autodection_data[array_subscript]&(1<<bit_subscript))>>bit_subscript)<<bit_number));
 737   4                                      bit_number--;                                           
 738   4                              }
 739   3                              for (k=(j+15);k<(j+19);k++)
 740   3                              {
 741   4                                      array_subscript=(k/8);

⌨️ 快捷键说明

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