#include "reg51.h"
#include <intrins.h>
sbit SCL=P2^0;
sbit SDA=P2^1;
#define uchar unsigned char
/********************************************************************
Function Name : void DelayFun(int para)
Purpose : delay
Input Parameter : ms
Return :
Remark :
***********************************************************************/
void DelayFun(int para)
{
int loop;
for (loop = 0;loop < para; loop++)
_nop_();
}
/********************************************************************
Function Name : void StartFun(void)
Purpose : start signal
Input Parameter :
Return :
Remark :
***********************************************************************/
void StartFun(void)
{
SDA = 1;
DelayFun(1);
SCL = 1;
DelayFun(5);
SDA = 0;
DelayFun(5);
SCL = 0;
}
/********************************************************************
Function Name : void EndFun(void)
Purpose : end signal
Input Parameter :
Return :
Remark :
***********************************************************************/
void EndFun(void)
{
SDA = 0;
DelayFun(1);
SCL = 1;
DelayFun(5);
SDA = 1;
DelayFun(5);
SCL = 0;
}
/********************************************************************
Function Name : void WriteoneByteFun(unsigned char dat)
Purpose : Write one byte
Input Parameter : write data
Return :
Remark :
***********************************************************************/
void WriteoneByteFun(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
SDA=1;
if((dat&0x80)==0x00)
SDA=0;
DelayFun(1);
SCL=1;
DelayFun(5);
SCL=0;
DelayFun(1);
dat=dat<<1;
}
SDA=1;
SCL=1;
DelayFun(5);
SCL=0;
DelayFun(5);
}
/********************************************************************
Function Name : uchar ReadoneByteFun(uchar ack)
Purpose : Read one byte
Input Parameter : 应答信号
Return : read data
Remark :
***********************************************************************/
uchar ReadoneByteFun(uchar ack)
{
char i,dat;
dat=0x00;
SDA=1;
DelayFun(1);
for(i=0;i<8;i++)
{
SCL=1;
dat=dat<<1;
if(SDA)
dat|=0x01;
SCL=0;
DelayFun(5);
}
if(ack)
SDA=0;
SCL=1;
DelayFun(5);
SCL=0;
DelayFun(5);
return dat;
}
/********************************************************************
Function Name : void Write_24c04Fun(uchar Data[],uchar Address,uchar Num)
Purpose : write 24c04
Input Parameter : data,addr to write,write num
Return : none
Remark :
***********************************************************************/
void Write_24c04Fun(uchar Data[],uchar Address,uchar Num)
{
uchar i;
uchar *PData;
PData=Data;
for(i=0;i<Num;i++)
{
StartFun();
WriteoneByteFun(0xa0);
WriteoneByteFun(Address+i);
WriteoneByteFun(*(PData+i));
EndFun();
DelayFun(20);
}
}
/********************************************************************
Function Name : void Read_24c04Fun(uchar Data[],uchar Address,uchar Num)
Purpose : read 24c04
Input Parameter : store addr,read addr,read num
Return : none
Remark :
***********************************************************************/
void Read_24c04Fun(uchar Data[],uchar Address,uchar Num)
{
uchar i;
uchar *PData;
PData=Data;
for(i=0;i<Num;i++)
{
StartFun();
WriteoneByteFun(0xa0);
WriteoneByteFun(Address+i);
StartFun();
WriteoneByteFun(0xa1);
*(PData+i)=ReadoneByteFun(0);
DelayFun(20);
EndFun();
}
} |