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

📄 otp.lst

📁 烧录器的上位机控制程序代码,和下位机程序代码,包括USB通讯固件
💻 LST
📖 第 1 页 / 共 3 页
字号:
 544   4                                                                      return 0;       
 545   4                                                              }
 546   3                                      }
 547   2                      P1=P1^0x01;     
 548   2                                              
 549   2                      }
 550   1      
 551   1              pulse_read();   
C51 COMPILER V8.02   OTP                                                                   12/19/2007 17:51:25 PAGE 10  

 552   1              read_configue();                //read config 
 553   1      
 554   1      
 555   1              if(EpBuf[0]!=blank_config[otp_type]/0x100||EpBuf[1]!=blank_config[otp_type]%0x100)
 556   1                      {
 557   2                      buzzer_2();
 558   2                      return 0;       
 559   2                      }
 560   1      
 561   1                      buzzer_1();
 562   1                      return 1;               
 563   1      }
 564          
 565          
 566          void verify_otp(void)
 567          {
 568   1              uchar iv, jv, temp;
 569   1              uint adr;
 570   1              if(!PIN_TEST())
 571   1                      {
 572   2                              buzzer_3();
 573   2                              buzzer_3();
 574   2                              return ;
 575   2                      }
 576   1              
 577   1              pulse_read();                   //???改善挑片的毛病
 578   1              for(iv=0; iv<mcu_size[otp_type]*16; iv++)
 579   1                      {
 580   2                              otp_read(iv);
 581   2                              P1=P1^0x01;
 582   2                              adr=128*iv;
 583   2                              for(jv=0; jv<128; jv++)
 584   2                                      {
 585   3                                              CE_FLS = 0;
 586   3                                              temp=XBYTE[adr++];
 587   3                                              if(temp!=EpBuf[jv])
 588   3                                              {
 589   4                                              buzzer_3();
 590   4                                              return ;
 591   4                                              }                       
 592   3                                      }                                                                                                                                                                       
 593   2                              }
 594   1              
 595   1              EpBuf[1]=EpBuf[0]=0xaa;         
 596   1              read_configue();                //read config and save them start at 0x8000
 597   1      
 598   1              CE_FLS =0;
 599   1              nop; nop;
 600   1              iv=XBYTE[0x8000];
 601   1              jv=XBYTE[0X8001];
 602   1              read_configue();                //read config 
 603   1              nop; nop;
 604   1              if((jv!=EpBuf[1])||((iv&0xdf)!=(EpBuf[0]&0xdf)))        //((iv&0xdf)!=(EpBuf[0]&0xdf))
 605   1                      {
 606   2                      buzzer_2();
 607   2                      return ;
 608   2                      }
 609   1                                                      
 610   1              buzzer_1();     
 611   1              return ;
 612   1      }
 613          
C51 COMPILER V8.02   OTP                                                                   12/19/2007 17:51:25 PAGE 11  

 614          void scan_popkey(void)
 615          {
 616   1              uchar temp_key=0x0;             
 617   1                      if(_50ms!=1)
 618   1                              return;
 619   1                      _50ms=0;                
 620   1                      
 621   1                      KEY1=1; KEY0=1;
 622   1                      nop; 
 623   1                      if(KEY0==0)
 624   1                              temp_key=temp_key|0x01; 
 625   1                      if(KEY1==0)
 626   1                              temp_key=temp_key|0x02; 
 627   1                      //==============================        
 628   1                      if(temp_key!=0)
 629   1                              {       //handle with key push_down
 630   2                                      _kdown=1;
 631   2                                      if(temp_key!=key_buf)                           //如果按键中途改变, 就重新计算新的长按键
 632   2                                              {
 633   3                                                      key_buf=temp_key;
 634   3                                                      lkey_num=0;
 635   3                                                      return;
 636   3                                              }
 637   2                                      else
 638   2                                              {
 639   3                                                      if(lkey_num<250)
 640   3                                                              lkey_num++;
 641   3                                                      if(lkey_num==150)
 642   3                                                              {
 643   4                                                                      if(key_buf==0x01)
 644   4                                                                              _lkey0=1;
 645   4                                                                      if(key_buf==0x02)
 646   4                                                                              _lkey1=1;
 647   4                                                                      return;
 648   4                                                              }
 649   3                                              }               
 650   2                               }
 651   1                      else
 652   1                              {
 653   2                                      if(_kdown!=1)
 654   2                                              {
 655   3                                              k_flag=0;
 656   3                                              return;
 657   3                                              }
 658   2                                      if(lkey_num<150)
 659   2                                              {
 660   3                                              k_flag=0;
 661   3                                              if(key_buf==0x01)
 662   3                                                      _key0=1;
 663   3                                              if(key_buf==0x02)
 664   3                                                      _key1=1;
 665   3                                               }
 666   2                                      key_buf=0x0;    
 667   2                                      lkey_num=0x0;
 668   2                                      return;
 669   2      
 670   2                              }                               
 671   1      
 672   1      }
 673          
 674          bit write_protect(void)                 //加密成功返回1  //多个警告//???
 675          {
C51 COMPILER V8.02   OTP                                                                   12/19/2007 17:51:25 PAGE 12  

 676   1              unsigned char jj, tmp1, tmp2;
 677   1              I2cReset();
 678   1              start();
 679   1              smart_command(1, 0x3f, 0xff);
 680   1              EpBuf[0]=0x1f;  EpBuf[1]=0xff;
 681   1              write_data(&EpBuf[0], 1);
 682   1              stop();
 683   1              //===========================   判断加密是否成功
 684   1              pulse_read();   
 685   1              otp_read(0);                            
 686   1              if(EpBuf[0]!=0x00)
 687   1              {
 688   2                      tmp1=0x3f; tmp2=0xff;
 689   2              }       
 690   1              else
 691   1              {
 692   2                      tmp1=tmp2=0x00;
 693   2              }          
 694   1              for(jj=0; jj<128; jj=jj+2)
 695   1              {
 696   2                      if(EpBuf[jj]!=tmp1||EpBuf[jj+1]!=tmp2)
 697   2                      {       
 698   3                              buzzer_3();
 699   3                              return 0;       
 700   3                      }       
 701   2              }                
 702   1      
 703   1         return 1 ;                   
 704   1      }
 705          
 706          
 707          void initial_timer0(void)
 708          {
 709   1              TMOD=0XF0&TMOD|0X01;            //定时方式0
 710   1              TH0=(65536-50000)/256;          /*每隔50MS扫描一次*/
 711   1              TL0=(65536-50000)%256;
 712   1              TR0=1;
 713   1              ET0=1;
 714   1              EA=1;
 715   1      }
 716          
 717          bit PIN_TEST(void)
 718          {
 719   1              pulse_read();           
 720   1              read_configue();                
 721   1              if( EpBuf[0]>0x3f )
 722   1                return 0;
 723   1              else if( (EpBuf[0]|EpBuf[1])==0x00 )    
 724   1               return 0;
 725   1              else
 726   1                return 1;  
 727   1      }
 728          
 729          /*
 730          bit pin_test_by_type(unsigned char mcu_type)
 731          {
 732                  uchar i;
 733                  if(mcu_type<2)
 734                  {
 735                  OE=0;                           //VC_DOWN=1;
 736                  INH=0;
 737                  nop;
C51 COMPILER V8.02   OTP                                                                   12/19/2007 17:51:25 PAGE 13  

 738                  for(i=0; i<3; i++)
 739                  {
 740                          nop;
 741                          P2=(P2&0xf0)+i+3;       //只测试了3个脚
 742                          DelayXus();
 743                          VDET=1;
 744                          nop; nop; nop;  
 745                  if(VDET==0)
 746                          {               
 747                          OE=1;
 748                          return 1;               //????
 749                          }
 750                          
 751                  }
 752                          OE=1;
 753                          return 1;
 754                  }
 755                  
 756                  else
 757                  {
 758                  pulse_read();           
 759                  read_configue();                //10p20(8pin) read config
 760                  if( EpBuf[0]>0x3f )
 761                    return 0;
 762                  else
 763                    return 1;  
 764                          
 765                          
 766                  }       
 767          }       */
 768          
 769          void check_buttton()
 770          {
 771   1          scan_popkey();
 772   1                      EA=0;   
 773   1              if(_lkey1==1)
 774   1                      {
 775   2                      _lkey1=0;
 776   2                      verify_otp();//校验PM10P40      
 777   2                      }
 778   1              if(_key1==1)
 779   1                      {
 780   2                      _key1=0;
 781   2                      whole_write();//把W29EE512的程序写入PM10P40中                   //red long key
 782   2                      verify_otp();      //???
 783   2                      CE_FLS=0;
 784   2                      if( 0x00==(XBYTE[0X8000]&0x20) )
 785   2                      {
 786   3                              pulse_read();    //???
 787   3                              write_protect();
 788   3                       }
 789   2                      }
 790   1              if(_key0==1)
 791   1                      {
 792   2                      _key0=0;
 793   2                      blank_check();//检查PM10P40是否为空
 794   2                      }
 795   1                      
 796   1              if(_lkey0==1)
 797   1                      {
 798   2                      _lkey0=0;
 799   2                      download_otp();///把PM10P40的程序读到W29EE512中
C51 COMPILER V8.02   OTP                                                                   12/19/2007 17:51:25 PAGE 14  

 800   2                      }
 801   1                      EA=1;   
 802   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1876    ----
   CONSTANT SIZE    =     15    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7      12
   IDATA SIZE       =   ----       2
   BIT SIZE         =   ----       7
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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