#include <STC8051.h>
#include <intrins.h>
#include <define.h>
#include <init_config.h>
/*********************************************************
函数功能:结构体
**********************************************************/
union union_temp16
{
uint un_temp16;
uchar un_temp8[2];
}my_unTemp16;
/*********************************************************
函数功能:关闭EEPROM功能
**********************************************************/
void IAP_disable()
{
IAP_CONTR=0;
IAP_ADDRH=0;
IAP_ADDRL=0;
IAP_TRIG=0;
IAP_CMD=0;
}
/*********************************************************
函数功能:读eeprom里的数据
参数: add:0x00
返回值: 0: 失败 1:成功
**********************************************************/
uchar eeprom_read(uint add)
{
if((PCON&0x20)==1) //判断电压是否低于正常的读eeprom电压,为1则表示电压过低
{
PCON&=0xDF;
return(0);
}
IAP_CONTR=ENABLE_ISP;
IAP_CMD=0x01;
my_unTemp16.un_temp16=add;
IAP_ADDRH=my_unTemp16.un_temp8[0];
IAP_ADDRL=my_unTemp16.un_temp8[1];
IAP_TRIG=0x5A;
IAP_TRIG=0xA5;
_nop_();
read_eeprom_data=IAP_DATA;
IAP_disable();
return(1);
}
/*********************************************************
函数功能:向eeprom里写数据
参数: add:0x00;write_data:写入eeprom里的数据
返回值: 0: 失败 1:成功
**********************************************************/
uchar eeprom_write(uint add,uchar write_data)
{
uchar a;
if((PCON&0x20)==1)
{
PCON&=0xDF;
return(0);
}
IAP_CONTR=ENABLE_ISP;
IAP_CMD=0x02;
my_unTemp16.un_temp16=add;
IAP_ADDRH=my_unTemp16.un_temp8[0];
IAP_ADDRL=my_unTemp16.un_temp8[1];
IAP_DATA=write_data;
IAP_TRIG=0x5A;
IAP_TRIG=0xA5;
_nop_();
IAP_disable();
a=eeprom_read(add);
if(a==1)
{
if(write_data==read_eeprom_data)
{
return(1);
}
else
{
return(0);
}
}
return 0;
}
/*********************************************************
函数功能:擦除eeprom里的数据
参数: add:0x00
返回值: 0: 失败 1:成功
**********************************************************/
uchar eeprom_eraser(uint add)
{
if((PCON&0x20)==1)
{
PCON&=0xDF;
return(0);
}
IAP_CONTR=ENABLE_ISP;
IAP_CMD=0x03;
my_unTemp16.un_temp16=add;
IAP_ADDRH=my_unTemp16.un_temp8[0];
IAP_ADDRL=my_unTemp16.un_temp8[1];
IAP_TRIG=0x5A;
IAP_TRIG=0xA5;
_nop_();
IAP_disable();
return(1);
}
/*********************************************************
函数功能:读取eeprom里数据并将其转换后放到数组里
**********************************************************/
void eeprom_read_turn (void) //读eeprom内部的数据 放在finger_record[i]数组中 为1的表示被注册 为0的表示没被注册
{
uchar i=0,j=0;
j=eeprom_read(EEPROM_ADD);
if(j==1)
{
for(i=0;i<5;i++)
{
// fingercord[i]=(((read_eeprom_data<<(i+3))&0x80)>>7);
fingercord[i]=( (read_eeprom_data >> (4-i) ) & 0x01 );
}
}
}
/*********************************************************
函数功能:将数组里的值转换成一个字节并存到eeprom
**********************************************************/
void eeprom_write_turn (void)
{
uchar i,j,d,change_data=0;
for(i=0;i<5;i++)
{
change_data |= (( fingercord[i] & 0x01)<<(4-i)) ;
}
j = eeprom_eraser(EEPROM_ADD );
d = eeprom_write(EEPROM_ADD ,change_data);
if(d==1)
{
flag_write_eeprom_ok=1;
}
}