
比如说5V参考电压,10位AD,读AD转换值为m,则所测电压为X=5m/1024V,处理时可以这样:X=m*(5000/1024)=m*(625/128)(mV),如果以V为单位显示,那显示的时候再加一个小数点就行了。如果不需要显示,在以后的运算中根据精度需要做适当的变换就可以了
MOV R0, #40H四个数据的起始地址
MOV R2, #4
MOV R3, #0四个数据的和
MOV R4, #0
A_LOOP:
MOV A, R3
ADD A, @R0 加数据低字节
MOV R3, A
INC R0
MOV A, R4
ADDC A, @R0 加数据高字节
MOV R4, A
INC R0
DJNZ R2, A_LOOP
-------------------------下面除以4,右移两位即可
CLR C
MOV A, R4
RRC A 先移高八位
MOV R4, A
MOV A, R3
RRC A 后移低八位
MOV R3, A
CLR C 再移动一次
MOV A, R4
RRC A
MOV R4, A
MOV A, R3
RRC A
MOV R3, A
结果在 R4R3。
END
找出最大、最小,要比较双字节的数据。
全部循环一遍,所花费的时间,就太多了。
特别是多字节的数据,特费时间。
不如,利用这些时间,多采样几个数据,累加后,取平均值。
用向右移位,代替除法,特别方便。
那么,采样数据的个数,宜取:4、8、16。
个数再多,好像也没有必要了。
10位和12位代表的意思是指其的二进制数的位数。10、12代表的是其分辨率位1/{(2的n次方)-1},如果是10位的话就是1/{(2的10次方)-1}=1/1023约等于0.001,位数也高,精度也高,进而误差越小。
两者的计算关系:
“位数”是A/D转换器的数学表达力(分辨力),就是输出的最小变化量其实是模拟量的离散值,在二进制系统中,它是满度量程的1/(2^x),式中的x为位数,与精度相关,但不等于精度。
实际用途中的“精度”是个综合性指标,需要考虑非线性度、偏移、温漂、倍率漂移等器件特性以及搭成的电路外部电气特性指标,这些都对电路的精度有直接影响,要综合考虑。
AD转换是把连续量的模拟量转换为不连续的数字量,数字量的位数直接表达了取样时的精度,严格说只能是接近实际数的一个近似数,位数越多精度越高,好比一把普通尺和一把千分尺,两者的计算关系(应该是换算关系)就是把通过传感器测量所得的实数(电压、电流、角度、位移、温度等等的标量)变换为便于计算机处理的二进制数。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)