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

📄 xram.lst

📁 F020集成以太网接口核心模块SRAM例程源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 310   1          // P3.2  -  Unassigned,  Open-Drain, Digital
 311   1          // P3.3  -  Unassigned,  Open-Drain, Digital
 312   1          // P3.4  -  Unassigned,  Open-Drain, Digital
 313   1          // P3.5  -  Unassigned,  Open-Drain, Digital
 314   1          // P3.6  -  Unassigned,  Open-Drain, Digital
 315   1          // P3.7  -  Unassigned,  Open-Drain, Digital
 316   1      
 317   1          P1MDIN    = 0x00;
 318   1          P3MDOUT   = 0x02;
 319   1          XBR0      = 0x07;
 320   1          XBR1      = 0x14;
 321   1          XBR2      = 0x44;
 322   1      
 323   1      	
 324   1      }
 325          
 326          void Oscillator_Init()
 327          {
 328   1          int i = 0;
 329   1          OSCXCN    = 0x67;
 330   1          for (i = 0; i < 3000; i++);  // Wait 1ms for initialization
 331   1          while ((OSCXCN & 0x80) == 0);
 332   1          OSCICN    = 0x08;
 333   1      }
 334          
 335          void Interrupts_Init()
 336          {
 337   1      	//..................................
 338   1      	// 初始化中断
 339   1      	// EA IEGF0 ET2 ES0 ET1 EX1 ET0 EX0
 340   1          //..................................
 341   1          IE  = 0;
 342   1      
 343   1      	ET0 = 1;        // 打开定时器0中断
 344   1      
 345   1      	
 346   1      	ES0 = 1;        // 使能串口中断
 347   1      	
 348   1      
 349   1      }
 350          
 351          //-------------------------------
 352          // 功能:    初始化单片机内部资源
 353          // 输入参数:无
 354          // 输出参数:无
 355          //-------------------------------
 356          void Init_Device(void)
 357          {
 358   1      	EMI_Init();
 359   1          Timer_Init();
 360   1      
 361   1          Port_IO_Init();
 362   1      
 363   1          Oscillator_Init();
 364   1      	
C51 COMPILER V3.96,  SN-83203013  XRAM                                                     09/15/07  22:18:10  PAGE 7   

 365   1      	UART0_Init();
 366   1      
 367   1          Interrupts_Init();
 368   1      }
 369          
 370          //------------------------------------------------
 371          // 函数名称:InitVariable()
 372          // 函数功能:初始化系统全局变量
 373          //------------------------------------------------
 374          void InitVariable()
 375          {
 376   1      	g_cMainSignal = 0;
 377   1      
 378   1      	g_sTime.base  = 0;
 379   1      	g_sTime.second= 0;
 380   1      	g_sTime.minute= 0;
 381   1      	
 382   1      	g_cRecvPointer =0;
 383   1      	g_cRecvLength  =0;
 384   1      
 385   1      
 386   1      }
 387          
 388          //-------------------------------------------------------------
 389          // 函数名称:定时器0中断入口函数,完成计时功能,定时时间为25ms
 390          // 输入参数: 无
 391          // 输出参数: 无
 392          //-------------------------------------------------------------
 393          
 394          void timer0() interrupt 1
 395          {
 396   1      	TH0=TMR0H;
 397   1      	TL0=TMR0L;
 398   1      
 399   1      	// 程序时基信号
 400   1      	if(++g_sTime.base>=TICKS_PER_SEC)
 401   1      	{// 1s到
 402   2      		g_sTime.base = 0;
 403   2      
 404   2      		g_cMainSignal|=SECD_SIGNAL;      // 产生秒信号
 405   2      
 406   2      		if(++g_sTime.second>59)
 407   2      		{// 1分钟到
 408   3      			g_sTime.second = 0;
 409   3      
 410   3      			g_cMainSignal|=MINU_SIGNAL;  // 产生分信号
 411   3      
 412   3      			if(++g_sTime.minute>59) g_sTime.minute=0;
 413   3      		}
 414   2      	}
 415   1      
 416   1      
 417   1      
 418   1      }
 419          
 420          //..................................................
 421          // 串口0中断服务程序
 422          // 
 423          //.................................................
 424          void Uart0() interrupt 4
 425          {
 426   1      	BYTE cRecvData;
C51 COMPILER V3.96,  SN-83203013  XRAM                                                     09/15/07  22:18:10  PAGE 8   

 427   1      
 428   1      	if(RI0)								// 如果收到数据
 429   1      	{
 430   2      		RI0=0;							// 清除收到数据标志
 431   2      		
 432   2      		cRecvData = SBUF0;		        // 读取数据
 433   2      		SBUF0 = cRecvData;              // 回显
 434   2      
 435   2      		if(cRecvData=='\r')
 436   2      		{// 回车符作为结束标志
 437   3      			g_cRecvBuffer[g_cRecvPointer]=0; // 接收结束
 438   3      			g_cRecvPointer = 0;
 439   3      
 440   3      			g_cMainSignal|=UART0RECV_SIGNAL; // 接收完成信号
 441   3      			
 442   3      		}
 443   2      		else if(cRecvData==0x08)
 444   2      		{// CTRL+H控制键,退格
 445   3      			if(g_cRecvPointer>0) g_cRecvPointer--;
 446   3      		}
 447   2      		else			
 448   2      		{
 449   3      			if(g_cRecvPointer<RECVBUF_LEN)
 450   3      			{
 451   4      				if(isupper(cRecvData))
 452   4      				{// 大写字符转换为小写
 453   5      					cRecvData = _tolower(cRecvData);
 454   5      				}
 455   4      				g_cRecvBuffer[g_cRecvPointer++]=cRecvData;
 456   4      			}
 457   3      			else
 458   3      			{// 数据长度错误
 459   4      				g_cRecvPointer = 0;
 460   4      			}
 461   3      		}
 462   2      		
 463   2      
 464   2      	}
 465   1      
 466   1      	if(TI0)								// 如果数据发送结束
 467   1      	{
 468   2      		TI0=0;		
 469   2      	}
 470   1      	
 471   1      }
 472          
 473          
 474          //------------------------------------------------------------------
 475          // 主函数开始
 476          //-------------------------------------------------------------------
 477          void main()
 478          {
 479   1      	Init_Device();        // 初始化系统
 480   1      	InitVariable();       // 初始化变量
 481   1      	
 482   1      	EA=0;				  // 禁止看门狗
 483   1      	WDTCN = 0xDE;	      // 实验中不使用看门狗
 484   1      	WDTCN = 0xAD;	
 485   1      
 486   1      	EA = 1;               // 打开中断
 487   1      	 
 488   1          TR0  = 1;             // 启动定时器0
C51 COMPILER V3.96,  SN-83203013  XRAM                                                     09/15/07  22:18:10  PAGE 9   

 489   1      
 490   1      	SendString("C8051F02x core Module EC1,v1.0\r\n");
 491   1      	SendString("XRAM with 62WV1024 Test\r\n");
 492   1      	
 493   1      	while(1)
 494   1      	{
 495   2      
 496   2      		if(g_cMainSignal&SECD_SIGNAL)
 497   2      		{// 秒信号
 498   3      			g_cMainSignal&=~SECD_SIGNAL;
 499   3      
 500   3      			P_LED2=!P_LED2;
 501   3      		}
 502   2      
 503   2      		if(g_cMainSignal&MINU_SIGNAL)
 504   2      		{// 分信号
 505   3      			g_cMainSignal&=~MINU_SIGNAL;
 506   3      		}
 507   2      
 508   2      		if(g_cMainSignal&UART0RECV_SIGNAL)
 509   2      		{// UART0接收完成信号
 510   3      			g_cMainSignal&=~UART0RECV_SIGNAL;
 511   3      			
 512   3      			// 确保接收缓冲区内的字符串有结尾
 513   3      			g_cRecvBuffer[RECVBUF_LEN-1] = 0;
 514   3      			// 分析接收的命令
 515   3      			CommandProc(g_cRecvBuffer);
 516   3      
 517   3      		}
 518   2      
 519   2      	}
 520   1      
 521   1      }
 522          
 523          //......................................
 524          // 功能:分析接收的命令
 525          // 输入参数:
 526          //    pRecvString,char *:输入字符串
 527          // 输出参数:无
 528          // 命令格式说明:
 529          // setled=灯序号,开关状态 \r
 530          // 灯序号:   1,LED1;2,LED2
 531          // 开关状态:ON,打开灯;OFF,关闭灯
 532          // 命令字符不区分大小写
 533          //.......................................
 534          void CommandProc(char *pRecvString)
 535          {
 536   1      	BYTE cRet=0;
 537   1      	int  iPos,i,readlen;
 538   1      	BYTE cPage;
 539   1      	BYTE xdata *pRam;
 540   1      	
 541   1      	if(strncmps("setled=",pRecvString,7)==0)
 542   1      	{// 设置LED状态命令
 543   2      		
 544   2      		pRecvString+=7;
 545   2      		
 546   2      		iPos=strpos(pRecvString,',');
 547   2      
 548   2      		if(iPos==-1)
 549   2      		{// 无效命令
 550   3      			cRet = 0;
C51 COMPILER V3.96,  SN-83203013  XRAM                                                     09/15/07  22:18:10  PAGE 10  

 551   3      		}
 552   2      		else
 553   2      		{
 554   3      			if(strncmps(pRecvString,"2",1)==0)
 555   3      			{// 控制LED2
 556   4      				pRecvString+=2;
 557   4      
 558   4      				if(strncmps(pRecvString,"on",2)==0)
 559   4      				{// 打开LED
 560   5      					P_LED2 = 1;
 561   5      
 562   5      					cRet = 1;
 563   5      				}
 564   4      				else if(strncmps(pRecvString,"off",3)==0)
 565   4      				{// 关闭LED
 566   5      					P_LED2 = 0;
 567   5      
 568   5      					cRet = 1;
 569   5      				}
 570   4      				else
 571   4      				{
 572   5      					cRet = 0;
 573   5      				}
 574   4      			}
 575   3      		}
 576   2      
 577   2      	}
 578   1      	else if(strncmps(pRecvString,"testsram",8)==0)
 579   1      	{
 580   2      		// 测试62LV256	
 581   2      		if(1==TestSRAM())
 582   2      		{
 583   3      			SendString("62LV256 Test OK!\r\n");
 584   3      
 585   3      			cRet = 1;
 586   3      		}
 587   2      		else cRet = 0;
 588   2      	}
 589   1      	else if(strncmps(pRecvString,"testtram",8)==0)
 590   1      	{// 测试62LV2567,测试的过程中TRAM中的数据会被修改
 591   2      		if(1==TestTRAM())
 592   2      		{
 593   3      			SendString("62LV1024 Tesk OK!\r\n");
 594   3      
 595   3      			cRet = 1;
 596   3      		}
 597   2      		else cRet = 0;
 598   2      
 599   2      	}
 600   1      	else if(strncmps(pRecvString,"writetram=",10)==0)
 601   1      	{// 向指定的TRAM存储区域写数据
 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      			cPage = atoi(pRecvString);
 611   3      			
 612   3      			if(cPage>=RAM_PAGE)
C51 COMPILER V3.96,  SN-83203013  XRAM                                                     09/15/07  22:18:10  PAGE 11  

 613   3      			{
 614   4      				cRet = 0;
 615   4      			}
 616   3      			else
 617   3      			{
 618   4      				if(pRecvString[iPos+1]!=0)
 619   4      				{
 620   5      					pRecvString+=iPos+1;
 621   5      			
 622   5      					pRam = 0xC000;            // TRAM页内地址
 623   5      	
 624   5      					P4&=0xF0;
 625   5      					P4|=cPage;               // 设置页
 626   5      
 627   5      					while((*pRecvString)!=0)
 628   5      					{// 写入TRAM中

⌨️ 快捷键说明

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