检查下口线是不是缺上拉电阻
EEPROMByteWrite0 ( bank0 , 0x00 + addr , pp ) ; bank0这个器件地址和EEPROM得A0,A1,(A2)是对应的?
附一个我用的程序
#include "W79E824.H"
#include
#define uint unsigned int
#define uchar unsigned char
//#define WP=0 _nop_()
//#define WP=1 _nop_()
bit flag;
#define SCL P12
sbit SDA1=P1^3;
//sbit WP=P3^4;
/*EEPROM Fuction*/
void delay(void)
{
uchar i;
for(i=20;i>0;i--)
_nop_();
}
/*
void delayij(uchar i,uchar j)
{
uchar m,n;
for(m=0;m
{
for(n=j;n>0;n--); //???±124*8+10=1002us
{
_nop_();
}
}
}
*/
/*********************************************************
**??????I2C_Start
**??????????I2C
**????????
**·???????
*********************************************************/
void I2C_Start()
{
SDA1=1;
delay();
SCL=1;
delay();
SDA1=0;
delay();
SCL=0;
}
/**********************************************************
**??????I2C_Stop
**??????????I2C
**????????
**·???????
**********************************************************/
void I2C_Stop()
{
SDA1=0;
delay();
SCL=1;
delay();
SDA1=1;
delay();
}
/**********************************************************
**??????Ack
**??????????????
**????????
**·???????
**********************************************************/
void Ack()
{
SDA1=0;
delay();
SCL=1;
delay();
SCL=0;
delay();
SDA1=1;
delay();
}
/********************************************************
**??????NoAck
**??????·???·?????????
**????????
**·???????
********************************************************/
void NoAck()
{
SDA1=1;
delay();
SCL=1;
delay();
SCL=0;
delay();
SDA1=0;
delay();
}
/********************************************************
**??????Test_Ack()
**???????ì????????
**????????
**·?????flag,???????±flag??0?????????±flag??1
*********************************************************/
bit Test_Ack()
{
SCL=0;
SDA1=1;//????????
_nop_();_nop_();_nop_();_nop_();
SCL=1;
_nop_();_nop_();_nop_();_nop_();
if(SDA1==0)
flag=1;
else flag=0;
SCL=0;
return(flag);
}
/********************************************************
**??????SendData()
**??????·?????×???????
**??????buffer
**·?????
*******************************************************/
void SendData(uchar buffer)
{
uchar BitCnt=8;//??×???8??
uchar temp=0;
do
{
temp=buffer;
SCL=0;
delay();
if((temp&0x80)==0) //
SDA1=0;
else
SDA1=1;
delay();
SCL=1;
temp=_crol_(buffer,1);//rl buff
buffer=temp;
BitCnt--;
}
while(BitCnt);
SCL=0;
}
/**************************************************************
**??????uint ReceiveData()
**????????????×???????
**??????
**·?????ucReceData
**???÷????????????????·???ucReceData??
**************************************************************/
uchar ReceiveData()
{
uchar ucReceData;
uchar BitCnt=8;
uchar temp=0;
SDA1=1;//????????
do
{
SCL=0;
delay();
SCL=1;
delay();
if(SDA1==1)
ucReceData=ucReceData|0x01;
else
ucReceData=ucReceData&0x0fe;
if(BitCnt-1)
{
temp=_crol_(ucReceData,1);
ucReceData=temp;
}
BitCnt--;
}
while(BitCnt);
SCL=0;
return(ucReceData);
}
/*************************************************************
**bit WriteNByte()
**24C64???????à×???????
**
** *s-data to write sbbab-data address 8bits low
**sla-device address suba-data address 8bits high n-bytes(n<=32)
**************************************************************
bit WriteNByte(uchar sla,uchar suba,uchar subab,uchar *s,uint n)
{
uchar i;
I2C_Start();
SendData(sla);
Test_Ack();
if(flag==0) return(0);
SendData(suba);
Test_Ack();
if(flag==0) return(0);
SendData(subab);
Test_Ack();
if(flag==0) return(0);
for(i=0;i
{
SendData(*(s+i));
Test_Ack();
if(flag==0) return(0);
}
I2C_Stop();
return(1);
}
*/
bit WriteNByte(uchar sla,uint addr,uchar *s,uint n)
{
uchar i;
uchar suba;
uchar subab;
suba=(addr>>8);
subab=addr&0x00ff;
I2C_Start();
SendData(sla);
Test_Ack();
if(flag==0) return(0);
SendData(suba);
Test_Ack();
if(flag==0) return(0);
SendData(subab);
Test_Ack();
if(flag==0) return(0);
for(i=0;i
{
SendData(*(s+i));
Test_Ack();
if(flag==0) return(0);
}
I2C_Stop();
return(1);
}
/*************************************************************
**bit ReadNByte()
**24C64??????N×????????¨n<=32)
**
**
**
**************************************************************
bit ReadNByte(uchar sla,uchar suba,uchar subab,uchar *p,uint n)
{
uchar i;
I2C_Start();
SendData(sla);
Test_Ack();
if(flag==0){return(0);}
SendData(suba);
Test_Ack();
if(flag==0){return(0);}
SendData(subab);
Test_Ack();
if(flag==0){return(0);}
I2C_Start();
SendData(sla+1);
Test_Ack();
if(flag==0){return(0);}
for(i=0;i
{
*(p+i)=ReceiveData();
Ack();
}
*(p+n-1)=ReceiveData();
NoAck();
I2C_Stop();
return(1);
}
*/
bit ReadNByte(uchar sla,uint addr,uchar *p,uint n)
{
uchar i;
uchar suba;
uchar subab;
suba=(addr>>8);
subab=addr&0x00ff;
I2C_Start();
SendData(sla);
Test_Ack();
if(flag==0){return(0);}
SendData(suba);
Test_Ack();
if(flag==0){return(0);}
SendData(subab);
Test_Ack();
if(flag==0){return(0);}
I2C_Start();
SendData(sla+1);
Test_Ack();
if(flag==0){return(0);}
for(i=0;i
{
*(p+i)=ReceiveData();
Ack();
}
*(p+n-1)=ReceiveData();
NoAck();
I2C_Stop();
return(1);
}
/*
bit ReadNByte(uchar sla,uchar suba,uchar subab,uchar *p,uint n)
{
uchar i;
ENS1=1;
I2DAT=sla;
STA=1;
while(SI==0);
SI=0;
// if(AA==0)return(0);
I2DAT=suba;
while(SI==0);
SI=0;
// if(AA==0)return(0);
I2DAT=subab;
while(SI==0);
SI=0;
// if(AA==0)return(0);
for(i=0;i
{
while(SI==0);
*(p+i)=I2DAT;
SI=0;
}
*(p+n-1)=I2DAT;
STO=1;
ENS1=0;
return(1);
}*/
/*
bit ClearROM(uchar s)
{
uint i;
// uchar j;
I2C_Start();
SendData(0xa0);
Test_Ack();
if(flag==0) return(0);
SendData(0x00);
Test_Ack();
if(flag==0) return(0);
SendData(0x00);
Test_Ack();
if(flag==0) return(0);
for(i=0;i<0x8000;i++)
{
// j=i*100/0x8000;
// PrintNumber(36,5,j);
SendData(s);
Test_Ack();
if(flag==0) return(0);
}
I2C_Stop();
return(1);
}
/*========================================*/ |