cpubbs 发表于 2009-7-26 10:37:08

at24c1024程序[转贴]

原贴地址: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):Device 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):Device 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);
}
页: [1]
查看完整版本: at24c1024程序[转贴]