问一段单片机的c语言程序。

2025-06-22 19:40:52
推荐回答(5个)
回答1:

我也接触到了这段代码。是HX711ad转换读数函数用到的
我来解释两点:
1、Count=Count^0x800000,最高位取反。把正负方向的电压转换ad全部变成正的数值。例如24位2进制可以表示的数值为-8388608~8388607,没有负载时为0;
最高位取反后表示数值为0~16777215,没有负载时候显示为8388608,这样做的目的是避免出现负数,方便计算。如果你做电子秤的话,我建议就不要这句了。一般不会有负数的。
2、有的代码后面还跟了一段
/* if((Count & 0x800000) == 0x800000)
{
Count = ~(Count - 1);
} */
表示负数补码还原成正值

回答2:

任何一位二进制数同 1 异或都会取反
任何一位二进制数同 0 异或都保持不变
Count=Count^0x800000;
把24位数据最高位取反
至于 你为什么要最高位取反的话 要 看你的AD芯片手册了 算法我模拟了一下 之前的那一段就是取得了24位有效数据位了 第二十五的时种 取了个 反 !日

回答3:

第一句是明白的,因为在上面FOR循环读25位数据,每循环一次首先左移一位补0不管高低电平,然后判断,如果DOUT是低电平说明数据是零补的零正好,如果是高电平则为1.所以要加1把补的0变成1,这样才完成数据读。数据转换用得是与我怀疑是错了,应该是或命令才对

回答4:

第一句是dout不为零,执行count++,count的值为count与800000异或

回答5:

坐等高手