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

📄 main.lst

📁 一个编程器的下位机固件
💻 LST
📖 第 1 页 / 共 4 页
字号:
 536   1         *fusebit = Tiny_SendByte(0);   //send low byte
 537   1       
 538   1         fusebit ++;
 539   1      
 540   1         Tiny_SendByte(0x58);     
 541   1         Tiny_SendByte(0x08);
 542   1         Tiny_SendByte(0);  
 543   1         *fusebit = Tiny_SendByte(0);   //send low byte 
 544   1      }
 545          
 546          
 547          ////////////////////////////////////////////////////////////////
 548          void Tiny_WriteLockBit(uchar lockdata)
 549          {
 550   1         Tiny_SendByte(0xac);     
 551   1         Tiny_SendByte(0xe0);
C51 COMPILER V7.50   MAIN                                                                  06/11/2008 14:41:36 PAGE 10  

 552   1         Tiny_SendByte(0);  
 553   1         Tiny_SendByte(/*0xc0 & */lockdata);   //send low byte 
 554   1      //   clock_vDelay(200);                   //delay
 555   1      }
 556          
 557          
 558          ////////////////////////////////////////////////////////////////
 559          void Tiny_WriteFuseBit(uchar* fusedata)
 560          {
 561   1         Tiny_SendByte(0xac);     
 562   1         Tiny_SendByte(0xa0);
 563   1         Tiny_SendByte(0);  
 564   1         Tiny_SendByte(*fusedata++);   //send low byte 
 565   1      
 566   1         clock_vDelay(300);          //delay
 567   1      
 568   1         Tiny_SendByte(0xac);     
 569   1         Tiny_SendByte(0xa8);
 570   1         Tiny_SendByte(0);  
 571   1         Tiny_SendByte(*fusedata);   //send low byte 
 572   1      }
 573          
 574          
 575          ////////////////////////////////////////////////////////////////
 576          void Tiny_PowerUp()
 577          {  
 578   1         RST_SET();
 579   1         PW5V_OFF();
 580   1         clock_vDelay(50);
 581   1         SCK_CLR();
 582   1         RST_CLR();
 583   1         clock_vDelay(50);
 584   1         PW5V_ON();
 585   1         clock_vDelay(200);  //20ms
 586   1      }
 587          
 588          
 589          
 590          
 591          
 592          
 593          //////////////////////////////////////////////////////////////////////////
 594          void main (void)
 595          {
 596   1              uchar   i,j;
 597   1              uint    progdata;
 598   1              uchar   Pack[2];
 599   1              
 600   1              uchar k,RetValue;
 601   1              uint m;
 602   1              
 603   1              uint    ReadAddr,ReadCounter;
 604   1              uint    times = 0;
 605   1              uchar idata   buffer[90];
 606   1              uint    ProgStatus = PROGSTATUS_NONE;
 607   1              uint    progcount = 0;
 608   1              uchar   ChipType;
 609   1              uint    PicOscCal;
 610   1              uint    PicConfig[8];
 611   1              uint    PicBandgap;
 612   1              uint    PicOffset;
 613   1              uchar   BufOffset;
C51 COMPILER V7.50   MAIN                                                                  06/11/2008 14:41:36 PAGE 11  

 614   1              uint    PackType, PackLen;
 615   1              
 616   1              
 617   1              uint    Tiny_Offset;
 618   1              uchar   TinyLockBit;
 619   1              uchar   TinyFuse[2];
 620   1      
 621   1          serial_init();
 622   1              
 623   1              while(1)
 624   1              {
 625   2                      for(i=0; i<128;i++)      //get the package until end
 626   2                      {  
 627   3                 while(!RI);    //no data receive
 628   3                         buffer[i] = SBUF;
 629   3                 RI = 0;
 630   3      
 631   3                         if( (buffer[i] == '*') && 
 632   3                             (buffer[i - 1] == 'D') &&
 633   3                             (buffer[i - 2] == 'N') && 
 634   3                                 (buffer[i - 3] == 'E') )
 635   3                         {
 636   4                            break;
 637   4                         }
 638   3                      }
 639   2      
 640   2                      for(i=0; i<128; i++)      //decode the package
 641   2                      {
 642   3                              if( (buffer[i] == 'S') && 
 643   3                                  (buffer[i + 1] == 'E') && 
 644   3                                      (buffer[i + 2] == 'M') && 
 645   3                                  (buffer[i + 3] == 'I') && 
 646   3                                      (buffer[i + 4] == 'C') && 
 647   3                                      (buffer[i + 5] == 'O') )
 648   3                              { 
 649   4                                 j = BufOffset = i;
 650   4                                 break;
 651   4                              }
 652   3                      }
 653   2      
 654   2                      Pack[0] = buffer[BufOffset + 6];
 655   2                      Pack[1] = buffer[BufOffset + 7];
 656   2              PackType = Mult(Pack[0], Pack[1]);
 657   2      
 658   2                      switch(PackType)
 659   2                      {
 660   3                        case OPERATE_OK:
 661   3                                      ProgStatus = PROGSTATUS_NONE;
 662   3                                      if(ChipType == CHIP_PIC16F676)
 663   3                                      {
 664   4                                         ProgModeCancle();
 665   4                                         progcount = 0;
 666   4                                      }
 667   3                        break;
 668   3      
 669   3                        case  NEED_MCURET:
 670   3                                      ProgStatus = PROGSTATUS_NONE;
 671   3                                      if(ChipType == CHIP_PIC16F676)
 672   3                                      {
 673   4                                         ProgModeCancle();
 674   4                                         progcount = 0;
 675   4                                      }
C51 COMPILER V7.50   MAIN                                                                  06/11/2008 14:41:36 PAGE 12  

 676   3                                      SendPackage(RETURN_MCURET, 0, NULL); 
 677   3                        break;
 678   3      
 679   3                        case TEST_CHIP:
 680   3                                      ChipType = CHIP_NONE;   
 681   3                                      ProgStatus = PROGSTATUS_NONE;
 682   3                                      /////////////tiny test handler///////////////////////
 683   3                                      if (ChipType == CHIP_NONE)
 684   3                                      {
 685   4                                         Tiny_PowerUp();
 686   4                                         for(i=0; i<3; i++)
 687   4                                         {
 688   5                                                Tiny_SendByte(0xAC);
 689   5                                                Tiny_SendByte(0x53);
 690   5                                                RetValue =  Tiny_SendByte(0);   //if RetValue=0x53
 691   5                                                Tiny_SendByte(0);
 692   5                                                if(RetValue == 0x53)
 693   5                                                {
 694   6                                                   ChipType = CHIP_ATTINY;
 695   6                                                   SendPackage(RETURN_CHIP_ATTINY, 12, "Atmel Tiny13");
 696   6                                                       break;
 697   6                                                }
 698   5                                         }
 699   4                                      }
 700   3                                      ///////////////pic test handler////////////////////
 701   3                                      if (ChipType == CHIP_NONE)
 702   3                                      {    
 703   4                                          for(k=0; k<3; k++)
 704   4                                              {
 705   5                                              ProgModeSet();
 706   5                                                      for(m=0; m<0x3ff; m++)       //move pointer to 0x3fff
 707   5                                                      {
 708   6                                                        ProgIncAddr();
 709   6                                                      }
 710   5                                                      PicOscCal = ProgReadCode();           //read the osccal value
 711   5                                                      ProgCommandSet(PICCMD_LDCONFIG);      //send command,move pointer to 0x2000
 712   5                                                      clock_vDelay(1);                      //delay
 713   5                                                      for(i=0; i<16; i++)
 714   5                                                      {
 715   6                                                        PGDCLR();   //dat = 0
 716   6                                                        PGCSET();   //clk = 1
 717   6                                                        nop();
 718   6                                                        nop();
 719   6                                                        PGCCLR();   //clk = 0        
 720   6                                                      }
 721   5                                                      for(i=0; i<8; i++)     ///read 8 words config 
 722   5                                                      {                             
 723   6                                                        PicConfig[i] = ProgReadCode();
 724   6                                                        ProgIncAddr();
 725   6                                                      }
 726   5                                                      PicBandgap = PicConfig[7] & 0x3000;
 727   5                                                      ProgModeCancle();     
 728   5                                                      if(PicConfig[6] == 0x10e0)
 729   5                                                      {
 730   6                                                 ChipType = CHIP_PIC16F676;
 731   6                                                 SendPackage(RETURN_CHIP_PIC, 9, "PIC16F676");
 732   6                                                         break;
 733   6                                                      }
 734   5                                              }
 735   4                                      }
 736   3                                      ///////////////no chip tested//////////////////////////
 737   3                                      if(ChipType == CHIP_NONE)
C51 COMPILER V7.50   MAIN                                                                  06/11/2008 14:41:36 PAGE 13  

 738   3                                      {
 739   4                                        //SendPackage(RETURN_CHIP_NONE, 16, "No Chip Detected");
 740   4                                        ChipType = CHIP_PIC16F676;
 741   4                                        SendPackage(RETURN_CHIP_PIC, 9, "PIC16F676");
 742   4                                      } 
 743   3                             break;
 744   3      
 745   3                case WRITE_CONFIG:
 746   3                                      /////////////after finish the program memory write////////////
 747   3                                      if(ProgStatus != PackType)
 748   3                                      { 
 749   4                                        ProgStatus = PackType;
 750   4                                        ProgModeCancle();
 751   4                                        progcount = 0;
 752   4                                        ProgModeSet();
 753   4                                      }
 754   3      
 755   3                                      PackLen = Mult(buffer[BufOffset + 8], buffer[BufOffset + 9]);
 756   3                                      
 757   3                                      progdata = buffer[BufOffset + 10 + 15];   //msb
 758   3                                      progdata <<= 8;
 759   3                                      progdata += buffer[BufOffset + 10 + 14];    //lsb
 760   3                                      
 761   3                                      ProgWriteConfig(progdata);
 762   3                                      for(i=0; i<7; i++)
 763   3                                      {
 764   4                                        ProgCommandSet(PICCMD_INCADDR);
 765   4                                      }
 766   3                                      ProgCommandSet(PICCMD_PROGRAM);
 767   3                                      clock_vDelay(50);                   //delay
 768   3                                      //////////return status////////////////////
 769   3                                      SendPackage(RETURN_WRITE_CONFIG, 0, NULL); 
 770   3                             break;
 771   3               //////////////////////////////////////////////////////////
 772   3                       //tiny handler
 773   3                       //
 774   3                       //////////////////////////////////////////////////////////
 775   3                        case TINY_READ_LOCK:
 776   3                        case TINY_VERIFY_LOCK:
 777   3                     TinyLockBit = Tiny_ReadLockBit();
 778   3                     SendPackage(PackType-1, 1, &TinyLockBit);
 779   3                        break;
 780   3      
 781   3                        case TINY_READ_FUSE:
 782   3                        case TINY_VERIFY_FUSE:
 783   3                     Tiny_ReadFuseBit(TinyFuse);
 784   3                     SendPackage(PackType-1, 2, TinyFuse);
 785   3                        break;
 786   3      
 787   3                        case TINY_PROG_LOCK:
 788   3                             TinyLockBit = buffer[j + 10];
 789   3                     Tiny_WriteLockBit(TinyLockBit);
 790   3                     SendPackage(PackType-1, 0, NULL);
 791   3                        break;
 792   3      
 793   3                        case TINY_PROG_FUSE:
 794   3                         TinyFuse[0] = buffer[j + 10];
 795   3                     TinyFuse[1] = buffer[j + 11];
 796   3                     Tiny_WriteFuseBit(TinyFuse);
 797   3                     SendPackage(PackType-1, 0, NULL);
 798   3                        break;
 799   3      
C51 COMPILER V7.50   MAIN                                                                  06/11/2008 14:41:36 PAGE 14  

 800   3                ///////////////////////////////////////////////////////////////
 801   3                        case READ_CONFIG:
 802   3                                      if(ProgStatus != PackType)
 803   3                                      { 
 804   4                                        ProgStatus = PackType;
 805   4                                        ProgModeCancle();

⌨️ 快捷键说明

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