📄 temp_e2prom1.c
字号:
unsigned char DeviceCode_EEP;
unsigned int addr;
unsigned char read_error;
extern unsigned char DeviceCode_EEP;
extern unsigned int addr;
extern unsigned char read_error;
extern void I2cPageWrite(void);
extern void clr_ram(void);
extern void I2cPageRead(void);
extern void check_ram(void);
//////////////////写一页
void I2cPageWrite(void)
{
unsigned int i;
I2cStart(); //启动总线
if(addr>=256)
{
I2cSentByte(DeviceCode_EEP+2); //发送器件码
}
else
{
I2cSentByte(DeviceCode_EEP); //发送器件码
}
I2cSentByte(addr%256); //发送地址
for(i=0;i<16;i++) //发送写入的数据
{
if(addr>=256)
I2cSentByte(240-addr%256);
else
I2cSentByte(addr);
}
I2cStop(); //总线停止
for( i=0;i<6400;i++); //延时,等待写入
}
void clr_ram(void)
{
unsigned char pages;
addr=0x00;
for(pages=0;pages<32;pages++) //共有32页,每页16个数据
{
I2cPageWrite(); //清除页内的内容
addr=addr+16; //地址指向下一页
}
}
/****** 读出 一页数据 ********/
void I2cPageRead(void)
{
unsigned char i,readdata;
I2cStart(); //启动总线
if(addr>=256)
I2cSentByte(DeviceCode_EEP+2); //发送器件码
else
I2cSentByte(DeviceCode_EEP);
I2cSentByte(addr%256); //发送地址
I2cStart(); //启动总线
if(addr>=256)
I2cSentByte(DeviceCode_EEP+3); //发送器件码---读
else
I2cSentByte(DeviceCode_EEP+1);
for(i=0;i<15;i++) //读取15 个数据
{
readdata=I2cReceiveByte();
if(addr>=256)
{
if(readdata!=(240-addr%256))
read_error=1;
}
else
{
if(readdata!=addr)
read_error=1;
}
SendAck(0); //发送 确认信号 0
}
readdata=I2cReceiveByte(); //读取最后1个数据
if(addr>=256)
{
if(readdata!=(240-addr%256))
read_error=1;
}
else
{
if(readdata!=addr)
read_error=1;
}
SendAck(1); //发送确认信号 1
I2cStop(); //总线停止
}
///////////////校验内存////////////////////////////
void check_ram(void)
{
unsigned char pages;
addr=0x00;
for(pages=0;pages<32;pages++) //共有32页,每页16个数据
{
I2cPageRead(); //清除页内的内容
addr=addr+16; //地址指向下一页
}
}
DeviceCode_EEP=0xAC;
read_error=0;
write_error=0;
clr_ram();
check_ram();
if((read_error!=0)||(write_error!=0))
{
disbuf[0]=BCDSEG_TAB[14]; //e
disbuf[1]=BCDSEG_TAB[27]; //r
disbuf[2]=BCDSEG_TAB[27]; //r
disbuf[3]=BCDSEG_TAB[0]; //o
disbuf[4]=BCDSEG_TAB[27]; //r
disbuf[5]=0xff;
}
else
{
disbuf[0]=0xff; // /
disbuf[1]=BCDSEG_TAB[9]; // g
disbuf[2]=BCDSEG_TAB[0]; // O
disbuf[3]=BCDSEG_TAB[0]; // O
disbuf[4]=BCDSEG_TAB[13]; // d
disbuf[5]=0xff;
}
disbcd(disbuf);
DeviceCode_EEP=0xA4;
read_error=0;
write_error=0;
clr_ram();
check_ram();
if((read_error!=0)||(write_error!=0))
{
disbuf[0]=BCDSEG_TAB[14]; //e
disbuf[1]=BCDSEG_TAB[27]; //r
disbuf[2]=BCDSEG_TAB[27]; //r
disbuf[3]=BCDSEG_TAB[0]; //o
disbuf[4]=BCDSEG_TAB[27]; //r
disbuf[5]=0xff;
}
else
{
disbuf[0]=0xff; // /
disbuf[1]=BCDSEG_TAB[9]; // g
disbuf[2]=BCDSEG_TAB[0]; // O
disbuf[3]=BCDSEG_TAB[0]; // O
disbuf[4]=BCDSEG_TAB[13]; // d
disbuf[5]=0xff;
}
disbcd(disbuf);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -