at24C02发热有2种可能,1,你的硬件接错了,比如正负接反了,2,at24C02本身已损坏了。
at24C02焊反了
我现在也遇到这种问题了,我也很郁闷,现在一直在检查电路,电路是没问题的,安装也没错,刚开始是没问题的,就是在老化的过程中这IC发烫,而且稳压IC 也很烫,求高手解释!!!
^_^,无厘头的程序,
给一段24C02的读写程序
/*********************************at24c04*******************************/
/*************************I2C*START**************************************/
void Start() {
SDA=1;
SCL=1;
SDA=0;
SCL=0;
}
/*******************************I2C*STOP*******************************/
void Stop() {
SCL=0;
SDA=0;
SCL=1;
SDA=1;
}
/************************************************************************/
void Ack() {
SDA=0;
SCL=1;
SCL=0;
SDA=1;
}
/************************************************************************/
void NoAck() {
SDA=1;
SCL=1;
SCL=0;
}
/***********************************************************************/
bit TestAck() {
bit ErrorBit;
SDA=1;
SCL=1;
ErrorBit=SDA;
SCL=0;
return(ErrorBit);
}
/***********************************************************************/
void Write8Bit(unsigned char input) {
unsigned char temp;
for(temp=8;temp!=0;temp--) {
SDA=(bit)(input&0x80);
SCL=1;
SCL=0;
input=input<<1;
}
}
/***************************************************************************/
void Write24c04(unsigned char *Wdata,unsigned int RomAddress,unsigned char number) {
unsigned char dd;
dd=((RomAddress&0x7ff)/256)<<1;
Start();
Write8Bit(WriteDeviceAddress|dd);
TestAck();
Write8Bit(RomAddress);
TestAck();
for(;number!=0;number--) {
Write8Bit(*Wdata);
TestAck();
Wdata++;
}
Stop();
DelayMs(10);
}
/***************************************************************************/
unsigned char Read8Bit() {
unsigned char temp,rbyte=0;
for(temp=8;temp!=0;temp--) {
SCL=1;
rbyte=rbyte<<1;
rbyte=rbyte|((unsigned char)(SDA));
SCL=0;
}
return(rbyte);
}
/***************************************************************************/
void Read24c04(unsigned char *RamAddress,unsigned int RomAddress,unsigned char bytes) {
unsigned char ddd;
ddd=(( RomAddress&0x7ff)/256)<<1;
Start();
Write8Bit(WriteDeviceAddress|ddd);
TestAck();
Write8Bit(RomAddress);
TestAck();
Start();
Write8Bit(ReadDviceAddress|ddd);
TestAck();
while(bytes!=1) {
*RamAddress=Read8Bit();
Ack();
RamAddress++;
bytes--;
}
*RamAddress=Read8Bit();
NoAck();
Stop();
}
/*************************************delayMs*******************************/
void DelayMs(unsigned char number) {
unsigned char temp;
for(;number!=0;number--) {
for(temp=112;temp!=0;temp--) {
}
}
}
写入存放的数据
Write24c04(unsigned char *Wdata/*设定时间存放的数组*/,unsigned int RomAddress/*你自己规定存放的地址*/,unsigned char number/*前面那个数组的长度*/) ;
读出存放的数据
Read24c04(unsigned char *Wdata/*设定时间存放的数组*/,unsigned int RomAddress/*你自己规定存放的地址*/,unsigned char number/*前面那个数组的长度*/) ;