#include <stdio.h>
#include "AD18F06A.h"
#include "periph.h"


/*******************************************************************************
* Description    : 方式一:正常向Eeprom中写入数据
* Input          : addr-写入的地址；dat-待写入的数据
* Return         : None.
* Note           : None.
*******************************************************************************/
void EEPROM_Write_Mode0(unsigned char addr,unsigned char dat)
{

	GIE = 0;        //Eeprom的操作过程中必须关闭中断
    IAPWAIT = 0x17;   //系统时钟16MHz，按照写入时间设定EEPROM操作时间
    //放入待写入数据
    EEADR  = addr;
    EEDAT  = dat;
    EEIF   = 0;
    //进入到 IAP mode
    EECON1 = 0X04;
    EECON2 = 0x18;
    EECON2 = 0XF6;
    EECON1 = 0x06;
    //等待写入完成
    while(EEIF==0);
    //EEPROM的操作过程中必须关闭中断，如有需求可在操作完成后使能中断
    //GIE = 1;          //打开总中断使能位，若应用程序有中断使能需求，请去掉注释
}

/*******************************************************************************
* Description    : 方式二:向Eeprom中写入数据前先进行擦除,之后用EEPROM_Writer_Mode1函数写入
* Input          : addr-写入的地址
* Return         : None.
* Note           : None.
*******************************************************************************/
void EEPROM_Erase_Mode1(unsigned char addr)
{

	GIE = 0;            //Eeprom的操作过程中必须关闭中断
    IAPWAIT = 0x20;     //系统时钟16MHz，按照写入时间设定EEPROM操作时间
    EEADR = addr;	    //写EEPROM数据地址
    EEIF = 0;	        //清中断标志
    //进入到 IAP mode
    EECON1 = 0X20;	    //使能ERBEN
    EECON2 = 0X18;
    EECON2 = 0XF6;
    EECON1 = 0X22;	    //使能WR擦除
    while(EEIF==0);	    //等待擦除成功中断标志
	//GIE = 1;           //Eeprom的操作过程中必须关闭中断，如有需求可在操作完成后使能中断
}
/*******************************************************************************
* Description    : 方式二:通过EEPROM_Writer_Mode1函数向Eeprom写入数据
* Input          : addr-写入的地址  data-写入数据
* Return         : None.
* Note           : None.
*******************************************************************************/
void EEPROM_Writer_Mode1(unsigned char addr,unsigned char data)
{
	GIE = 0;            //Eeprom的操作过程中必须关闭中断
    IAPWAIT = 0x17;     //系统时钟16MHz，按照写入时间设定EEPROM操作时间
    EEADR  = addr;	    //写EEPROM数据地
    EEDAT  = data;	    //写EEPROM数据
    EEIF   = 0;	        //清中断标志
    //进入到 IAP mode
    EECON1 = 0X10;	    //使能WREN
    EECON2 = 0X18;
    EECON2 = 0XF6;
    EECON1 = 0X12;	    //使能WR写操作
    while(EEIF==0);	    //等待写成功中断标志
	//GIE = 1;          //Eeprom的操作过程中必须关闭中断，如有需求可在操作完成后使能中断
}


/*******************************************************************************
* Description    : 返回从Eeprom中读出的数据
* Input          : addr-读取数据的地址
* Return         : None.
* Note           : None.
*******************************************************************************/
unsigned char EEPROM_Read(unsigned char addr)
{
    unsigned char temp = 0;
	EEADR  = addr;
	EECON1 = 0X01;
	temp   = EEDAT;
	return  temp;
}



