📄 eeprom.c
字号:
#include "my.h"//包含头文件
#define AddWr 0xae //Write Address
#define AddRd 0xaf //Read Address
//定义硬件接口
sbit Sda=P0^2;
sbit Scl=P0^1;
sbit WP=P0^3;// connect here
void mDelay(unsigned char j)//A normal delay
{
unsigned int i;
for(;j>0;j--)
{
for(i=0;i<125;i++)
{;}
}
}
//start IIC
void Start(void)
{
Sda=1;
_nop_();_nop_();
Scl=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
Sda=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
Scl=0;
}
//stop IIC
void Stop(void)
{
Sda=0;
_nop_();
Scl=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
Sda=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
Scl=0;
}
//ack IIC
void Ack(void)
{
Sda=0;
_nop_();_nop_();_nop_();
Scl=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
Scl=0;
_nop_();_nop_();
}
//unack IIC
void NoAck(void)
{
Sda=1;
_nop_();_nop_();_nop_();
Scl=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
Scl=0;
_nop_();_nop_();
}
//send a byte
void Send(unsigned char Data)
{
unsigned char BitCounter=8;
unsigned char temp;
do
{
temp=Data;
Scl=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
if((temp&0x80)==0x80)
Sda=1;
else
Sda=0;
Scl=1;
temp=Data<<1;
Data=temp;
BitCounter--;
}
while(BitCounter);
Scl=0;
}
//read a byte and return
unsigned char Read(void)
{
unsigned char temp=0;
unsigned char temp1=0;
unsigned char BitCounter=8;
Sda=1;
do
{
Scl=0;
_nop_();_nop_();_nop_();_nop_();_nop_();
Scl=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
if(Sda)
temp=temp|0x01;
else
temp=temp&0xfe;
if(BitCounter-1)
{
temp1=temp<<1;
temp=temp1;
}
BitCounter--;
}
while(BitCounter);
return(temp);
}
//write to ROM
void writeEEPROM(unsigned char Address,unsigned char Num,unsigned char Data[])
{
unsigned char i;
unsigned char *PData;
PData=Data;
for(i=0;i<Num;i++)
{
Start();
Send(AddWr);//Write Address
Ack();
Send(Address+i);//Write sub Address
Ack();
Send(*(PData+i));//Write Data
Ack();
Stop();
mDelay(20);
}
}
//read from ROM
void readEEPROM(unsigned char Address,unsigned char Num,unsigned char Data[])
{
unsigned char i;
unsigned char *PData;
PData=Data;
for(i=0;i<Num;i++)
{
Start();
Send(AddWr);//Write Address
Ack();
Send(Address+i);//Write sub Address
Ack();
Start();
Send(AddRd);//Read Address
Ack();
*(PData+i)=Read();//Read Data
Scl=0;
NoAck();
Stop();
}
}
/* void main()//用于测试,本文档不使用
{
unsigned char Number[4]={1,2,4,8};
unsigned char i;
//WP=1;
P2=0x01;
P0=Number[1];
WrToROM(Number,4,4);
mDelay(200);
Number[0]=0;
Number[1]=0;
Number[2]=0;
Number[3]=0;
RdFromROM(Number,4,4);
while(1)
{
P0=Number[i];
mDelay(200);
i++;
if(i==4)
i=0;
} }
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -