|
楼主 |
发表于 2022-9-29 09:06:40
来自手机浏览器
|
显示全部楼层
本帖最后由 广东梁百万 于 2022-9-29 20:15 编辑
zhigao1986 发表于 2022-9-28 21:31
能费分享下程序么?也在用ESP8266调24C04 试了好几个程序,读出都不成功
从24c02读出的数据话data_buf数组上,需要写入的数据放在data_wr数组上。
- #include <Wire.h> //加载iic的库
- #define LED1 2 //LED指示灯
- #define SDA_PIN 4 // SDA引脚,默认gpio4(D2)
- #define SCL_PIN 5 // SCL引脚,默认gpio5(D1)
- byte data_buf[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //读出AT24C02用
- byte data_wr[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //写入AT24C02用
- byte IIC_ADDR = 0x50; // AT24C02的7为IIC器件地址0x50
- void setup() {
- Wire.begin(SDA_PIN, SCL_PIN); //初始化IIC接口,不写入地址则默认为主设备
-
- pinMode(LED1, OUTPUT); //LED指示灯
- }
- void loop() {
- IIC_ADDR= 0X50; //AT24C02的器件地址
- IIC_read(16, 0x00); //读出 AT24C02的数据,这里的16是读出16字节,0x00是AT24C02的数据起始地址
- }
- //-----------------------------------------------------------------------
- //多字节 IIC读出
- // IIC读出程序 i读出字节个数 ,ReadAdd读出位置地始地址
- uint8_t IIC_read(byte i, uint8_t ReadAddr) //i是读出的字节个数 ReadAdd读出位置地始地址
- {
- uint8_t j=0;
- uint8_t t = 20; //超时次数
- uint8_t ret = 0; //返回正确或错信息 0是正确,非0是错误
- Wire.beginTransmission(IIC_ADDR); /* 1. 开始一次传输,设置I2C器件地址 */
- //---------
- Wire.write(ReadAddr); /* 2. 需要读出的位置 */
- //----------------
- ret = Wire.endTransmission(false); /* 3. 完成一次I2C通信,发送一个开始位(即重发码) //返回是0 成功, 1是错误*/
- //--------
- Wire.requestFrom(IIC_ADDR, i); /* 4. 开始一次读取,设置I2C器件地址,读取AT24C02一个字节 */
- //------------
- while (!Wire.available()) /* 5. 读出AT24C02返回的值,成功读取后写入缓存变量处,读取失败返回失败码 */
- {
- t--; //超时次数
- delay(1);
- if(t == 0)
- {
- return 1; //出错返回1
- }
- }
- while(i)
- {
- data_buf[j]= Wire.read();
- i--;
- j++;
- }
- Wire.endTransmission(true); // stop transmitting---停止传送
- }
- //-----------------------------------------------------------------
- //多字节 IIC写入
- uint8_t IIC_write(uint8_t i, uint8_t WriteAddr) //uint8_t i 写入的字节数,
- { //uint8_t WriteAddr起始地址
- byte j=0;
- Wire.beginTransmission(IIC_ADDR); /* 1. 开始一次传输,设置I2C器件地址 */
- //-----------
- Wire.write(WriteAddr); /* 2. 需要写入的起始位置 */
- //-----------
- while(i)
- {
- Wire.write(data_wr[j]); // 3. 需要写入的值
- i--;
- j++;
- }
- //-----------
- return Wire.endTransmission(); /* 4. 完成一次I2C通信,默认发送一个停止位 */
- }
复制代码
|
|