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

📄 at24c02.c

📁 应用I2C的断电存储程序,供大家借鉴
💻 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 + -