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

📄 eeprom (at24c02).txt

📁 用C写的基于单片机控制AT24C02 I2C串行总线EEPROM的读写程序。
💻 TXT
字号:
//EEPROM (AT24C02)
#include<reg51.h>
#include<intrins.h>
sbit SCL=P0^0;
sbit SDA=P0^1;
bit ACKK;
void delay()
{
	unsigned char i=50;
  	while(i--); 
}
bit ACK()//从器件的应答信号
{   
   	ACKK=0;
   	SCL=0;
   	SDA=1;
   	_nop_();
   	SCL=1;
   	_nop_();
   	if(SDA==0)     ACKK=0;
        else 	       ACKK=1;
   	SCL=0;   
   	return ACKK;   
}
void SACK()//发送应答信号
{ 
  	SDA=0;
   	_nop_();
   	SCL=1;
   	delay();  
   	SCL=0;  
}
void IICstart()
{   
    	SDA=1;
    	_nop_();
    	SCL=1;
    	delay();//起始信号建立
    	SDA=0;//起始信号下降沿
    	delay();//起始信号保持
    	SCL=0;  	 
}
void IICstop()
{
    	SCL=0;
    	_nop_();
    	SDA=0;
    	_nop_();
    	SCL=1;
    	delay();
    	SDA=1;    
}
void  write_8bit(unsigned char ch)
{
    	unsigned char i=8;
    	while (i--)
    	{   
        	SCL=0;
        	delay();
        	if(ch&0x80)//SCL变低后最长3.5us,可以开始输出数据,或有应答信号出现
          		SDA=1;
        	else    SDA=0;
        	SCL=1;
       		ch<<=1;
        	delay();
     	}
     	SCL=0;
}
unsigned char  read_8bit()
{
    	unsigned char i=8;
    	unsigned char ch=0;
    	while (i--)
    	{  
        	SDA=1;
        	_nop_();
        	SCL=1;
        	ch<<=1;
        	if(SDA==1)
        	ch=(ch|0x01);//SCL变低后最长3.5us,可以开始输出数据,或有应答信号出现
        	SCL=0;
        	delay();
     	}
     	return ch;
}
void ReadIIC_24C02(unsigned char addr)
{
	unsigned char r_high;
    	do                     //输入读数据的起始地址
    	{
     		IICstart();
     		write_8bit(0xA0);  //写操作方式
    	}while(ACK());       //采集应答信号,无应答重新发送
    	write_8bit(addr);   //写单元地址
    	ACK();
    	IICstart();
    	write_8bit(0xA1);   //读操作方式
    	ACK();
    	r_high=read_8bit();     //接收数据
    	SACK();      //在后添加可以顺序读数据
    	IICstop();   
}
void WriteIIC_24C02(unsigned char addr,unsigned char adata) 
{
    	do
    	{
     		IICstart();
     		write_8bit(0xA0);   //写操作方式
    	}while(ACK());      //采集应答信号,无应答重新发送
    	write_8bit(addr);     //写单元地址
    	ACK();                
    	write_8bit(adata);     //发送数据
    	ACK();            //在后添加可以页写
    	IICstop(); 
}
void main()
{
/************************应用写、读数据举例************************/
	WriteIIC_24C02(0x00,0x11);    //向器件地址0x00写入数据0x11 
	ReadIIC_24C02(0x00);          //随机读出地址0x00中的数据
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -