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

📄 at45main.lst

📁 F020集成以太网接口核心模块DataFlash例程源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 559   3                              if(strncmps(pRecvString,"2",1)==0)
 560   3                              {// 控制LED2
 561   4                                      pRecvString+=2;
 562   4      
 563   4                                      if(strncmps(pRecvString,"on",2)==0)
 564   4                                      {// 打开LED
 565   5                                              P_LED2 = 1;
 566   5      
 567   5                                              cRet = 1;
 568   5                                      }
 569   4                                      else if(strncmps(pRecvString,"off",3)==0)
 570   4                                      {// 关闭LED
 571   5                                              P_LED2 = 0;
 572   5      
 573   5                                              cRet = 1;
 574   5                                      }
 575   4                                      else
 576   4                                      {
 577   5                                              cRet = 0;
 578   5                                      }
 579   4                              }
 580   3                      }
 581   2      
 582   2              }
 583   1              else if(strncmps(pRecvString,"erasepage=",10)==0)
 584   1              {// 擦除指定扇区
 585   2                      pRecvString+=10;
 586   2      
 587   2                      iPage = atoi(pRecvString);
 588   2                      
 589   2                      cRet=FlashPageErase(iPage);
 590   2                      
 591   2              }
 592   1              else if(strncmps(pRecvString,"eraseblock=",11)==0)
 593   1              {// 擦除指定块
 594   2                      pRecvString+=11;
 595   2      
 596   2                      iPage = atoi(pRecvString);
 597   2      
 598   2                      cRet=FlashBlockErase(iPage);
 599   2              }
 600   1              else if(strncmps(pRecvString,"writepage=",10)==0)
 601   1              {// 写入Flash
 602   2                      pRecvString+=10;
 603   2      
 604   2                      iPos=strpos(pRecvString,',');
 605   2      
 606   2                      if(iPos==-1) cRet=0;
 607   2                      else
 608   2                      {// 查找扇区
 609   3                              pRecvString[iPos]=0;
 610   3                              iPage = atoi(pRecvString);
 611   3                              
 612   3                              if(pRecvString[iPos+1]!=0)
C51 COMPILER V8.02   AT45MAIN                                                              08/18/2007 20:06:55 PAGE 11  

 613   3                              {
 614   4                                      pRecvString+=iPos+1;
 615   4                              
 616   4                                      // 通过Buffer1直接将数据写入到页面中,因此,除用户本次传送过来的数据外
 617   4                                      // 其它写入PAGE中的内容由BUFFER1中原来的内容决定
 618   4                                      cRet=FlashProgViaBuffer1(0,strlen(pRecvString),pRecvString,iPage);
 619   4                                      
 620   4                                      // 注释的部分通过先将数据写入Buffer,然后用命令将数据写入到主存的方法
 621   4                                      //FlashBuffer1Write(0,strlen(pRecvString),pRecvString);
 622   4                                      //FlashBuffer1ProgAutoErase(iPage);
 623   4      
 624   4                                      
 625   4                              }
 626   3                              else
 627   3                              {
 628   4                                      cRet = 0;
 629   4                              }
 630   3      
 631   3                      }
 632   2                      
 633   2              }
 634   1              else if(strncmps(pRecvString,"readpage=",9)==0)
 635   1              {// 读出一个扇区的指定内容
 636   2      
 637   2                      pRecvString+=9;
 638   2      
 639   2                      iPage = atoi(pRecvString);
 640   2                      
 641   2                      // 数据首先读取到buffer1,然后从buffer1中读出
 642   2                      if(PageToBuffer1(iPage)==1)
 643   2                      {
 644   3                              // AT45DB041,081的页面为256+8B
 645   3                              // AT45DB161的页面为512+16B
 646   3                              cRet=FlashBuffer1Read(0,264,g_cFlashReadBuffer);
 647   3                              g_cFlashReadBuffer[264]=0;
 648   3                      }
 649   2                      else cRet = 0;
 650   2      
 651   2                      if(cRet==1)
 652   2                      {
 653   3                              // 扇区内容传送到计算机
 654   3                              SendString("\r\nHex Value:\r\n");
 655   3                      
 656   3                              for(i=0;i<254;i++)
 657   3                              {
 658   4                                      SendHex(g_cFlashReadBuffer[i]);
 659   4                                      SendString("(");
 660   4                                      SendBuffer(&g_cFlashReadBuffer[i],1);
 661   4                                      SendString(")");
 662   4                                      SendString(" ");
 663   4                              }
 664   3                      }
 665   2      
 666   2              }
 667   1              else
 668   1              {// 无效命令
 669   2                      cRet = 0;
 670   2              }
 671   1              
 672   1              // 向主机发送应答
 673   1              if(cRet)
 674   1              {
C51 COMPILER V8.02   AT45MAIN                                                              08/18/2007 20:06:55 PAGE 12  

 675   2                      SendString("\r\nOK\r\n");
 676   2              }
 677   1              else 
 678   1              {
 679   2                      SendString("\r\nError\r\n");
 680   2              }
 681   1      
 682   1      }
 683          
 684          //-----------------------------------------------------
 685          // 函数功能:循环方式发送字符串
 686          // 输出参数:pSendString,char*:欲发送的字符串的缓冲区
 687          // 输出:无
 688          //-----------------------------------------------------
 689          void SendString(char *pSendString)
 690          {
 691   1              
 692   1              // 循环发送,首先关闭中断
 693   1              ES0 =0;
 694   1              
 695   1              while(*pSendString!=0)
 696   1              {
 697   2                      SBUF0 = *pSendString++;
 698   2                      while(TI0==0);
 699   2                      TI0=0;
 700   2              }
 701   1      
 702   1              ES0 = 1;
 703   1      }
 704          
 705          void SendBuffer(BYTE *pSend,WORD len)
 706          {
 707   1              
 708   1              // 循环发送,首先关闭中断
 709   1              ES0 =0;
 710   1              
 711   1              while(len)
 712   1              {
 713   2                      SBUF0 = *pSend++;
 714   2                      while(TI0==0);
 715   2                      TI0=0;
 716   2      
 717   2                      len--;
 718   2              }
 719   1      
 720   1              ES0 = 1;
 721   1      }
 722          
 723          void SendHex(BYTE buf)
 724          {
 725   1              ES0 = 0;
 726   1              
 727   1              SBUF0 = ASCII_CODE[(buf>>4)&0x0F];
 728   1              while(TI0==0){}
 729   1              TI0 = 0;
 730   1              
 731   1              SBUF0 = ASCII_CODE[(buf&0x0F)];
 732   1              while(TI0==0){}
 733   1              TI0 = 0;
 734   1              
 735   1              ES0 = 1;
 736   1      }
C51 COMPILER V8.02   AT45MAIN                                                              08/18/2007 20:06:55 PAGE 13  

 737          
 738          //---------------------------------------------------------
 739          // 软件延时函数
 740          //---------------------------------------------------------
 741          
 742          
 743          
 744                                                                                                  //                                              ;时钟周期数
 745                                                                                                  // lcall                                ;4
 746          void dly(BYTE cnt){while(cnt){cnt--;}}          // delay:       mov a,r7        ;1
 747                                                                                                  //                      jz quit         ;2
 748                                                                                                  //                      dec r7          ;1
 749                                                                                                  //                      sjmp delay      ;2
 750                                                                                                  // quit:        ret                     ;1
 751                                                                                                  // 6n+5 sysclk @c8051f022(0.5425)
 752                                                                                                  // 延时(6n+5)*0.0904us @11.0592MHZ
 753          
 754          //....................................................................................
 755          // 延时ms毫秒
 756          //....................................................................................
 757          void Dlyms(WORD ms)                                                 // 延时cnt(ms)@11.0592MHZ
 758          {
 759   1              while(ms)
 760   1              {
 761   2                      dly(250);
 762   2                      dly(210);
 763   2      
 764   2                      dly(250);
 765   2                      dly(210);
 766   2      
 767   2                      dly(250);
 768   2                      dly(210);
 769   2      
 770   2                      dly(250);
 771   2                      dly(210);
 772   2      
 773   2                      dly(250);
 774   2                      dly(210);
 775   2      
 776   2                      dly(250);
 777   2                      dly(210);
 778   2      
 779   2                      dly(250);
 780   2                      dly(210);
 781   2      
 782   2                      dly(250);
 783   2                      dly(210);
 784   2      
 785   2                      ms--;
 786   2              }
 787   1      }
 788          
 789          //----------------------------------------------------------
 790          // 功能:不区分大小写的字符串比较函数
 791          // 参数:pString1,char*:字符串1
 792          //       pString2,char*:字符串2
 793          //       iLen,int:长度
 794          // 返回值:-1:字符串相同;0:字符串不同
 795          //-----------------------------------------------------------
 796          char strncmps(char *pString1,char *pString2,int iLen)
 797          {
 798   1              char cTemp;
C51 COMPILER V8.02   AT45MAIN                                                              08/18/2007 20:06:55 PAGE 14  

 799   1              int  i;
 800   1      
 801   1              if(strlen(pString1)<iLen) return -1;
 802   1      
 803   1              if(strlen(pString2)<iLen) return -1;
 804   1      
 805   1              for(i=0;i<iLen;i++)
 806   1              {
 807   2                      cTemp = pString1[i];
 808   2      
 809   2                      if(cTemp!=pString2[i])
 810   2                      {
 811   3                              if((cTemp>='A')&&(cTemp<='Z'))
 812   3                              {
 813   4                                      cTemp = cTemp-'A'+'a';
 814   4      
 815   4                                      if(cTemp!=pString2[i]) return -1;
 816   4                              }
 817   3                              else if((cTemp>='a')&&(cTemp<='z'))
 818   3                              {
 819   4                                      cTemp = cTemp-'a'+'A';
 820   4      
 821   4                                      if(cTemp!=pString2[i]) return -1;
 822   4                              }
 823   3                              else return -1;
 824   3                      }
 825   2              }
 826   1      
 827   1              return 0;
 828   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1478    ----
   CONSTANT SIZE    =    182    ----
   XDATA SIZE       =    820    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6      26
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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