#define MAIN_Fosc 22118400L //定义主时钟
#define Baudrate0 115200UL //串口0波特率600~115200
#include "STC15Fxxxx.H"
#include "ymodem.h"
#define WDT_Enable 0 //1: 允许内部看门狗, 0: 禁止
#define D_BRT0_1T_8bit (256 - MAIN_Fosc / 32 / Baudrate0) //计算波特率 1T 8bit
#define ISP_ADDRESS 0xE400 //ISP开始地址, 高地址必须是偶数, 注意要预留ISP空间,本例程留3K
#define UserflashLenth (ISP_ADDRESS-3) //用户FLASH长度, 保留个字节存放用户地址程序的跳转地址
/************* 本地变量声明 **************/
typedef void (*pFunction)(void);
pFunction Jump_To_Application;
u16 JumpAddress;
u16 FileLength;
u16 Y_TimeOut,WaitTime;
u8 packets_received, session_begin;
u8 idata file_name[FILE_NAME_LENGTH];
u8 idata file_size[FILE_SIZE_LENGTH];
u8 StartCode[3];
u16 FlashDestination;
u16 RxCnt;
u8 HandCnt;
u8 xdata RxBuff[1024];
u8 idata RxBuff_10[10];
u32 DownCheckSum,FlashCheckSum;
/************* 本地函数声明 **************/
u8 Hex2Ascii(u8 dat);
u8 UART_Download(void);
u16 Str2Int(u8 *inputstr);
void ISP_WriteByte(u16 addr, u8 dat);
void ISP_EraseSector(u16 addr);
u8 ISP_ReadByte(u16 addr);
//========================================================================
// 函数: void TX1_write2buff(u8 dat)
// 描述: 串口发送一个字节.
// 参数: dat: 要发送的字节.
// 返回: none.
// 版本: V1.0, 2013-4-29
//========================================================================
void TX1_write2buff(u8 dat)
{
TI = 0;
SBUF = dat;
while(!TI);
}
//========================================================================
// 函数: void PrintString1(u8 *p)
// 描述: 串口发送一个字符串.
// 参数: *p: 要发送的字符串指针.
// 返回: none.
// 版本: V1.0, 2013-4-29
//========================================================================
void PrintString1(u8 *p)
{
for(; *p > 0; p++) TX1_write2buff(*p);
}
//========================================================================
// 函数: void Tx_DEC_U16(u16 j)
// 描述: 把一个16位整型数转成十进制送串口发送.
// 参数: j: 要处理的16位整型数.
// 返回: none.
// 版本: V1.0, 2013-4-29
//========================================================================
void Tx_DEC_U16(u16 j)
{
u8 i;
u8