|
原贴地址:http://zhidao.baidu.com/question/89498189.html
附上C源程序 (AT24C1024)
IIC.h
#define I2C_Sda P1_0
#define I2C_Sck P1_1
void I2C_WriteStr(unsigned char *cp_Src0); //c_Src = {Num, AddU, AddH AddL, Char0, Char1 .... Char n}
void I2C_ReadStr (unsigned char* cp_Src0); //c_Src = {Num, AddU, AddH AddL, Char0, Char1 .... Char n}
void I2C_Write(unsigned char c_Data){
unsigned char c_i;
for (c_i=0; c_i<8; c_i++)
{
I2C_Sda = c_Data&0x80;
c_Data = c_Data<<1;
I2C_Sck = 1;
I2C_Sck = 0;
}
}
unsigned char I2C_Read(){
unsigned char c_i, c_k;
for (c_i=0; c_i<8; c_i++)
{
I2C_Sck = 0;
I2C_Sda = 1;
I2C_Sck = 0;
I2C_Sck = 1;
c_k = c_k<<1;
c_k = c_k|I2C_Sda;
}
return c_k;
}
void I2C_WriteStr(unsigned char *cp_Src0){//c_Src = {Num, AddU, AddH AddL, Char0, Char1 .... Char n}
/*
Addu = 1010 0APW
7~3 = 10100
2(A1) evice Address
1(A17):Address 17 of the EEPROM
0(W/-R):
1: Write
0: Read
*/
unsigned char c_i, c_k, *cp_Src;
I2C_WriteStr_0:
c_k = *cp_Src0+3;
cp_Src = cp_Src0;
cp_Src++;
I2C_Sda = 1;
I2C_Sck = 1;
I2C_Sda = 0;
I2C_Sck = 0;
for (c_i=0; c_i<c_k; c_i++)
{
I2C_Write(*cp_Src);
cp_Src++;
I2C_Sda = 1;
I2C_Sck = 1;
if (I2C_Sda==1) goto I2C_WriteStr_0;
I2C_Sck = 0;
}
I2C_Sda = 0;
I2C_Sck = 1;
I2C_Sda = 1;
}
void I2C_ReadStr (unsigned char* cp_Src0){//c_Src = {Num, AddU, AddH AddL, Char0, Char1 .... Char n}
/* c_Src0 = {Num, AddU, AddH AddL, Char0, Char1 .... Char n}
Addu = 1010 0APW
7~3 = 10100
2(A1) evice Address
1(A17):Address 17 of the EEPROM
0(W/-R):
1: Write
0: Read
*/
unsigned char* cp_k, c_i, *cp_Src;
I2C_ReadStr_0:
cp_Src = cp_Src0;
cp_k = cp_Src0+4;
cp_Src++;
I2C_Sda = 1;
I2C_Sck = 1;
I2C_Sda = 0;
I2C_Sck = 0;
for (c_i=0; c_i<3; c_i++)
{
I2C_Write(*cp_Src);
cp_Src++;
I2C_Sda = 1;
I2C_Sck = 1;
if (I2C_Sda) goto I2C_ReadStr_0;
I2C_Sck = 0;
}
// I2C_Sda = 0;
// I2C_Sck = 1;
// I2C_Sda = 1;
I2C_Sda = 1;
I2C_Sck = 1;
I2C_Sda = 0;
I2C_Sck = 0;
I2C_Write(*(cp_Src0+1)+1);
I2C_Sda = 1;
I2C_Sck = 1;
if (I2C_Sda==1) goto I2C_ReadStr_0;
I2C_Sck = 0;
for (c_i=0; c_i<*cp_Src0; c_i++)
{
*cp_k = I2C_Read();
cp_k++;
I2C_Sck = 0;
I2C_Sda = 0;
I2C_Sck = 1;
}
I2C_Sda = 1;
}
#include <at89x52.h>
#include "i2c.h"
main()
{
unsigned char c_Data[] = {8, 0xa0, 0, 0, 3, 4, 4, 3, 5, 6, 7, 8};
unsigned char c_i;
I2C_WriteStr (c_Data);
I2C_ReadStr(c_Data);
I2C_WriteStr (c_Data);
while(1);
} |
|