📄 func.c.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 + -