我用的是430的1232芯片,让AD来采样电压,然后通过串口发送到上位机上,这都设好啦,能发的,比如发个AB或11,串口调试助手上面都能显示AB和11。因为我采的电压是带有小数的,比如1.31、0、98、1.5像这样就不知道怎么发送啦!望请那位高手帮帮我啊!在下先谢谢!
你的“AB”、“11”是16进制数还是ASCII码?
如果是16进制数,就没有办法看到小数点“.”。
16进制转ASCII码的办法:
1、数值:加0x30。比方“9”,9+0x30=0x39
2、字符:从A开始,大写时为0x41递增,小写时0x61递增。比方“A”0x41、“B”0x42、“a”0x61、“b”0x62
3、其它:小数点0x2e、回车0x0d、换行0x0a
前面省掉
ADC10CTL0 &=~ENC;
volt=((float)(ADC10MEM)/1024.0) *2.5;
send_state();
}
void send_state()
{
float temp;
unsigned int vbuf;
char buf[20],i,b1,b2,b3,b4;
temp = volt*1000;
vbuf = (unsigned int)temp;
b1=vbuf;
b2=(vbuf%1000)/100;
b3=(vbuf%100)/10;
b4=vbuf%10;
TXBUF0 = buf[i]; //发送数据
while((UTCTL0&0X01)==0);
}
我以前是这样写,那我应该怎样写呢?我单独给TXBUF0 =0xAB;的话这样是能发的,换成buf[i]就不知道怎么和我采样的数连在一起啦!望前辈能帮我指点,改改哦,守候着您的回复。
你这个程序看了半天都没明白。
在A/D转换后,A/D转换值经处理应该转换为浮点数赋值给变量volt(应该是全局变量)了“volt=((float)(ADC10MEM)/1024.0) *2.5;”。但在发送函数中,对volt扩大1000倍又强制转换为整型数vbuf,以后一系列对vbuf的运算后没下文了,而发送到缓冲区的却是一个没有赋值的字符型数组元素( buf[i]) !这和你的A/D采样值没有任何关系啊。
对,直接将16进制数据发送出去,让PC来发挥他的优势
问题就是只能发整数部分的,小数部分不知道怎么发呀。比如发1.32这个数,1是能发的,但.32就发不过去啦。那位仁兄能帮帮我呀,
引用:
问题就是只能发整数部分的,小数部分不知道怎么发呀。比如发1.32这个数,1是能发的,但.32就发不过去啦。那位仁兄能帮帮我呀,
|
|
A/D转换出来的数据(两字节)不应该是有小数的,将此数据发送到上位机去处理不就行了吗?
如果嫌复杂了,就直接把数据扩大(x1000),或者更大。。。。
你不会1.32搞成132. 0.98搞成198发送吗?
比如你1.32V直接发1320.