I2C总线AT24C02读写程序

发布者:支持中文最新更新时间:2012-08-16 来源: 51hei关键字:I2C总线  AT24C02  读写程序 手机看文章 扫描二维码
随时随地手机看文章

//****************************************************
  /*
     程序的功能:将数据写入AT24C02中,然后再从其中读取
                 回来赋给P2口,让流水灯显示。
     所涉及芯片:AT24C02
  */
//****************************************************

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit scl=P0^3;//时钟线接在P0^3口
sbit sda=P0^4;//数据线接在P0^4口
void delay()//极短时间的延时
 {
   ; ; ;
 }
void delay1()//较长时间的延时
 {
   uchar i,j;
   uchar k=10;
     for(i=k;i>0;i--)
       for(j=110;j>0;j--);
 }
void chushihua()//对总线进行初始化
 {
   sda=1;
   scl=1;
 }
//=======================================
void start()//起始函数
 {
   sda=1;
   delay();
   scl=1; //时钟线为高电平期间,数据线由高到低的一个跳变表示起始
   delay();
   sda=0;
   delay();
 }
//=========================================
void stop()//终止函数
 {
  sda=0;
  delay();
  scl=1;//时钟线为高电平期间,数据线由低到高的一个跳变表示终止
  delay();
  sda=1;
  delay();
 }
//==========================================
void ack()//应答函数
 {
   uchar i;
   scl=1;
   if((sda==1)&&(i<250))i++;//如果数据线一直为高电平,则一段时间后则默认为应答(即时钟线由高到底的一个跳变)
   scl=0;
   delay();
 }
//===========================================
void noack()//非应答函数 ,在数据线为高电平期间,时钟线一个完整的脉冲表示非应答
 {
   sda=1;
   delay();
   scl=0;
   delay();
   scl=1;
   delay();
   scl=0;
   delay();
 }
//====================================
void write_byte(uchar date)//写字节函数
 {
    uint i;
    scl=0;//时钟线为低电平期间,允许数据的变化
    for(i=0;i<8;i++)
      {
         if(date&0x80)//如果写进的数据与0x80进行与运算为“1”(即为真),则数据线为高电平
          {
            sda=1;
          }
         else //否则为低电平
          {
            sda=0;
          }
         date=date<<1;//对8位数据进行移位操作
         scl=1;//时钟线为高电平(即数据稳定),把数据读走
         delay();
         scl=0; //把时钟线拉回低电平
         delay();
      }
    sda=1; //释放数据线
    delay();
 }
//========================================
uchar read_byte()//读字节函数
 {
    uchar i;
    uchar date=0x00;
    scl=0;
    delay();
    sda=1;//将总线释放
    delay();
     for(i=0;i<8;i++)
       {
         scl=1;//时钟线为高电平(即数据稳定),把数据读走
         delay();
         date=date<<1;
         if(sda)
          {
            date++;
          }
         scl=0;
         delay();
       }
     return date;
 }
void xie(uchar add,uchar date)
 {
    start();
    write_byte(0xa0);//指令码0xa0为写操作
    ack();
    write_byte(add);
    ack();
    write_byte(date);
    ack();
    stop();
 }
uchar du(uchar t)
 {
    uchar k;
    start();
    write_byte(0xa0);
    ack();
    write_byte(t);
    ack();
    start();
    write_byte(0xa1);//指令码0xa1为读操作
    ack();
    k=read_byte();
    noack();
    stop();
    return k;//返回K的值
 }
void main()
 {
   chushihua();
   xie(10,0x44);//在0~256个地址中随意选一地址10,并在该地址写入一字节0x44
   delay1();//此处必须要一个延时函数
   P2=du(10);//将在地址10读回的数据赋给P2口(即让流水灯显示)
   while(1);//让程序停在此处
 }

关键字:I2C总线  AT24C02  读写程序 引用地址:I2C总线AT24C02读写程序

上一篇:74hc595芯片数码管显示
下一篇:四位数据口1602液晶显示

推荐阅读最新更新时间:2024-03-16 13:05

I2C总线协议程序(80c51)
I2C总线协议程序 在做程序是我在网上找的是周立功的程序,感觉还不错顺便转载;在使用的过程中一定要注意时序、时间的问题。 i2c.c /* I2C.c 标准80C51单片机模拟I2C总线的主机程序 Copyright (c) 2005,广州周立功单片机发展有限公司 All rights reserved. 本程序仅供学习参考,不提供任何可靠性方面的担保;请勿用于商业目的 */ #include I2C.h //定义延时变量,用于宏I2C_Delay() unsigned char data I2C_Delay_t; /* 宏定义:I2C_Delay() 功能:延时,模拟I2C总线专用 */ #define I2C_Delay()
[单片机]
基于Keil C的AT24C02串行E2PROM的编程
AT24C02是美国Atmel公司的低功耗CMOS型E2PROM,内含256×8位存储空间,具有工作电压宽(2。5~5。5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)、抗干扰能力强、数据不易丢失、体积小等特点。而且他是采用了I2C总线式进行数据读写的串行器件,占用很少的资源和I/O线,并且支持在线编程,进行数据实时的存取十分方便。 1AT24C02的引脚功能 AT24C02引脚如图1所示。 他的的1、2、3脚是3根地址线,用于确定芯片的硬件地址。第8脚和第4脚分别为正、负电源。第5脚SDA为串行数据输入/输出,数据通过这根双向I2C总线串行传送。第6脚SCL为串行时钟,SDA和SCL为漏极开路端,在实
[单片机]
基于Keil C的<font color='red'>AT24C02</font>串行E2PROM的编程
I2C总线读写E2PROM
这一篇介绍I2C存储器的使用。主要是介绍AT24CXX系列器件,它分为两类,主要是通过被存储容量地址来分的,一类是AT24C02-AT24C16,它的存储容量从256字节到2048字节。另一类是AT24C32-AT24C1024,容量从4K-128K。(理论上好像可以达到最高512K字节容量,但现在网上最高也就能看到AT24C1024也就是128K字节容量) 原理:   I2C总线是一种用于IC器件之间连接的二线制总线。它通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件:不管是单片机、存储器、LCD驱动器还是键盘接口。 I2C总线接口电路结构如图所示。 SDA和SCL
[单片机]
<font color='red'>I2C总线</font>读写E2PROM
基于I2C总线的CMOS图像传感器接口电路设计
    1引言     数码相机等图像消费类电子产品产业正在飞速发展,这使得图像传感器和数码相机专用集成芯片的研制获得巨大的市场支持。目前广泛使用的数码相机图像传感器主要是以下两种:CCD和CMOS。CCD图像传感器具有技术成熟、图像噪声小等优点,但由于制作工艺复杂,与标准工艺不兼容,且需要高电压供电,芯片功耗大,目前仅在高级型数码相机市场上占有一席之地。而CMOS图像传感器采用了CMOS工艺,可以将图像采集单元和信号处理单元集成到同一块芯片上,因而具有集成度高、功耗低、价格便宜的优点,具有很好的发展前景。随着噪声消除技术的改进,目前CMOS图像传感器正由中、低档数码相机向高级型数码相机发展。     现在的CMOS图
[嵌入式]
飞兆半导体转换器产品解决I2C总线应用的兼容性难题
      飞兆半导体公司(Fairchild Semiconductor)开发了一款可配置双电压电平转换器产品FXMA2102,用于I2C总线接口应用的电平转换。FXMA2102能够满足移动设备设计人员的需求,通过使用低功耗的2位电压水平转换器,来解决消费产品和手机的I2C总线应用的混合电压兼容性问题。       FXMA2102是专为从1.65V到5.5V的任何两个电平的双向电压转换而设计的高性能转换器。该器件的两个端口都具有自动方向感测功能,容许任一端口感测输入信号,再输出至另一个端口。       飞兆半导体的新器件适合标准和快速I2C总线模式,并可同时用作转换器、缓冲器和转发器。此外,FXMA2102还具
[电源管理]
飞兆半导体转换器产品解决<font color='red'>I2C总线</font>应用的兼容性难题
51proteus仿真:I2c总线和EEPROM2404的读写
仿真电路图: 仿真程序: #include reg52.h #include INTRINS.H #define uchar unsigned char #define uint unsigned int sbit SCL=P1^0; sbit SDA=P1^1; void delay(void) { _nop_(); _nop_(); _nop_(); _nop_(); } void InitI2C(void) { SDA = 1; SCL = 1; } void I2CStart(void) { SDA=1; delay(); SCL=1; delay(); SDA=0; delay(); SCL=0; }
[单片机]
51proteus仿真:<font color='red'>I2c总线</font>和EEPROM2404的读写
I2C总线及EEPROM的Linux驱动程序的设计
   1 引言   I2C (Inter-Integrated Circuit1总线是一种由Philips公司开发的2线式串行总线,用于连接微控制器及其外围设备。它是同步通信的一种特殊形式,具有接口线少、控制方式简单、器件封装形式小、通信速率较高等优点。在主从通信中,可有多个I2C总线器件同时接到I2C总线上,通过地址来识别通信对象。笔者在开发基于MPC8250的嵌入式Linux系统的过程中发现I2C总线在嵌入式系统中应用广泛,I2C总线控制器的类型比较多,对系统提供的操作接口差别也很大。与I2C总线相连的从设备主要有微控制器、EEPROM、实时时钟、A/D转换器等.MPC8250处理器正是通过内部的I2C总线控制器来和这些连
[单片机]
<font color='red'>I2C总线</font>及EEPROM的Linux驱动程序的设计
HT48R50A的 AT24C02 IIC 示例程序
; ************************************************* ; Function :基于HT48R50A的 AT24C02 IIC 示例程序 * ; MicroProcessor : HT48R50A-1/28SKDIP-A * ; Author: www.picavr.com * ; Crystal : 4MHz * ; ************************************************* #INCLUDE HT48R50A-1.INC OK E
[单片机]
HT48R50A的 <font color='red'>AT24C02</font> IIC 示例程序
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved