📄 at24x.c
字号:
#include <w79e201.h>
#include "at24x.h"
//#define uchar unsigned char
//#define uint unsigned int
#define __AT64__
sbit CLK24=P3^2;
sbit SIO24=P3^3;
sbit wp = P3^6; //EEPROM写保护
sbit scl = P3^2; //IIC CLK
sbit sda = P3^3; //IIC DATA
void _CardSetClock24(uchar Level)
{
if(Level){
CLK24 = 1;
}
else{
CLK24 = 0;
}
}
uchar _CardReadIO24()
{
uchar idata ctemp;
ctemp = SIO24;
return ctemp;
}
void _CardPutIO24(uchar IOData)
{
SIO24=IOData;
}
//base functions
void delay10us24(uchar i)
{
i = i*3;
do{i--;}while(i>0);
return;
}
void start24()
{
_CardPutIO24(1);//SIO24=1;
delay10us24(1);
_CardSetClock24(1);//CLK24=1;
delay10us24(1);
_CardPutIO24(0);//SIO24=0;
delay10us24(1);
_CardSetClock24(0);//CLK24=0;
}
void stop24()
{
_CardPutIO24(0);//SIO24=0;
delay10us24(1);
_CardSetClock24(1);//CLK24=1;
delay10us24(1);
_CardPutIO24(1);//SIO24=1;
delay10us24(1);
_CardSetClock24(0);//CLK24=0;
}
void clock24()
{
_CardSetClock24(1);//CLK24=1;
delay10us24(1);
_CardSetClock24(0);//CLK24=0;
delay10us24(1);
}
//24C01A-16
void writeack()
{
_CardPutIO24(0);//SIO24=0;
clock24();
_CardPutIO24(1);//SIO24=1;
return;
}
uchar readack()
{
uchar idata sbtemp;
_CardPutIO24(1);//SIO24=1;
sbtemp=0;
_CardSetClock24(1);//CLK24=1;
sbtemp=0;
sbtemp=0;
sbtemp=0;
sbtemp=0;
sbtemp=(/*SIO24*/_CardReadIO24()==1?1:0);
sbtemp=sbtemp;
sbtemp=sbtemp;
sbtemp=sbtemp;
_CardSetClock24(0);//CLK24=0;
sbtemp=sbtemp;
return sbtemp;
}
uchar outb24(uchar outdata)
{
uchar idata i;
for(i=0;i<8;i++){
if(outdata&0x80)/*SIO24=1*/_CardPutIO24(1);else _CardPutIO24(0);//SIO24=0;
outdata<<=1;
clock24();
}
return readack();
}
uchar inb24()
{
uchar idata indata=0,i;
_CardPutIO24(1);//SIO24=1;
for(i=0;i<8;i++){
indata<<=1;
indata+=(/*SIO24*/_CardReadIO24()==1?1:0);
clock24();
}
return indata;
}
void read64c(uint offset,uint length,uchar *buffer)
{
uint idata i;
start24();
outb24(0xa0);
outb24(offset/256);
outb24(offset%256);
start24();
outb24(0xa1);
for(i=0;i<length;i++){
buffer[i]=inb24();
writeack();
}
stop24();
for(i=0;i<32;i++)clock24();
return;
}
void write64c(uint offset,uint length,uchar *buffer)
{
uint idata i,j;
wp = 0;
for(i=0;i<length;i++){
start24();
outb24(0xa0);
outb24(offset/256);
outb24(offset%256);
outb24(buffer[i]);
stop24();
offset++;
for(j=0;j<128;j++)clock24();
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -