cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 1554|回复: 0

at24c1024程序[转贴]

[复制链接]
发表于 2009-7-26 10:37:08 | 显示全部楼层 |阅读模式
原贴地址: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);  
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2025-4-10 09:15 , Processed in 0.557100 second(s), 6 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表