本人还是个菜鸟。
我用一块10位AD采样
然后把采样值通过发送给PC
原先程序写的是将高低位分开分别发送
//------------------------------------
// sendtoPC:通过UART发送转换结果到PC
//-------------------------------------
void sendtoPC(void)
{ TI=0;
SBUF= AD0DAT0L; //发送结果高位,即9:2
while (!TI);
TI=0;
SBUF=AD0DAT0R; //发送结果低位,即7:0
while (!TI);
}
这一步可以实现
接下来我想改变这一部分程序让单片机发送 实测值 即为实测多少电压。
修改程序如下
//------------------------------------
// sendtoPC:通过UART发送转换结果到PC
//-------------------------------------
void sendtoPC(void)
{ double AD0DAT0;
TI=0;
AD0DAT0=AD0DAT0L*256+AD0DAT0R; //高低位结合
SBUF= AD0DAT0*3.3/1023.0; //将组合后的数字处理为真实电压后 SBUF 发送 //问题此时的值是否大于8位?
while (!TI);
TI=0;
}
这样一来发送结果好像就不正确了。
希望大家帮我看看 怎样才能使单片机发送实测值。
我对AD部分一直有些没有解决的疑问:
1.如果单片机采样大于8位时,比如10位 需要2个寄存器,是否寄存器L里一定是高位,寄存器R里一定是低位?即第一个寄存器里放的是高八位,第二个寄存器里放的是低二位。数据是左对齐的。
2.如果要将两个寄存器里的数据组成一个完整的数据,公式为 完整数据=寄存器1*256+寄存器2 ?
3.还是举个例子说明吧。 比如采样数据是 1023 那么第一个寄存器里为 1111 1111
第二个寄存器为 1100 0000 是这样么?
4.如果该AD基准电压为3.3V 那么实测电压的计算公式是否为 3.3V*a(采到得10位数据)/1023 ?
说的我自己都有点晕了,大概就这个意思吧。 大家勉强看得懂的话,帮我解答下吧。
非常感谢 |