24C02 EEPROM存储器的C语言操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include 〈reg51.h〉
#ifndef false
#define false 0
#endif
#ifndef true
#define true 1
#endif
#define WriteDeviceAddress 0xa0
#define ReadDviceAddress 0xa1
sbit SDA = P3 ^ 5;//根据实际连接的管脚定义
sbit SCL = P3 ^ 4;
sbit led = P1^0;
sbit led2 = P1^1;
unsigned char code Num[21]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
0x90,0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,
0x10,0x89};
unsigned char code Disdigit[4]= {0x7F,0xBF,0xDF,0xEF};
unsigned char Disbuf[4];
unsigned char code write_data[5] = {5,2,5,1,8 };
unsigned char read_data[5];
//————-—-—-——-——--————--—-————-—--————----——-——-—--———---—-——-————---———-——-
void Delayus(unsigned int number)
{
for(;number!=0;number—-)
{
}

//——————-——-—--————-——-—-——-——-——————-——————-—--—--—---—--————--—-—-—-—————-
void DelayMs(unsigned int number)

unsigned char temp;
for(;number!=0;number——)

for(temp=112;temp!=0;temp—-)

}


//—--——-———-—-————-——-———————--—-—-—--——-————-—-—-————————--——-—-—-———--———-
void Start()

SDA=1;
Delayus(4);
SCL=1;
Delayus(4);
SDA=0;
Delayus(4);
SCL=0;
Delayus(4);

//-———-—-——-———---——-—-——--——-—--——-—-————-———-———-———-————-———-—-———--————-
void Stop()
{
SCL=0;
Delayus(4);
SDA=0;
Delayus(4);
SCL=1;
Delayus(4);
SDA=1;
Delayus(4);

//————-—-——-————--————-———--—-———--—--——--—-———-—-—--—-———---————-—---—-————
void Ack()

SDA=0;
Delayus(4);
SCL=1;
Delayus(4);
SCL=0;
Delayus(4);
Delayus(4);

//-—--—---—------————————-—-—-—-—-—--——--————---————-—-—-—-———--———--——--———
void NoAck()

SDA=1;
Delayus(4);
SCL=1;
Delayus(4);
SCL=0;
Delayus(4);
SDA=0; //

//—-—-—--—---——————-————-——--———--—--—---—————-———-——--——————--—------——-—--
bit TestAck()

bit ErrorBit;
SDA=1;
Delayus(4);
SCL=1;
Delayus(4);
ErrorBit=SDA;
Delayus(4);
SCL=0;
return(ErrorBit);
}
//—-—-——————————-————--—-——-——————-————-——-————————-—-———-———-———------—---—
void Write8Bit(unsigned char input)
{
unsigned char temp;
for(temp=8;temp!=0;temp—-)
{
SDA=(bit)(input&0x80);
Delayus(4);
Delayus(4);
SCL=0;
Delayus(4);
input=input〈〈1;

}
//-—-———————---—---—-------——--------—--—————————-———————-———-———-—-——-——-——
unsigned char Read8Bit()
{
unsigned char temp,rbyte=0;
for(temp=8;temp!=0;temp-—)
{
SCL=1;
Delayus(4);
rbyte=rbyte<〈1;
rbyte=rbyte|((unsigned char)(SDA));
SCL=0;

return(rbyte);

void Write24c02(unsigned char *Wdata,unsigned char RomAddress,unsigned char number)
{
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(RomAddress);
TestAck();
for(;number!=0;number--)

Write8Bit(*Wdata);
TestAck();
Wdata++;
}
Stop();
DelayMs(10);
}
void Read24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char bytes)
{
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(RomAddress);
TestAck();
Start();
Write8Bit(ReadDviceAddress);
TestAck();
while(bytes!=1)
{
*RamAddress=Read8Bit();
Ack();
RamAddress++;
bytes—-;

*RamAddress=Read8Bit();
NoAck();
Stop();

void Display(void)//显示

unsigned int i = 0;
unsigned int temp,count;
temp = Disdigit[count];
P2 =temp;
temp = Disbuf[count];
temp = Num[temp];
P0 =temp;
count++;
if (count==4)
count=0;
}
void time1() interrupt 3 using 2

Display();
TH1 = (65535 — 2000)/256;
TL1 = (65535 — 2000)%256;

void main()

TMOD = 0x15;
TR1 = 1;
EA = 1;
ET1 = 1;
Write24c02(write_data,0x00,3); DelayMs(200);
Read24c02(read_data,0x00,4); while(1)
{
Disbuf[0]= read_data[0]; Disbuf[1] = read_data[1];
Disbuf[2] = read_data[2];
Disbuf[3]= read_data[3];

}。

相关文档
最新文档