⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 at24c01.c

📁 使用at89s52单片机
💻 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 + -