zoukankan      html  css  js  c++  java
  • 蓝桥继续水——E2PROM的驱动读写(AT24C02的使用)

    比赛的AT24C02内存最大有2Kbit,即256个Byte。使用的通讯协议是I2C协议。

     

    由于比赛中用到连续按页写,按页读的情况比较少见。(数据没有特别多需要保存)

    所以只在这里介绍以字节为单位的写(Byte Write)随意读(Random Read,当然我就是把它当一个字节的读)。

    1设备地址码:

    由硬件电路图知,0xa0,是我们需要的地址码。(暂不考虑最后1位是读/写命令的问题)

    2.字节写

    S(起始信号)→设备地址+0→A(接收从器件应答)→写入数据的地址→A(接收从器件应答)→写入的数据(8位)→A(接收从器件应答)→P(结束信号)

     函数如下:

    void At24c02Write(unsigned char addr,unsigned char dat)        //这里写得比较粗糙哇,等待应答函数可以用来判断,但是我没有判断,只是贴合时序要求了。
    {
    IIC_Start();
    IIC_SendByte(0xa0);
    IIC_WaitAck();
    IIC_SendByte(addr);
    IIC_WaitAck(); 
    IIC_SendByte(dat);
    IIC_WaitAck();
    IIC_Stop();
    }

    3.随意读

    S(起始信号)→设备地址+0→A(接收从器件应答)→需要读取数据的地址n→A(接收从器件应答)→S→设备地址+1(要求读flash)→A(接收从器件应答)→读取字节→A非(主器件发送非应答信号1)→P(结束信号)

    函数如下:

    unsigned char At24c02Read(unsigned char addr)          //读取的字节需要返回。
    {
    unsigned char num;
    IIC_Start();
    IIC_SendByte(0xa0);
    IIC_WaitAck();//???????
    IIC_SendByte(addr);
    IIC_WaitAck(); //????????

    IIC_Start();
    IIC_SendByte(0xa1);
    IIC_WaitAck();
    num=IIC_RecByte();
    IIC_SendAck(1);
    IIC_Stop();
    return num;
    }

  • 相关阅读:
    (转)Python中的__init__和__new__
    PEP8
    python lstrip()函数
    python中的生成器跟迭代器
    callback
    关于0.0.0.0这个ip的疑问
    Python import中相对路径的问题
    python读取excel
    git本地管理多个密钥/账户
    词法分析之有确定、不确定自动机及其生成器
  • 原文地址:https://www.cnblogs.com/page71/p/13968180.html
Copyright © 2011-2022 走看看