#include <stc15.h>    // 包含支持IAP15W4K58S4单片机的头文件
#include <intrins.h>
#include <gpio.h>            //I/O初始化文件
#define uchar  unsigned  char   
#define uint  unsigned  int
#include<EEPROM.h>			         //EEPROM操作函数文件
sbit Green_LED=P1^7;	  //定义LED灯控制引脚
sbit Blue_LED=P1^6;
sbit Red_LED=P1^5;
sbit Yellow_LED=P1^4;
/*---------------------延时子函数，从STC-ISP在线编程软件工具中获取---------------------*/
void Delay500ms()		//@12.000MHz
{
	unsigned char i, j, k;

	_nop_();
	_nop_();
	i = 23;
	j = 205;
	k = 120;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

/*----------------------主函数---------------------*/
void main()
{
	uint i;
	gpio();                 //I/O初始化
	Green_LED=0;                        //程序运行时，点亮绿色LED灯
	Delay500ms();             
	IapEraseSector(IAP_ADDRESS);      //扇区擦除  
	for(i=0;i<512; i++)
	{
		if(IapReadByte (IAP_ADDRESS+i)!=0xff)
		goto Error;			                    // 转错误处理
	}
	Blue_LED=0;                               //扇区擦除成功，再点亮蓝色LED灯
	Delay500ms();  
	for(i=0;i<512;i++)
	{
		IapProgramByte (IAP_ADDRESS+i, (uchar)i);
	}
	Red_LED=0;                               //编程完成，再点亮红色LED灯
	Delay500ms();
	for(i=0;i<512;i++)
	{
		if(IapReadByte(IAP_ADDRESS+i)!=(uchar)i)
		goto  Error;			                //转错误处理  
	}
	Yellow_LED=0;                          //编程校验成功成功，再点亮黄色LED灯
	while(1);
Error:                 //若扇区擦除不成功或编程校验不成功，黄色LED灯闪烁 
	while(1)
	{
	 	Yellow_LED=~Yellow_LED;
		Delay500ms();	
	}
}
