AT24C02的使用说明和完整代码-51单片机

AT24C02的使用说明和完整代码-51单片机EEROM AT24C02 的使用说明和参考代码 at24c02 的原理及使用方法在其说明资料中已有充分的讲述 本篇仅对其使用的关键步骤进行罗列 以及说明一下具体的使用代码 at24c02 使用 iic 驱动 需要对其进行启动 停止 等待相应 写字节 读字节的操作 iic 启动

AT24C02的使用说明和完整代码-51单片机

简述:at24c02为存储器芯片,可以使用单片机将数据存入其中,同时也可以任意读取。

at24c02的原理及使用方法在其说明资料中已有充分的讲述,本篇仅对其使用的关键步骤进行罗列,以及说明一下具体的使用代码。

at24c02使用iic驱动,需要对其进行启动、停止、等待响应、写字节、读字节的操作

  • iic启动和停止:启动/关闭总线
    void IIC_Start(void)
    {

    SDA = 1;
    SCL = 1;
    somenop;
    SDA = 0;
    somenop;
    SCL = 0;
    }
    void IIC_Stop(void)
    {

    SDA = 0;
    SCL = 1;
    somenop;
    SDA = 1;
    }
    2.等待相应,在每次对at24c02操作后,at24c02会对单片机发出相应信号,以代表at24c02接收到了主机发来的信号,单片机需要等待接收响应。
    bit IIC_WaitAck(void)
    {

    SDA = 1;
    somenop;
    SCL = 1;
    somenop;
    if(SDA)
    {

    SCL = 0;
    IIC_Stop();
    return 0;
    }
    else
    {

    SCL = 0;
    return 1;
    }
    }
    3.发送一个字节的数据:向at24c02发送一个字节的数据
    void IIC_SendByte(unsigned char byt)
    {

    unsigned char i;
    for(i=0;i<8;i++)
    {

    if(byt&0x80)
    {

    SDA = 1;
    }
    else
    {

    SDA = 0;
    }
    somenop;
    SCL = 1;
    byt <<= 1;
    somenop;
    SCL = 0;
    }
    }
    4.接收一个字节的数据:读取总线上的一个字节的数据
    unsigned char IIC_RecByte(void)
    {

    unsigned char da;
    unsigned char i;
    for(i=0;i<8;i++)
    {

    SCL = 1;
    somenop;
    da <<= 1;
    if(SDA)
    da |= 0x01;
    SCL = 0;
    somenop;
    }
    return da;
    }
    至此,我们有了基本的总线驱动,开始封装功能函数
    1.单片机向at24c02的某地址写入一个字节的数据:启动总线,第一次发送(发送8位一个字节),发送硬件地址(at24c0的a0,a1,a2的电平即为此三位的硬件地址,通常为000)和读写类型(最后一位,RW低RD高),等待响应,第二次发送,发送要写入的地址,等待响应,第三次发送,发送要写入的数据,等待响应,关闭总线,略作延时。
    void rom_write(char add,da)
    {

    IIC_Start();
    IIC_SendByte(0xa0);
    IIC_WaitAck();
    IIC_SendByte(add);
    IIC_WaitAck();
    IIC_SendByte(da);
    IIC_WaitAck();
    IIC_Stop();
    delay(30);
    }
    2单片机从at24c02的某个地址读取一个字节的数据:先向at24c02写地址,再重新启动总线,发送读当前地址指令,等待响应后读取总线数据。
    char rom_read(char add)
    {

    char t;
    IIC_Start();
    IIC_SendByte(0xa0);
    IIC_WaitAck();
    IIC_SendByte(add);
    IIC_WaitAck();
    IIC_Start();
    IIC_SendByte(0xa1);
    IIC_WaitAck();
    t=IIC_RecByte();
    return t;
    delay(30);
    }
    至此,单片机控制at24c02的功能函数封装完毕,以下是完整的参考程序,程序为向eeprom的0x00地址写入0x01,并且再读取,具体验证方式读者可使用数码管显示来验证。







































































































/* 作者:FarryNiu https://blog.csdn.net/_/article/details/ */ #include <reg52.h> #include "intrins.h" #define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();} sbit SDA = P2^1; /* 数据线 */ sbit SCL = P2^0; /* 控制线 */ char a; //a为读取出的数据 void delay(int z) { int x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } //启动 void IIC_Start(void) { SDA = 1; SCL = 1; somenop; SDA = 0; somenop; SCL = 0; } //停止 void IIC_Stop(void) { SDA = 0; SCL = 1; somenop; SDA = 1; } //等待响应 bit IIC_WaitAck(void) { SDA = 1; somenop; SCL = 1; somenop; if(SDA) { SCL = 0; IIC_Stop(); return 0; } else { SCL = 0; return 1; } } //发送一个字节 void IIC_SendByte(unsigned char byt) { unsigned char i; for(i=0;i<8;i++) { if(byt&0x80) { SDA = 1; } else { SDA = 0; } somenop; SCL = 1; byt <<= 1; somenop; SCL = 0; } } //接收一个字节 unsigned char IIC_RecByte(void) { unsigned char da; unsigned char i; for(i=0;i<8;i++) { SCL = 1; somenop; da <<= 1; if(SDA) da |= 0x01; SCL = 0; somenop; } return da; } void rom_write(char add,da) { IIC_Start(); IIC_SendByte(0xa0); IIC_WaitAck(); IIC_SendByte(add); IIC_WaitAck(); IIC_SendByte(da); IIC_WaitAck(); IIC_Stop(); delay(30); } char rom_read(char add) { char t; IIC_Start(); IIC_SendByte(0xa0); IIC_WaitAck(); IIC_SendByte(add); IIC_WaitAck(); IIC_Start(); IIC_SendByte(0xa1); IIC_WaitAck(); t=IIC_RecByte(); return t; delay(30); } void main() { rom_write(0x00,0x01); //向AT24C02的地址0x00处写入0x01 a=rom_read(0x00); //从AT24C02的地址0x00处读取数据,赋值给a while(1) { /*自行验证:在第一次向AT24C02写入数据后,将代码中的rom_write(0x00,0x01)删除后烧写进入单片机,仅保留读取函数,如果还能读到,则验证成功*/ } } 

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232563.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • typora安卓_Markdown编辑器:Typora

    typora安卓_Markdown编辑器:Typora免费好用的Markdown写作工具,支持图片,代码高亮、插入表格、自定义主题、CSS完全配置等。如果你懂一点计算机基础,它还可以是一个“浏览器”。Typora(V0.9.9.26)关于Typora的介绍如下:Readable&WritableTyporawillgiveyouaseamlessexperienceasbothareaderandaw…

    2022年5月19日
    50
  • C++常见几种输入方法评测(int && long long)

    C++常见几种输入方法评测(int && long long)

    2021年9月27日
    44
  • 解决Android 网页加载链接 图片不展示问题

    解决Android 网页加载链接 图片不展示问题

    2021年10月1日
    44
  • 盘点购物分享系统,有兴趣的来看看哦

    盘点购物分享系统,有兴趣的来看看哦最近蘑菇街,美丽说等购物分享的火爆。社会化电子商兴起。很多站长看到了市场。你是不是也想做个这类的网站倒是可以接着往下看。现在主流的购物分享系统有方维,拼品,拼图秀,爱图谱,乐兔淘,花世界等。1.方维购物分享系统:现在网上用的较多购物分享系统,比较像蘑菇街的类型。功能较全面,操作起来就是有点复杂,搞了好久才搞定她,不过你可以再网上下载说明书。开发的配套也…

    2022年5月3日
    41
  • 用java打印空心菱形_java打印空心直角三角形

    用java打印空心菱形_java打印空心直角三角形打印菱形尤其是空心菱形对于初学者来说有一定难度,熟练掌握了for循环后,还是可以打印出来的分析:1.先打印上半部分,再打印下半部分      2.找准空格与星号之间的关系,然后再打印      3.上半部分每一行数目分别为1、3、5、7、9、7、5、3、1      4.找准关系2*i-1     //练习二:打印菱形与空心菱…

    2022年9月29日
    3
  • css中的clear的作用是什么_css中class的用法

    css中的clear的作用是什么_css中class的用法cssclear属性深入了解:一、什么是CSSclear清除浮动?元素浮动之后,周围的元素会重新排列,为了避免这种情况,使用clear属性。clear属性指定元素两侧不能出现浮动元素。使用clear属性往文本中添加图片廊:clear属性值:lef…

    2025年10月29日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号