24位的AD要转换芯片是因为24位二进制数字位数太长,所以改用6位16进制数字来替代。2进制和16进制数字之间的转换很简单,每一位16进制数字对应四位2进制数字,这样比较简明一些。
AD转换就是模数转换,可以把模拟信号转换成数字信号。AD芯片的8位,12位,16位,24位代表的是AD转换的二进制位数。比如8位AD转换后二进制数值的取值范围为00000000 ~ 11111111,换成十进制数值为 0 ~ 255。6位AD二进制数取值范围是 00000000 00000000 ~ 11111111 11111111,换成十进制数是 0 ~ 65535,12位和24位也是一样的。总之位数多,AD转换后分辨率高,数值精度高。
24位AD范围是 -2^23 + 1 ~ +2^23 - 1(这里^代表次幂)。此范围从0x800000~0x7fffff也能看出来,最高位为符号位,0x800000代表-2^23 + 1,0x7fffff代表+2^23 - 1。
而count = count^0x800000中的 ^ 符号代表的是按位异或运算(C语言中就是这么规定)至于你这个程序应该是有问题的,正确写法如下:if(count & 0x800000 == 0x800000)//判断符号位,1为负,0为正{ count = ~(count - 1)。
24位AD精度要求参考电压非常稳定。单片机内部一般最高带的AD最高12位,再高稳定度达不到,参考精度电压也不行,受单片机干扰。分辨率高的应用都是外置AD