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

📄 otp.lst

📁 烧录器的上位机控制程序代码,和下位机程序代码,包括USB通讯固件
💻 LST
📖 第 1 页 / 共 3 页
字号:
 268   2              p_read++;
 269   2              tempw=*p_read;
 270   2      
 271   2              for(iw=0; iw<8; iw++)
 272   2              {
 273   3                              if(tempw&0x80)
 274   3                                      send_1bit(1);
 275   3                              else
 276   3                                      send_1bit(0);
 277   3                      tempw=tempw<<1; 
 278   3                      }
 279   2      
 280   2              send_1bit(0);                   //send low dummy clock    
 281   2              p_read++;
 282   2      
 283   2              }
 284   1      
 285   1      /*******write 0xffff at last unit as end*************/
 286   1      for(iw=0; iw<18; iw++)
 287   1         {
 288   2                      if(iw==17)
 289   2                              send_1bit(0);
 290   2                      else
 291   2                              send_1bit(1);   
 292   2              }
 293   1      
 294   1      VPP_CTRL=1;
 295   1      DelayXus();             //???
 296   1      DelayXus();
 297   1      
 298   1      }
 299          
 300          void otp_write(uchar page)
 301          {
 302   1              I2cReset();
 303   1              start();
C51 COMPILER V8.02   OTP                                                                   12/19/2007 17:51:25 PAGE 6   

 304   1              //void main_command(bit rw, uchar command_adrh, uchar command_adrl)
 305   1              main_command(1, 64*page/256, 64*page%256);
 306   1              write_data(&EpBuf[0], 64);
 307   1              stop(); 
 308   1      
 309   1              
 310   1              
 311   1      }
 312          
 313          void write_configue()
 314          {
 315   1              I2cReset();
 316   1              start();
 317   1              smart_command(1, 0x3f, 0xff);
 318   1              EpBuf[0]=0x20|EpBuf[0];         //加密位先不写
 319   1              write_data(&EpBuf[0], 1);
 320   1              stop();
 321   1      }
 322          
 323          
 324          void read_configue()
 325          {
 326   1              I2cReset();
 327   1              start();
 328   1              smart_command(0, 0x3f, 0Xff);
 329   1              read_data(&EpBuf[0]);   
 330   1              stop(); 
 331   1                  
 332   1      }
 333          
 334          void otp_read_usb(uchar page)           //母片读取
 335          {
 336   1              uchar io;
 337   1              I2cReset();
 338   1              start();
 339   1              main_command(0, 32*page/256, 32*page%256);
 340   1              for(io=0; io<64; io=io+2)
 341   1              {
 342   2              read_data(&EpBuf[io]);  
 343   2              }
 344   1              stop();
 345   1      
 346   1      }       
 347          
 348          void otp_read(uchar page)               //母片读取
 349          {
 350   1              uchar io;
 351   1              I2cReset();
 352   1              start();
 353   1              main_command(0, 64*page/256, 64*page%256);
 354   1              for(io=0; io<128; io=io+2)
 355   1              {
 356   2              read_data(&EpBuf[io]);  
 357   2              }
 358   1              stop();
 359   1      
 360   1      }       
 361          
 362          //1,AAAAAA,rw,1,AAAAAAAA,0,if x=0, showing read, else showing write
 363          void smart_command(bit rw, uchar command_adrh, uchar command_adrl)
 364          {
 365   1              uchar count;
C51 COMPILER V8.02   OTP                                                                   12/19/2007 17:51:25 PAGE 7   

 366   1              send_1bit(1);                   //show main mode
 367   1      for(count=0;count<6;count++)  /*要传送的数据长度为6位*/
 368   1          {
 369   2            if((command_adrh<<count)&0x20)
 370   2               send_1bit(1);
 371   2            else  
 372   2               send_1bit(0);
 373   2              }  
 374   1      
 375   1      if(rw==0)                                       //根据RW选择读写模式
 376   1              send_1bit(0);
 377   1      else
 378   1              send_1bit(1);
 379   1                      
 380   1              send_1bit(1);                   //high dummy clock
 381   1      for(count=0; count<8; count++)
 382   1              {
 383   2                      if((command_adrl<<count)&0x80)  /*要传送的数据长度为8位*/
 384   2                              send_1bit(1);
 385   2                      else
 386   2                              send_1bit(0);
 387   2              }
 388   1      
 389   1      send_1bit(0);                           //low dummy clock
 390   1      
 391   1      }
 392          
 393          
 394          
 395          
 396          
 397          void buzzer_3(void)
 398          {
 399   1              bit i=EA;
 400   1              EA=0;
 401   1              BZ_IO=0;
 402   1              DelayNms(125);
 403   1              BZ_IO=1;
 404   1              DelayNms(125);
 405   1              
 406   1              BZ_IO=0;
 407   1              DelayNms(125);
 408   1              BZ_IO=1;
 409   1              DelayNms(125);
 410   1              
 411   1              BZ_IO=0;
 412   1              DelayNms(125);
 413   1              BZ_IO=1;
 414   1              DelayNms(125);
 415   1              LED=1;          //LED_OFF
 416   1              EA=i;
 417   1      
 418   1      }
 419          
 420          
 421          void buzzer_1(void)
 422          {
 423   1              bit i=EA;
 424   1              EA=0;   
 425   1              BZ_IO=0;
 426   1              DelayNms(250);
 427   1              BZ_IO=1;
C51 COMPILER V8.02   OTP                                                                   12/19/2007 17:51:25 PAGE 8   

 428   1              LED=0;          //LED_ON
 429   1              EA=i;
 430   1      }
 431          
 432          void buzzer_2(void)
 433          {
 434   1              bit i=EA;
 435   1              EA=0;
 436   1              BZ_IO=0;
 437   1              DelayNms(125);
 438   1              BZ_IO=1;
 439   1              DelayNms(125);
 440   1              BZ_IO=0;
 441   1              DelayNms(125);
 442   1              BZ_IO=1;
 443   1              LED=1;          //LED_OFF
 444   1              EA=i;
 445   1      }
 446          
 447          void write_page(uint page, uchar *p_buf)
 448          {
 449   1              uchar i;
 450   1              uint adr;
 451   1              CE_FLS =0;
 452   1              adr=128*page;           //start address
 453   1              XBYTE[0x5555]=0xaa;
 454   1              XBYTE[0x2aaa]=0x55;
 455   1              XBYTE[0x5555]=0xa0;
 456   1              for(i=0; i<128; i++)
 457   1              {       XBYTE[adr]=*p_buf;              
 458   2                      adr++;
 459   2                      p_buf++;
 460   2              }
 461   1              DelayNms(15);           //???
 462   1      }
 463          
 464          void download_otp(void)
 465          {
 466   1              uchar ib, temp1, temp2;
 467   1              uint adr;       
 468   1              if(!PIN_TEST())
 469   1                      {
 470   2                                      buzzer_3();
 471   2                                      buzzer_3();
 472   2                                      return;
 473   2                      }
 474   1              for(ib=0; ib<mcu_size[otp_type]*16; ib++)
 475   1                      {
 476   2                              otp_read(ib);
 477   2                              P1=P1^0x01;
 478   2                              write_page(ib, &EpBuf[0]);
 479   2                      }                       
 480   1                              
 481   1      
 482   1      
 483   1              read_configue();                //read config and save them start at 0x8000
 484   1                                
 485   1              CE_FLS = 0;
 486   1              temp1=XBYTE[0X8002];            //get mcu_type
 487   1              temp2=XBYTE[0X8003];
 488   1              
 489   1              adr=0x8000;
C51 COMPILER V8.02   OTP                                                                   12/19/2007 17:51:25 PAGE 9   

 490   1              XBYTE[0x5555]=0xaa;
 491   1              XBYTE[0x2aaa]=0x55;
 492   1              XBYTE[0x5555]=0xa0;
 493   1              XBYTE[adr++]=EpBuf[0]&0xdf;       //默认选择加密
 494   1              XBYTE[adr++]=EpBuf[1];
 495   1              XBYTE[adr++]=temp1;
 496   1              XBYTE[adr++]=temp2;
 497   1              for(ib=0; ib<124; ib++)
 498   1              {       
 499   2                      XBYTE[adr++]=0xff;              
 500   2              }
 501   1              DelayNms(15);
 502   1      
 503   1              verify_otp();                   //校验
 504   1                      
 505   1      }
 506          
 507          unsigned int cal_checksum()     //
 508          {
 509   1      unsigned int i, chksum;
 510   1      chksum=0x0000;  
 511   1      CE_FLS = 0;
 512   1      
 513   1      for(i=0; i<mcu_size[otp_type]*1024; i++)
 514   1      {
 515   2      chksum=XWORD[i]+chksum; 
 516   2      nop; nop;               
 517   2      }       
 518   1      
 519   1      return chksum;  
 520   1                      
 521   1      }
 522          
 523          
 524          unsigned char blank_check(void)
 525          {
 526   1              uchar ib, jb;
 527   1              if(!PIN_TEST())
 528   1                      {
 529   2                              buzzer_3();
 530   2                              buzzer_3();
 531   2                              return 2;
 532   2                      }
 533   1              
 534   1              pulse_read();   
 535   1              for(ib=0; ib<mcu_size[otp_type]*16; ib++)
 536   1                      {
 537   2                              otp_read(ib);
 538   2                              for(jb=0; jb<128; jb=jb+2)
 539   2                                      {
 540   3                                      if(EpBuf[jb]!=0x3f||EpBuf[jb+1]!=0xff)
 541   3                                                              {       
 542   4      
 543   4                                                                      buzzer_3();

⌨️ 快捷键说明

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