找回密码
 立即注册
搜索
查看: 10359|回复: 1

这的函数是错误的吧,求解释!

[复制链接]

2

主题

3

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2017-4-4 18:22:15 | 显示全部楼层 |阅读模式

/**************************实现函数********************************************
*函数原型:                u8 IICwriteBits(u8 dev,u8 reg,u8 bitStart,u8 length,u8 data)
*功  能:            读 修改 写 指定设备 指定寄存器一个字节 中的多个位
输入        dev  目标设备地址
                reg           寄存器地址
                bitStart  目标字节的起始位
                length   位长度
                data    存放改变目标字节位的值
返回   成功 为1
                失败为0
*******************************************************************************/
u8 IICwriteBits(u8 dev,u8 reg,u8 bitStart,u8 length,u8 data)
{

    u8 b;
    if (IICreadByte(dev, reg, &b) != 0) {
        u8 mask = (0xFF << (bitStart + 1)) | 0xFF >> ((8 - bitStart) + length - 1);
        data <<= (8 - length);
        data >>= (7 - bitStart);
        b &= mask;
        b |= data;
        return IICwriteByte(dev, reg, b);
    } else {
        return 0;
    }
}

回复

使用道具 举报

2

主题

3

帖子

7

积分

新手上路

Rank: 1

积分
7
 楼主| 发表于 2017-4-4 18:31:30 | 显示全部楼层
mask和data怎么看都是错误的,如果bitStart=0x02,length=0x3,data是0x05那么mask用二进制表示是11100011,data移位之后是00010100,可算法怎么算都不对
回复

使用道具 举报

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

本版积分规则

粤ICP备20017043号|小黑屋|手机版|Archiver|轮趣科技(东莞)有限公司  

GMT+8, 2024-12-27 11:40 , Processed in 0.049849 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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