📄 at24c01.c
字号:
//=======================================================
//24C01存储器I2C总线接口程序(C语言版本)
//=======================================================
#include "AT24C01.h"
//=======================================================
//i2c_write(地址,数据),写一个字节
//=======================================================
unsigned char i2c_write(unsigned char Address,unsigned char Data)
{
i2c_start();
i2c_send8bit(0xA0);
if (i2c_ack()) return 1;
i2c_send8bit(Address);
i2c_ack();
i2c_send8bit(Data);
i2c_ack();
i2c_stop();
_nop_();_nop_();_nop_();_nop_();_nop_();
return 0;
}
//=======================================================
//i2c_read(地址,数据),写一个字节
//=======================================================
unsigned char i2c_read(unsigned char Address)
{
unsigned char c;
i2c_start();
i2c_send8bit(0xA0);
if (i2c_ack()) return 1; //=1,表示无确认,再次发送
i2c_send8bit(Address);
i2c_ack();
i2c_start();
i2c_send8bit(0xA1);
if (i2c_ack()) return 1;
c=i2c_receive8bit();
i2c_ack();
i2c_stop();
_nop_();_nop_();_nop_();_nop_();_nop_();
return(c);
}
//=======================================================
//发送开始信号
//=======================================================
void i2c_start(void)
{
SDA = 1;
SCL = 1;
_nop_();_nop_();_nop_();_nop_();_nop_();
SDA = 0;
SCL = 0;
_nop_();_nop_();_nop_();_nop_();_nop_();
return;
}
//========================================================
//发送结束信号
//========================================================
void i2c_stop(void)
{
SDA = 0;
SCL = 1;
_nop_();_nop_();_nop_();_nop_();_nop_();
SDA = 1;
_nop_();_nop_();_nop_();_nop_();_nop_();
return;
}
//========================================================
//发送接收确认信号
//========================================================
bit i2c_ack(void)
{
bit ack;
SDA = 1;
SCL = 1;
if (SDA==1)
ack = 1;
else
ack = 0;
SCL = 0;
return(ack);
}
//=========================================================
//送八位数据
//=========================================================
void i2c_send8bit(unsigned char b)
{
unsigned char a;
SCL = 0;
_nop_();_nop_();_nop_();_nop_();_nop_();
for(a=0;a<8;a++)
{
SDA = (bit)(b&0x80);
b<<=1;
_nop_();_nop_();_nop_();_nop_();_nop_();
SCL = 1;
_nop_();_nop_();_nop_();_nop_();_nop_();
SCL = 0;
}
_nop_();_nop_();_nop_();_nop_();_nop_();
return;
}
//=========================================================
//接收八位数据
//=========================================================
unsigned char i2c_receive8bit(void)
{
unsigned char a;
unsigned char b=0;
for(a=0;a<8;a++)
{
SCL = 1;
b=b<<1;
if (SDA==1)
b=b|0x01; //按位或
SCL = 0;
}
_nop_();_nop_();_nop_();_nop_();_nop_();
return (b);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -