📄 at24c02.c
字号:
/*---------------------------------------------------------------------------------------------
[程序名称] AT24C02.C
[程序作用] 实现对AT24C02的读写操作
[程序作者]
[创建时间] 2006年10月17日
==================================================================================================*/
#include "reg52.h"
#include "intrins.h"
/********************************************************************/
#define Uchar unsigned char
#define Uint unsigned int
Uchar count[2];
/********************************************************************/
sbit SCLK=P1^6; //AT24C02 serial clock pin 6
sbit SDA=P1^7; //AT24C02 serial data pin 5
/********************************************************************/
void I2C_delay(void);//I2C delay function
void I2C_start(void);//I2C start function
void I2C_stop(void);//I2C stop function
void I2C_send_ack(bit k);//I2C send responsion function
void I2C_write_byte(Uchar dat);//I2C bus write byte function
Uchar I2C_read_byte(void);//I2C bus read byte function
/********************************************************************/
void AT24C02_write(Uchar address,Uchar dat); //write 24c02 information function
unsigned char AT24C02_read(Uchar address); //read 24c02 information function
/********************************************************************/
void main()
{
Uchar temp;
//Mcu_init();
while(1)
{
AT24C02_write(0x00,count[1]);
temp=AT24C02_read(0x00);
AT24C02_write(0x00,count[1]);
}
}
/***********************************************************************/
/******************************** I2C PART **************************/
void I2C_delay(void)
{
_nop_();_nop_();_nop_();_nop_();
}
/***********************************************************************/
void I2C_start(void)
{
SDA=1;
_nop_();
SCLK=1;
_nop_();
SDA=0;
_nop_();
SCLK=0;
_nop_();
}
/***********************************************************************/
void I2C_stop(void)
{
SDA=0;
_nop_();
SCLK=1;
_nop_();
SDA=1;
_nop_();
SCLK=0;
_nop_();
}
/***********************************************************************/
void I2C_send_ack(bit k)
{
SDA=k;
I2C_delay();
SCLK=1;
I2C_delay();
SCLK=0;
}
/***********************************************************************/
void I2C_write_byte(Uchar dat)
{
Uchar i;
for (i=8;i>0;i--)
{
SCLK=0;
I2C_delay();
SDA=(bit)(dat&0x80); //MSB 0x80
dat<<=1;
I2C_delay();
SCLK=1;
I2C_delay();
}
SCLK=0;
}
/***********************************************************************/
unsigned char I2C_read_byte(void)
{
Uchar i,dat;
for (i=0;i<8;i++)
{
SCLK=0;
I2C_delay();
SDA=1;
I2C_delay();
SCLK=1;
dat<<=1;
I2C_delay();
if(SDA)
dat++;
}
SCLK=0;
return (dat);
}
/***********************************************************************/
/************************ 24C02 PART **********************************/
void AT24C02_write(Uchar address,Uchar dat)
{
Uchar temp;
temp=dat/10;
temp<<=4;
temp=dat%10+temp;
I2C_start();
I2C_write_byte(0xa0); //WRITE24C02 0xa0
I2C_send_ack(0); //ACK
I2C_write_byte(address);
I2C_send_ack(0); //ACK
I2C_write_byte(temp);
I2C_send_ack(1); //NO_ACK
I2C_stop();
}
/***********************************************************************/
Uchar AT24C02_read(Uchar address)
{
Uchar temp,dat;
I2C_start();
I2C_write_byte(0xa0); //WRITE24C02 0xa0
I2C_send_ack(0); //ACK
I2C_write_byte(address);
I2C_send_ack(1); //NO_ACK
I2C_stop();
I2C_start();
I2C_write_byte(0xA1); //READ24C02 0xA1
I2C_send_ack(0); //ACK
dat=I2C_read_byte();
I2C_send_ack(1); //NO_ACK
I2C_stop();
temp=dat/16;
dat=dat%16;
dat=dat+temp*10;
return (dat);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -