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

📄 xram.lst

📁 F020集成以太网接口核心模块SRAM例程源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 629   6      						*pRam++=*pRecvString++;
 630   6      
 631   6      					}
 632   5      
 633   5      					cRet = 1;
 634   5      				}
 635   4      				else
 636   4      				{
 637   5      					cRet = 0;
 638   5      				}
 639   4      			}
 640   3      		}
 641   2      	}
 642   1      	else if(strncmps(pRecvString,"readtram=",9)==0)
 643   1      	{// 读取指定的页
 644   2      		pRecvString+=9;
 645   2      
 646   2      		iPos=strpos(pRecvString,',');
 647   2      
 648   2      		if(iPos==-1) cRet=0;
 649   2      		else
 650   2      		{// 查找页面
 651   3      			pRecvString[iPos]=0;
 652   3      			cPage = atoi(pRecvString);
 653   3      			
 654   3      			if(cPage>=RAM_PAGE)
 655   3      			{
 656   4      				cRet = 0;
 657   4      			}
 658   3      			else
 659   3      			{
 660   4      				pRecvString+=iPos+1;
 661   4      
 662   4      				readlen = atoi(pRecvString);
 663   4      			
 664   4      				pRam = 0xC000;            // TRAM页内地址
 665   4      
 666   4      				P4&=0xF0;
 667   4      				P4|=cPage;               // 设置页
 668   4      
 669   4      				SendString("\r\nHex Value:\r\n");
 670   4      			
 671   4      				for(i=0;i<readlen;i++)
 672   4      				{
 673   5      					SendHex(*pRam);
 674   5      					SendBuf('(');
C51 COMPILER V3.96,  SN-83203013  XRAM                                                     09/15/07  22:18:10  PAGE 12  

 675   5      					SendBuf(*pRam++);
 676   5      					SendBuf(')');
 677   5      				}
 678   4      			
 679   4      				cRet = 1;
 680   4      			}
 681   3      						
 682   3      		}
 683   2      	}
 684   1      	else
 685   1      	{// 无效命令
 686   2      		cRet = 0;
 687   2      	}
 688   1      	
 689   1      	// 向主机发送应答
 690   1      	if(cRet)
 691   1      	{
 692   2      		SendString("\r\nOK\r\n");
 693   2      	}
 694   1      	else
 695   1      	{
 696   2      		SendString("\r\nError\r\n");
 697   2      	}
 698   1      
 699   1      }
 700          
 701          //-----------------------------------------------------
 702          // 函数功能:循环方式发送字符串
 703          // 输出参数:pSendString,char*:欲发送的字符串的缓冲区
 704          // 输出:无
 705          //-----------------------------------------------------
 706          void SendString(char *pSendString)
 707          {
 708   1      	
 709   1      	// 循环发送,首先关闭中断
 710   1      	ES0 =0;
 711   1      	
 712   1      	while(*pSendString!=0)
 713   1      	{
 714   2      		SBUF0 = *pSendString++;
 715   2      		while(TI0==0);
 716   2      		TI0=0;
 717   2      	}
 718   1      
 719   1      	ES0 = 1;
 720   1      }
 721          
 722          void SendBuf(BYTE buf)
 723          {
 724   1      	ES0 = 0;
 725   1      	
 726   1      	SBUF0 = buf;
 727   1      	while(TI0==0){}
 728   1      	TI0 = 0;
 729   1      			
 730   1      	ES0 = 1;
 731   1      }
 732          
 733          void SendHex(BYTE buf)
 734          {
 735   1      	ES0 = 0;
 736   1      	
C51 COMPILER V3.96,  SN-83203013  XRAM                                                     09/15/07  22:18:10  PAGE 13  

 737   1      	SBUF0 = ASCII_CODE[(buf>>4)&0x0F];
 738   1      	while(TI0==0){}
 739   1      	TI0 = 0;
 740   1      	
 741   1      	SBUF0 = ASCII_CODE[(buf&0x0F)];
 742   1      	while(TI0==0){}
 743   1      	TI0 = 0;
 744   1      	
 745   1      	ES0 = 1;
 746   1      }
 747          
 748          //-----------------------------------------
 749          // 功能:以16进制方式发送16位无符号数
 750          // 参数:wData,WORD:要发送的数据
 751          // 
 752          //-----------------------------------------
 753          void SendWordHex(WORD wData)
 754          {
 755   1      	SendHex(wData>>8);
 756   1      	SendHex(wData&0xff);
 757   1      }
 758          
 759          //-----------------------------------------------------
 760          // 功能:测试62LV256,地址范围为0x0000-0x7FFF,共32K
 761          // 输入参数:无
 762          // 输出:
 763          //----------------------------------------------------
 764          BYTE TestSRAM()
 765          {
 766   1      	int i;
 767   1      	BYTE iRet=1;
 768   1      
 769   1      	BYTE xdata *pSRAM;        // 定义指向外部RAM的指针
 770   1      
 771   1      	SendString("\r\nTest 62LV256:\r\n");
 772   1      
 773   1      	// 向RAM的0x0001,0x0003,0x0007等地址写入数据,然后分别读出
 774   1      		
 775   1      	pSRAM    = 0x0000;             // 指向外部RAM地址0
 776   1      
 777   1      	for(i=0;i<16;i++)
 778   1      	{
 779   2      		*pSRAM = TESTDATA[i];
 780   2      
 781   2      		pSRAM=((WORD)pSRAM<<1)|0x00001;
 782   2      	}
 783   1      	
 784   1      	pSRAM = 0x0000;
 785   1      	for(i=0;i<16;i++)
 786   1      	{
 787   2      		SendWordHex(pSRAM);
 788   2      		SendString(":");
 789   2      
 790   2      		if(*pSRAM!=TESTDATA[i])
 791   2      		{
 792   3      			SendString("Error,Write=");
 793   3      			SendHex(TESTDATA[i]);
 794   3      			SendString(",Read=");
 795   3      			SendHex(*pSRAM);
 796   3      
 797   3      			iRet = 0;              // 发现错误
 798   3      		}
C51 COMPILER V3.96,  SN-83203013  XRAM                                                     09/15/07  22:18:10  PAGE 14  

 799   2      		else
 800   2      		{
 801   3      			SendString("OK\r\n");
 802   3      		}
 803   2      
 804   2      		pSRAM=((WORD)pSRAM<<1)|0x00001;
 805   2      	}
 806   1      
 807   1      	return iRet;
 808   1      }
 809          
 810          //-----------------------------------------------------
 811          // 功能:测试62LV2568/1024,地址范围为0xC000-0xFFFF,共16K
 812          //       并分别使用外部4条地址线来选择最多16个页面
 813          // 输入参数:无
 814          // 输出:
 815          //----------------------------------------------------
 816          BYTE TestTRAM()
 817          {
 818   1      	BYTE i,j;
 819   1      	BYTE iRet=1;
 820   1      	BYTE testdata;
 821   1      
 822   1      	BYTE xdata *pSRAM;        // 定义指向外部RAM的指针
 823   1      
 824   1      	SendString("\r\nTest 62LV1024:\r\n");
 825   1      
 826   1      	
 827   1      	testdata = 0;
 828   1      	for(j=0;j<RAM_PAGE;j++)
 829   1      	{	
 830   2      
 831   2      		P4&=0xF0;
 832   2      		P4|=j;                         // 选择页面
 833   2      
 834   2      		pSRAM    = 0xC000;             // 指向外部RAM地址0
 835   2      
 836   2      		for(i=0;i<15;i++)
 837   2      		{
 838   3      			*pSRAM = testdata;
 839   3      
 840   3      			pSRAM=(((WORD)pSRAM<<1)|0xC001);
 841   3      
 842   3      			testdata++;
 843   3      		}
 844   2      	}
 845   1      	
 846   1      	// 读,校验
 847   1      	testdata = 0;
 848   1      
 849   1      	for(j=0;j<RAM_PAGE;j++)
 850   1      	{	
 851   2      
 852   2      		P4&=0xF0;
 853   2      		P4|=j;                         // 选择页面
 854   2      
 855   2      		SendString("PAGE=");
 856   2      		SendHex(j);
 857   2      		SendString(":\r\n");
 858   2      
 859   2      
 860   2      		pSRAM = 0xC000;
C51 COMPILER V3.96,  SN-83203013  XRAM                                                     09/15/07  22:18:10  PAGE 15  

 861   2      		for(i=0;i<15;i++)
 862   2      		{
 863   3      			SendWordHex(pSRAM);
 864   3      			SendString(":");
 865   3      
 866   3      			if(*pSRAM!=testdata)
 867   3      			{
 868   4      				SendString("Error,Write=");
 869   4      				SendHex(testdata);
 870   4      				SendString(",Read=");
 871   4      				SendHex(*pSRAM);
 872   4      				SendString("\r\n");
 873   4      
 874   4      				iRet = 0;              // 发现错误
 875   4      			}
 876   3      			else
 877   3      			{
 878   4      				SendString("OK\r\n");
 879   4      			}
 880   3      
 881   3      			pSRAM=(((WORD)pSRAM<<1)|0xC001);
 882   3      
 883   3      			testdata++;
 884   3      		}
 885   2      
 886   2      		SendString("\r\n");
 887   2      	
 888   2      	}
 889   1      
 890   1      	return iRet;
 891   1      }
 892          
 893          //----------------------------------------------------------
 894          // 功能:不区分大小写的字符串比较函数
 895          // 参数:pString1,char*:字符串1
 896          //       pString2,char*:字符串2
 897          //       iLen,int:长度
 898          // 返回值:-1:字符串相同;0:字符串不同
 899          //-----------------------------------------------------------
 900          char strncmps(char *pString1,char *pString2,int iLen)
 901          {
 902   1      	char cTemp;
 903   1      	int  i;
 904   1      
 905   1      	if(strlen(pString1)<iLen) return -1;
 906   1      
 907   1      	if(strlen(pString2)<iLen) return -1;
 908   1      
 909   1      	for(i=0;i<iLen;i++)
 910   1      	{
 911   2      		cTemp = pString1[i];
 912   2      
 913   2      		if(cTemp!=pString2[i])
 914   2      		{
 915   3      			if((cTemp>='A')&&(cTemp<='Z'))
 916   3      			{
 917   4      				cTemp = cTemp-'A'+'a';
 918   4      
 919   4      				if(cTemp!=pString2[i]) return -1;
 920   4      			}
 921   3      			else if((cTemp>='a')&&(cTemp<='z'))
 922   3      			{
C51 COMPILER V3.96,  SN-83203013  XRAM                                                     09/15/07  22:18:10  PAGE 16  

 923   4      				cTemp = cTemp-'a'+'A';
 924   4      
 925   4      				if(cTemp!=pString2[i]) return -1;
 926   4      			}
 927   3      			else return -1;
 928   3      		}
 929   2      	}
 930   1      
 931   1      	return 0;
 932   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1989    ----
   CONSTANT SIZE    =    296    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6      37
   IDATA SIZE       =     50    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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