智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2026|回复: 0
打印 上一主题 下一主题

想用MHC5883。但k60 i2c连续读取数据读不明白

[复制链接]

24

主题

592

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3933

论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章

威望
1934
贡献
1157
兑换币
1227
注册时间
2012-10-25
在线时间
421 小时
跳转到指定楼层
1#
发表于 2014-7-2 13:47:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的K60野火的库读I2C,野火库里i2c只有单个读取数据的,自己写了个连续读取数据的,但读回来的总是255。
附上程序,明白的朋友给看看,找找毛病。
void Multiple_read_HMC5883()
{   
        unsigned char i;
                            
    i2c_Start(I2C0);//起始信号

    i2c_write_byte(I2C0,0x3C);//发送设备地址+写信号
    i2c_Wait(I2C0);

    i2c_RepeatedStart(I2C0);


    i2c_write_byte(I2C0,0x03); //发送存储单元地址,从0x3开始       
    i2c_Wait(I2C0);

    i2c_Start(I2C0);   //起始信号

    i2c_write_byte(I2C0,0x3D);//发送设备地址+读信号
    i2c_Wait(I2C0);       

    I2C_C1_REG(I2Cx[I2C0]) &= ~I2C_C1_TX_MASK;//接受模式

    for (i=0; i<7; i++)                      //连续读取6个地址数据,存储中BUF
    {
           
            if (i == 6)
        {            
                    I2C_C1_REG(I2Cx[I2C0]) |= I2C_C1_TXAK_MASK;  //最后一个数据需要回NOACK
        }
        else
        {
                I2C_C1_REG(I2Cx[I2C0]) &= ~I2C_C1_TXAK_MASK;  //回应ACK
       }
           
            BUF[i]=I2C_D_REG(I2Cx[I2C0]);
            i2c_Wait(I2C0);
            BUF_1[i]=I2C_D_REG(I2Cx[I2C0]);
           
   }

    i2c_Stop(I2C0);   //停止信号
    Pause();

}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-26 04:09 , Processed in 0.061228 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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