/*the header files name is AT24C01-512.h
include AT24C01/01A/02/04/08/16/32/64/128/256/512
*the header files program's function is link exterior extend E2PROM
*the link chip's name is AT24C01A-512
* Debug frequency:22.1184MHz
*the program's synopsis as follows
* Author by:weiyi
* Establish on Date:27-12-2002
* Modified on Date:31-10-2002
* Edition NO.:V1.0
#define Wait_1us {_nop_();_nop_();}
#define Wait_2us {Wait_1us;Wait_1us;}
#define Sla_Wr 0xa0 /*0000 0 0 0 0*/
#define Sla_Rd 0xa1 /*0000 0 0 0 1*/
#define AT24C01 0x01
#define AT24C01A 0x02
#define AT24C02 0x03
#define AT24C04 0x04
#define AT24C08 0x05
#define AT24C16 0x06
#define AT24C32 0x07
#define AT24C64 0x08
#define AT24C128 0x09
#define AT24C256 0x0a
#define AT24C512 0x0b
#define Mem_Size AT24C256 //
01/01A/02/04/08/16/32/64/128/256/512
#define Chip_1 0x00 //本器件的器件地址,可以第一8个不同地 sbit bSda =P3^3;
sbit bScl =P3^4;
bit bScan_Err;
unsigned char idata cShare_Buf[2]; //I2c read and write buffer
void Start_I2c(void);
void End_I2c(void);
unsigned char Scan_I2c();
void Send_I2c(unsigned char cData);
void Send_Ack(void);
void Send_Not_Ack(void);
void Write_Mem(unsigned char cMem_Size,cChips_Address,cData_Size,unsigned int
cStart_Address);
void Read_Mem(unsigned char cMem_Size,cChips_Address,cData_Size,unsigned int
cStart_Address);
/************Name:ScanI2c***********
Function:read 1byte from 24C01/512
NO.:1
Run time:79us 1=4+2us 0=5+1us f=111kbps/83.3Kbps
**********Function Start************/
void Start_I2c(void)
{
unsigned char /*idata*/ i;
bSda=bScl=1;
for(i=0;i<2;i++); //wait 7us
bSda=0;
for(i=0;i<2;i++); //wait 7us
bScl=0;
}
/**********Function End*************/
/************Name:ScanI2c***********
Function:read 1byte from 24C01/512
NO.:1
Run time:79us 1=4+2us 0=5+1us f=111kbps/83.3Kbps
**********Function Start************/
void End_I2c(void)
{
unsigned char /*idata*/ i;
bSda=0;
bScl=1;
for(i=0;i<2;i++); //wait 7us
bSda=1;
}
/**********Function End*************/
/************Name:ScanI2c***********
Function:read 1byte from 24C01/512
NO.:1
Run time:79us 1=3/5us 0=1/5us f=250/100kbps
**********Function Start************/
aaaaaaaaaaaaaaaaaaunsigned char Scan_I2c()
{
unsigned char /*idata*/ i,j;//IIC data
Stop_Dog; //喂
狗
bSda=1;
j=0;
for(i=0;i<8;i++)
{
bScl=1;
j<<=1;
Wait_2us;
j|=bSda;
万花茶//Scan 0 Scan 1
bScl=0;
Wait_2us;
Wait_2us;
}
return j;
}
/**********Function End*************/
/************Name:SendI2c***********
Function:Send 1byte to 24C01/512
NO.:2
Run time:82us 1=1/3us 0=3us f=250/100kbps
**********Function Start************/
void Send_I2c(unsigned char cData)弧形门
{
unsigned char /*idata*/ i;
Stop_Dog; //喂狗
for(i=0;i<8;i++)
{
bSda=(bit)(cData&0x80);
bScl=1;
cData<<=1;
Wait_2us;
Wait_2us;
bScl=0;
Wait_2us;
}
bSda=bScl=1; //检测ACK
for(i=0;(bSda==1)&&(bScan_Err==0);i++)
{
if(i==30)
bScan_Err=1; //如果101us没有响应就错误 Stop_Dog; //喂狗
}
bScl=0;
}
/**********Function End************/
/************Name:SendAck***********
Function:Send ack
NO.:3
Run time:10us+4us
**********Function Start************/
void Send_Ack(void)
{
unsigned char /*idata*/ i;
bSda=0;
bScl=1;
for(i=0;i<2;i++); //wait 8us
bScl=0;靠背轮
bSda=1;
u型卡子}
/**********Function End*************/
/************Name:SendNotAck***********
Function:send not ack
NO.:4
Run time:10us+4us
**********Function Start************/
void Send_Not_Ack(void)
{
unsigned char /*idata*/ i;
bScl=bSda=1;
for(i=0;i<2;i++); //wait 8us
bScl=0;
}
/**********Function End*************/
/************Name:WriteMem***********
Function:write data to 24C01/512
NO.:5
Run time:80us(1byte)*cData_Size+
**********Function Start************/
void Write_Mem(unsigned char cMem_Size,cChips_Address,cData_Size,unsigned int
>动态投影灯