急急急!串口的数据发送问题 在线等待!!

juliasarah   2006-4-26 16:52 楼主
我用的是430的1232芯片,让AD来采样电压,然后通过串口发送到上位机上,这都设好啦,能发的,比如发个AB或11,串口调试助手上面都能显示AB和11。因为我采的电压是带有小数的,比如1.31、0、98、1.5像这样就不知道怎么发送啦!望请那位高手帮帮我啊!在下先谢谢!

回复评论 (13)

你AD采样出来的还是小数吗?
点赞  2006-4-26 17:11
你的“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
点赞  2006-4-26 17:14
前面省掉
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]就不知道怎么和我采样的数连在一起啦!望前辈能帮我指点,改改哦,守候着您的回复。
点赞  2006-4-26 22:48
你这个程序看了半天都没明白。
在A/D转换后,A/D转换值经处理应该转换为浮点数赋值给变量volt(应该是全局变量)了“volt=((float)(ADC10MEM)/1024.0) *2.5;”。但在发送函数中,对volt扩大1000倍又强制转换为整型数vbuf,以后一系列对vbuf的运算后没下文了,而发送到缓冲区的却是一个没有赋值的字符型数组元素( buf[i]) !这和你的A/D采样值没有任何关系啊。
点赞  2006-4-26 23:05
直接发送采样数据,让上位机去处理好了
点赞  2006-4-27 08:51
那我应该怎么来改啊,能帮我改改吗?在下先谢啦!
点赞  2006-4-27 09:29
对,直接将16进制数据发送出去,让PC来发挥他的优势
点赞  2006-4-27 10:56
问题就是只能发整数部分的,小数部分不知道怎么发呀。比如发1.32这个数,1是能发的,但.32就发不过去啦。那位仁兄能帮帮我呀,
点赞  2006-4-27 13:19
引用:

问题就是只能发整数部分的,小数部分不知道怎么发呀。比如发1.32这个数,1是能发的,但.32就发不过去啦。那位仁兄能帮帮我呀,
A/D转换出来的数据(两字节)不应该是有小数的,将此数据发送到上位机去处理不就行了吗?
点赞  2006-4-27 13:22
A/D转换出来的数据没有进行处理前怎么来的小数
点赞  2006-4-27 13:38
引用:

问题就是只能发整数部分的,小数部分不知道怎么发呀。比如发1.32这个数,1是能发的,但.32就发不过去啦。那位仁兄能帮帮我呀,
1能发,3、2就不能发吗?
点赞  2006-4-27 21:36

如果嫌复杂了,就直接把数据扩大(x1000),或者更大。。。。

点赞  2011-12-7 10:43
你不会1.32搞成132. 0.98搞成198发送吗?
比如你1.32V直接发1320.
点赞  2011-12-22 16:51
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复