at89S52单片机在2.1,2.0上连接了AT24C02,结果,在系统电源打开后,at24C02发热,还变得很烫,求高手解答!

2024-12-29 01:33:30
推荐回答(4个)
回答1:

at24C02发热有2种可能,1,你的硬件接错了,比如正负接反了,2,at24C02本身已损坏了。

回答2:

at24C02焊反了

回答3:

我现在也遇到这种问题了,我也很郁闷,现在一直在检查电路,电路是没问题的,安装也没错,刚开始是没问题的,就是在老化的过程中这IC发烫,而且稳压IC 也很烫,求高手解释!!!

回答4:

^_^,无厘头的程序,
给一段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/*前面那个数组的长度*/) ;