 /*---------------------定义IAP操作模式字与测试地址---------------------*/
#define  CMD_IDLE       0        //无效模式
#define  CMD_READ       1        //读命令
#define  CMD_PROGRAM    2        //编程命令
#define  CMD_ERASE      3       //擦除命令
#define  ENABLE_IAP   0x82       //允许IAP，并设置等待时间
#define  IAP_ADDRESS  0x0000       //EEPROM操作起始地址

 /*----------------------写EEPROM字节子函数---------------------*/
void IapProgramByte(uint addr,  uchar dat)    //对字节地址所在扇区擦除
{
	IAP_CONTR = ENABLE_IAP;		           //设置等待时间,并允许IAP操作
	IAP_CMD = CMD_PROGRAM;				      //送编程命令0x02
	IAP_ADDRL =addr;                      //设置IAP编程操作地址
	IAP_ADDRH = addr>>8;
	IAP_DATA = dat;                       //设置编程数据
	IAP_TRIG = 0x5a;			   //对IAP_TRIG先送0x5a,再送0xa5触发IAP启动
	IAP_TRIG = 0xa5;
	_nop_();				             //稍等待操作完成
	IAP_CONTR=0x00;     //关闭IAP功能
}
/*----------------------扇区擦除---------------------*/
void IapEraseSector(uint addr)
{
	IAP_CONTR = ENABLE_IAP;	            //设置等待时间3,并允许IAP操作
	IAP_CMD = CMD_ERASE;			         	//送扇区删除命令0x03
	IAP_ADDRL = addr;                      //设置IAP扇区删除操作地址
	IAP_ADDRL = addr>>8;
	IAP_TRIG = 0x5a;			    //对IAP_TRIG先送0x5a,再送0xa5触发IAP启动
	IAP_TRIG = 0xa5;
	_nop_();				                //稍等待操作完成
	IAP_CONTR=0x00;     //关闭IAP功能 
}
 /*----------------------读EEPROM字节子函数---------------------*/
uchar  IapReadByte(uint  addr)	  //形参为高位地址和低位地址
{
	uchar  dat;
	IAP_CONTR = ENABLE_IAP;		          //设置等待时间,并允许IAP操作
	IAP_CMD = CMD_READ;				 //送读字节数据命令0x01
	IAP_ADDRL = addr;                      //设置IAP读操作地址
	IAP_ADDRH = addr>>8;
	IAP_TRIG = 0x5a;			   //对IAP_TRIG先送0x5a,再送0xa5触发IAP启动
	IAP_TRIG=0xa5;
	_nop_();				             //稍等待操作完成
	dat= IAP_DATA;		            //返回读出数据
	IAP_CONTR=0x00;     //关闭IAP功能
	return dat;
}
