#include<reg52.h>
#include<stdio.h>
#include<absacc.h>
#include<intrins.h>
//*********************************
#define TURE 1
#define FALSE 0
#define uchar unsigned char
#define uint unsigned int
//*********************************
sbit I2c_scl = P1^0;
sbit I2c_sda = P1^1;
//********************************
uchar e24c02_date[]={0x00,0x01,0x02,0x03};
uchar c2402_buffer[100];
//**********************************
void delay();
void Creat_ack();
void Creat_noack();
bit Check_ack();
void I2c_ini();
void I2c_stop();
void I2c_start();
void I2c_writeB(uchar date);
void I2c_write_one_byte(uchar addr,uchar thedate);
void I2c_write_one_page(uchar addr,uchar *thedate,uchar m);
uchar I2c_readB();
uchar I2c_read_24c02(uchar I2c_addr,uchar I2c_reg_addr);
void I2c_read_one_byte(uchar *buffer,uchar I2c_reg_addr,uchar i);
void main()
{
I2c_ini();
I2c_write_one_byte(0X00,0XCC);
delay();
I2c_write_one_page(0x10,e24c02_date,4);
delay();
P2=I2c_read_24c02(0Xa0,0x00);
delay();
I2c_read_one_byte(c2402_buffer,0x10,5);
while(1)
{
;
}
}
//**********************************
void delay()
{
uchar i="0";
while(i<255)
{
_nop_();
i++;
}
}
//**********************************
void I2c_ini()
{
I2c_scl=1;
I2c_sda=1;
}
//******************
void I2c_stop()
{
I2c_scl=0;
I2c_sda=0;
_nop_();
I2c_scl=1;
_nop_();
I2c_sda=1;
_nop_();
}
//***********************************
void I2c_start()
{
I2c_sda=1;
I2c_scl=1;
_nop_();
I2c_sda=0;
_nop_();
_nop_();
I2c_scl=0;
}
//**************************************
void I2c_writeB(uchar date)
{
uchar temp, i;
temp="date";
for(i=0;i<8;i++)
{
temp=temp<<1;
I2c_scl=0;
_nop_();
I2c_sda=CY;
_nop_();
I2c_scl=1;
_nop_();
}
I2c_scl=0;
_nop_();
I2c_sda=1;
_nop_();
I2c_scl=1;
_nop_();
}
//*************************************************************
void Creat_noack()
{
I2c_scl=0;
I2c_sda=1;
_nop_();
_nop_();
I2c_scl=1;
_nop_();
}
//*************************************************************
void Creat_ack()
{
I2c_scl=0;
I2c_sda=0;
_nop_();
_nop_();
I2c_scl=1;
_nop_();
}
//**********************I2C ACK CHECK***************************
bit Check_ack()
{
uchar i="0";
while(i<255)
{
if(I2c_sda==0)
{
i=255;
}
else i++;
}
I2c_scl=0;
return (~I2c_sda);
}
//******************write one byte*******************************
void I2c_write_one_byte(uchar addr,uchar thedate)
{
I2c_start();
I2c_writeB(0xa0);
Check_ack();
I2c_writeB(addr);
Check_ack();
I2c_writeB(thedate);
Check_ack();
I2c_stop();
}
//********************write a page***************************
void I2c_write_one_page(uchar addr,uchar *thedate,uchar m)
{
uchar i;
// bit ack_temp;
I2c_start();
I2c_writeB(0xa0);
Check_ack();
I2c_writeB(addr);
Check_ack();
for(i=0;i<m;i++)
{
I2c_writeB(thedate);
if(!Check_ack())
{
I2c_stop();
}
}
I2c_stop();
}
//*******************************************************************
uchar I2c_readB()
{
uchar temp,i,j;
for(i=0;i<8;i++)
{
I2c_scl=0;
I2c_sda=1;
_nop_();
_nop_();
_nop_();
_nop_();
I2c_scl=1;
_nop_();
if(I2c_sda==1) j=1;
else j="0";
temp=(temp<<1)|j;
}
return (temp);
}
//************************************************
uchar I2c_read_24c02(uchar I2c_addr,uchar I2c_reg_addr)
{
uchar i;
I2c_start();
I2c_writeB(I2c_addr);
Check_ack();
I2c_writeB(I2c_reg_addr);
Check_ack();
I2c_start();
I2c_writeB(I2c_addr|0x01);
Check_ack();
i=I2c_readB();
Creat_noack();
I2c_stop();
return i;
}
//************************************************
void I2c_read_one_byte(uchar *buffer,uchar I2c_reg_addr,uchar i)
{
uchar j;
I2c_start();
I2c_writeB(0xa0);
Check_ack();
I2c_writeB(I2c_reg_addr);
Check_ack();
I2c_start();
I2c_writeB(0xa1);
Check_ack();
for(j=0;j<i;j++)
{
buffer[j]=I2c_readB();
if(j<i-1)
{
Creat_ack();
}
else
{
Creat_noack();
}
}
I2c_stop();
}
文章评论(0条评论)
登录后参与讨论