特急:关于单片机at89c52连接at24c02的编程问题

2025-02-23 09:45:38
推荐回答(2个)
回答1:

void start(void)
{
SDA=1;
SCL=1;
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
}

/***************************************************************
函数功能:停止iiC总线数据传送子程序
入口参数:
出口参数:
******************************************************************/
void stop(void)
{
SDA=0;
SCL=1;
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
}

/*******************************************************************
函数功能:读取数据
入口参数:
出口参数:read_data
*********************************************************************/
unsigned char read(void)
{
uchar read_data=0,i;
for(i=0;i<8;i++)
{
SCL=1; //此时SDA上的高低电平保持稳定
read_data<<=1;
read_data|=(unsigned char)SDA;
SCL=0; //此时SDA上的高低电平可以变化
}
return read_data;
}

/******************************************************************
函数功能:向EEPROM写数据
入口参数:dat
出口参数:ack_bit
*****************************************************************/
bit write_dat(unsigned char dat)
{
unsigned char i;
bit ack_bit; //应答位
for(i=0;i<8;i++)
{
SDA=(bit)(dat&0x80);
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
SCL=0;
dat<<=1;

}
SDA=1; //检测应答信号,这在第九个时钟周期出现
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
ack_bit=SDA;
SCL=0;
return ack_bit;

}

/*******************************************************************
函数功能:向指定地址写数据
入口参数:addr,write_data
出口参数:
**********************************************************************/
void write_byte(unsigned char addr,unsigned char write_data)
{
start();
write_dat(OP_WRITE);
write_dat(addr);
write_dat(write_data);
stop();
delayms(10);

}

/************************************************************************
函数功能:读取当前地址数据
入口参数:
出口参数:read_data
***********************************************************************/
unsigned char read_current()
{
unsigned char read_data;
start();
write_dat(OP_READ);
read_data=read();
stop();
return read_data;
}

/**********************************************************************
函数功能:向指定地址读数据
入口参数:randon_addr
出口参数:read_data
********************************************************************/
unsigned char read_randon(uchar randon_addr)
{
start();
write_dat(OP_WRITE);
write_dat(randon_addr);
return (read_current());
}

例如你想将shiwei写进2402,write_byte(0x04,shiwei)
读出来就是read_randon(0x04)
你先将你要存的数据写进2402,上电时程序首先就把你存的数据先读出来显示在数码管上
你有加#include吗》????

回答2:

24C02使用详解http://hi.baidu.com/dsu5566