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

📄 func.c.bak

📁 EEPROM仿真器
💻 BAK
字号:
/****************************************************/
/**  Rom Emulator Software                   ********/ 
/**  Edited Starting  From  2005.1 By CGH    ********/
/****************************************************/
/*********Head File **********
Firmware : CPU --- AT89LV51 11.0592 MHz
          
Function:
      1. Rom emulator  
     
Solft Serials:
 V1.0.0
Copyright   Start Date  FinalDate     Author         
Uinsmmw     2005.1.26              honeyandy.chan 

****************************************************/

#define RAMADDR_LENGTH 3
#define RAMDATA_LENGTH 16

#define RAMADDRH_INDEX 0
#define RAMADDRHL_INDEX 1
#define RAMADDRLL_INDEX 2

#define RAMDATA_INDEX RAMADDR_LENGTH

/* SRAM Mode Selection*/

uchar data addrh; uint data addrl;

/***      89LV51 Pin Set           ****/

//sbit  P_DIR	   	=P1^0;	/* 单片机输入数据 (不变化,固定为低点平)*/
//sbit  P_LEDATA	=P1^1;	/* 单片机数据输出锁存*/
//sbit  P_LEADDRH    	=P1^2;	/* 单片机高地址锁存 */
//sbit  P_LEADDRLH   	=P1^3;	/* 单片机低地址H锁存 */
//sbit  P_LEADDRLL   	=P1^4;	/* 单片机低地址L锁存 */
//sbit  R_SEL	   	=P1^5;	/* 仿真头使能*/
//sbit  P_SELDATAOUT 	=P1^6;  /* 单片机输出数据使能*/
//sbit  P_SELDATAIN  	=P1^7; 	/* 单片机输入数据使能*/

//sbit  P_SELADDR    	=P3^2;  /* 单片机地址使能 */

void DownMode_Open( void )
{
	P_DIR = 0;
	
	 /*ECE EOE EWE high */
	
	addrh |= ( ECE_BIT | EOE_BIT | EWE_BIT );
	
	DATA_PORT = addrh;
	
	P_LEADDRH = 1;
	
	P_LEADDRH = 0;
	
	P_SELADDR = 0;
	
	/* LED flag */
     	L_PRG  = 0; 	
}


void RunMode_Open( void )
{
 	R_SEL = 0;
 	
 	/* LED flag */
 	        			
     	L_RUN  = 0;	
}

void AllMode_Free( void )
{
  	P_SELADDR = 1;
	P1 = 0xff; 
  
  	DATA_PORT = 0xff;
  
  	L_RUN = 1; L_PRG = 1;
	
}

/* SRAM Progress */


void SetSRAM_Addr( void )
{
	/* ADDRH */
	
	DATA_PORT = addrh;
	
	P_LEADDRH = 1;
		
	P_LEADDRH = 0;
	
	
	/* ADDRLH */
	
	DATA_PORT =  addrl >> 8;
	
	P_LEADDRLH = 1;
		
	P_LEADDRLH = 0;
	
	
	/* ADDRLL */
	
	DATA_PORT =  addrl ;
		
	P_LEADDRLL = 1;
		
	P_LEADDRLL = 0;
	
	
}

void WriteSRAM_Byte( uchar ram_byte )
{
	
	P_SELDATAOUT = 0;
	
	DATA_PORT = ram_byte;
	
	P_LEDATA = 1;
		
     	P_LEDATA = 0;
	
	/* ECE enable */
      	addrh &= ( ~ECE_BIT );
	
	DATA_PORT = addrh;
	
	P_LEADDRH = 1;
	
     	P_LEADDRH = 0;
	
	/* EWE enable */
      	addrh &= ( ~EWE_BIT );
	
	DATA_PORT = addrh;
	
	P_LEADDRH = 1;
			
     	P_LEADDRH = 0;
      
       
      
      	/* EWE high */
      	addrh |= EWE_BIT ;
	
	DATA_PORT = addrh;
	
	P_LEADDRH = 1;
	
     	P_LEADDRH = 0;
	
	/* ECE high */
      	addrh |= ECE_BIT ;
	
	DATA_PORT = addrh;
	
	P_LEADDRH = 1;
			
     	P_LEADDRH = 0;
	
	
	P_SELDATAOUT = 1;
}

uchar ReadSRAM_Byte( void )
{
      	uchar ramdata;		
                   	      
      	/* ECE enable */
      	addrh &= ( ~ECE_BIT );
	
	DATA_PORT = addrh;
	
	P_LEADDRH = 1;
			
     	P_LEADDRH = 0;
	
	/* EOE enable */
      	addrh &= ( ~EOE_BIT );
	
	DATA_PORT = addrh;
	
	P_LEADDRH = 1;
			
     	P_LEADDRH = 0;
      
          	
	DATA_PORT = 0xff;
        
        P_SELDATAIN = 0;
        
        ramdata = DATA_PORT;
        
        P_SELDATAIN = 1;
        
      	/* EOE high */
    	addrh |= EOE_BIT ;
		
	DATA_PORT = addrh;
		
	P_LEADDRH = 1;
		
     	P_LEADDRH = 0;
	
	/* ECE high */
      	addrh |= ECE_BIT ;
	
	DATA_PORT = addrh;
	
	P_LEADDRH = 1;
		
	
     	P_LEADDRH = 0;
      	      		
      	return ramdata;		
}

void DownLoadSRAM( void )
{
	uchar i; 
	
	addrh +=( ubuf[ RAMADDRH_INDEX ] & 0x0f ) ;
	addrl = ( ubuf[ RAMADDRHL_INDEX ] << 8 ) | ubuf[ RAMADDRLL_INDEX ];
	
	
	for( i = 0; i < RAMDATA_LENGTH ; i++ ){
	
		SetSRAM_Addr();
	
		WriteSRAM_Byte( ubuf[ RAMDATA_INDEX + i ] );
		
		if( !(++addrl))
			 ++addrh;
	}

}

void UpLoadSRAM( void )
{
	uchar i; 
	
	addrh += ( ubuf[ RAMADDRH_INDEX ] & 0x0f );
	addrl = ( ubuf[ RAMADDRHL_INDEX ] << 8 ) | ubuf[ RAMADDRLL_INDEX ];
	
	
	for( i = 0; i < RAMDATA_LENGTH ; i++ ){
		
		SetSRAM_Addr();
		
		ubuf[ i ] = ReadSRAM_Byte();
		
		if( !(++addrl))
			 ++addrh;
		
	}
		
}

/* --------------------------------------
	Command  Check
----------------------------------------*/

//#define StartID	1 /*------- 启动下载,此时SRAM接口被切换到单片机端口(仿真头端口同时应保证也被释放)*/
//#define DownLoadID	2 /*------- 下载SRAM数据*/
//#define UpLoadID	3 /*------- 读取SRAM数据*/
//#define StopID	4 /*------- 释放SRAM接口,此时单片机,仿真头与SRAM的接口释放(高阻)*/
//#define RunID		5 /*------- 启动仿真,此时SRAM接口被切换到仿真头端口(单片机端口同时应保证也被释放)*/

void CommandProgress( void )
{
	uchar i;
	
	switch( ComID ){
		case 0:{
			return;
		}	break;	
		case StartID:{
			
			DownMode_Open();
			
			/* Response to PC */
			putc( '>' );
						
		}	break;
		case DownLoadID:{
			
			if( Upt == ( RAMADDR_LENGTH + RAMDATA_LENGTH ) ){
				DownLoadSRAM();	
			
				/* Response to PC */
				putc( '>' );
			}
			else return;
				
		}	break;
		case UpLoadID:{
			
			if( Upt == RAMADDR_LENGTH ){
			
				UpLoadSRAM();
			
				/* Response to PC */
				putc( '>' );
	
				for( i = 0 ; i < RAMDATA_LENGTH ; i++ )
					putc( ubuf[ i ] );
			}
			else return;		
		
		}	break;
		case StopID:{
			
			AllMode_Free();
			
			/* Response to PC */
			putc( '>' );
			
		}	break;
		case RunID:{
			
			RunMode_Open();
			
			/* Response to PC */
			putc( '>' );
			
		}	break;
		default :{
			
			/* Response to PC */
			putc( '^' );	/* invalid Command */
			
		}	break; 
    	}
	
	ComAA_bit = 0;Com55_bit = 0; ComID_bit = 0; ComID = 0; 
}

⌨️ 快捷键说明

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