u16 GetAddress(void)
{
u16 address;
u8 i;
address = 0;
if(RX1_Cnt < 3) return 65535; //error
if(RX1_Cnt <= 5) //Within 5 bytes is sector operation, decimal,
//Command supported: E 0, E 12, E 120
// W 0, W 12, W 120
// R 0, R 12, R 120
{
for(i=2; i<RX1_Cnt; i++)
{
if(CheckData(RX1_Buffer[i]) > 9)
return 65535; //error
address = address * 10 + CheckData(RX1_Buffer[i]);
}
if(address < 124) //Limited to sectors 0~123
{
address <<= 9;
return (address);
}
}
else if(RX1_Cnt == 8) //8 bytes direct address operation, hex,
//Command supported: E 0x1234, W 0x12b3, R 0x0A00
{
if((RX1_Buffer[2] == '0') && ((RX1_Buffer[3] == 'x') || (RX1_Buffer[3] == 'X')))
{
for(i=4; i<8; i++)
{
if(CheckData(RX1_Buffer[i]) > 0x0F)
return 65535; //error
address = (address << 4) + CheckData(RX1_Buffer[i]);
}
if(address < 63488)
return (address); //Limited to sectors 0~123
}
}
return 65535; //error
}
//========================================================================
// Function: void delay_ms(u8 ms)
// Description: delay function
// Parameters: ms, the number of ms to delay, here only supports 1~255ms. Automatically adapt to the main clock.
// Return: none.
// Version: VER1.0
// Date: 2013-4-1
// Remark:
//========================================================================
void delay_ms(u8 ms)
{
u16 i;
do
{
i = MAIN_Fosc / 10000;