📄 eeprom.c
字号:
/*
********************************************************************************
* Wiznet.
* 5F Simmtech Bldg., 228-3, Nonhyun-dong, Kangnam-gu,
* Seoul, Korea
*
* (c) Copyright 2002, Wiznet, Seoul, Korea
*
* Filename : eeprom.c
* Programmer(s) :
* Version : 1.0
* Created : 2002/06/1
* Modified :
* Description :
********************************************************************************
*/
#include "config.h"
#include "eeprom.h"
void eep_delay(unsigned int num)
{
unsigned int i,j;
for(i=0;i<num;i++)
for(j=0;j < 400; j++)
;
}
void eep_sendstart(void)
{
P1 |= SDA_H; //SDA HIGH
P1 |= SCL_H; //SCL HIGH
P1 &= SDA_L; //SDA LOW
P1 &= SCL_L; //SCL LOW
}
void eep_sendend(void)
{
P1 &= SCL_L; // SCL LOW
P1 &= SDA_L; // SDA LOW
P1 |= SCL_H; // SCL HIGH;
P1 |= SDA_H; // SDA HIGH;
}
char eep_checkack(void)
{
char ack;
P1 &= SCL_L;
P1 |= SCL_H;
ack = P1 & 0x08;
P1 &= SCL_L;
return ack;
}
void eep_sendnoack(void)
{
P1 &= SCL_L;
P1 |= SDA_H; // High
// SCL Clock
P1 |= SCL_H;
P1 &= SCL_L;
}
void eep_writedata(unsigned char b)
{
char i;
EA = 0;
for(i = 0 ; i < 8 ; i++)
{
P1 &= SCL_L; //SCL LOW
if( ((b << i) & 0x80) )
P1 |= SDA_H;
else
P1 &= SDA_L;
eep_delay(1);
P1 |= SCL_H; //SCL HIGH
}
P1 &= SCL_L; // SCL LOW
EA = 1;
}
char eep_readdata(void)
{
char ret;
char i;
ret = 0;
EA = 0;
P1 &= SCL_L; // SCL LOW
for(i = 7; i >=0 ; i--)
{
P1 |= SCL_H;; // SCL HIGH
if (P1 & SDA_H) ret |= (1<<i); ;
P1 &= SCL_L; // SCL LOW
}
EA = 1;
return ret;
}
/*
********************************************************************************
* Description : Serial EEPROM Write routine
* Arguments : ee_addr - write position, ee_data - data
* Returns : None
* Note :
********************************************************************************
*/
void EEP_Write(unsigned char ee_addr,unsigned char ee_data)
{
eep_sendstart();
eep_writedata(0xa0); // H/W address
eep_checkack();
eep_writedata(ee_addr); // addr
eep_checkack();
eep_writedata(ee_data); //data
eep_checkack();
eep_sendend();
eep_delay(10);
}
/*
********************************************************************************
* Description : Serial EEPROM Read routine
* Arguments : ee_addr - read position
* Returns : EEPROM data
* Note :
********************************************************************************
*/
unsigned char EEP_Read(unsigned char ee_addr)
{
unsigned char ee_data;
eep_sendstart();
eep_writedata(0xa0);
eep_checkack();
eep_writedata(ee_addr);
eep_checkack();
eep_sendstart();
eep_writedata(0xa1);
eep_checkack();
ee_data = eep_readdata();
eep_sendnoack();
eep_sendend();
return ee_data;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -