使用51单片机与PC进行串口通信时,怎么将一个温度值(带两位小数)发送到VB编写的上位机界面上显示?

使用51单片机与PC进行串口通信时,怎么将一个温度值(带两位小数)发送到VB编写的上位机界面上显示? SBUF是8位的 ,是不是要分两次发,一次发整数部分, 一次发小数部分呢?

使用51单片机与PC进行串口通信时,需将一个温度值(带两位小数)按通信协议规范组成的数据帧发送到PC机,VB则按通信协议规范组成的数据帧编写的上位机程序,接收和处理数据帧,并显示于运行程序界面或控件上。

    数据帧组成:分帧长、帧首、数据和帧尾等。

    数据:

    带两位小数的温度值发送需要制定好合适的数据约定,假释温度值是在1000摄氏度以内。

    可以使将实际温度值乘100倍取整,以两字节的整形变量传送。

    也可以使将实际温度值乘100倍取整,以5个ASCII字符直接传送。

    51单片机按上述方案取一组成数据帧发送给上位机串口。

    VB编写的上位机串口接收程序的数据接收处理代码,按下位机采取的数据约定和数据帧格式接收和处理数据,取出数据除以100,获得所需的带两位小数在程序界面显示。

    需要注意的是整形变量方式接收需要按二进制模式接收,字符串方式接收以文本模式接收。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-09
可以啊,你自己定个协议,然后PC解包就可以了,
打个比方说
你发
aa 00 xx,aa表示帧头,00表示温度高位,xx写温度高位数值
aa 01 yy,aa表示帧头,01表示温度低位,yy写温度低位数值
当然这只是比较简单的说法,还有字长啊,检验啊等等问题需要考虑本回答被网友采纳
第2个回答  2012-11-09
不需要分2次发送,把小数点忽略,一般单片机里是二进制数,你就全部作为一个整数发送,上位机接收到后再分解加入小数点。你也可以单片机里转化为ASCII,就可以有小数点,再发送。但很麻烦的,不如pc机接收到再处理。
第3个回答  2012-11-09
你问度本身开始就是数字量,为什么你要先转换成小数再发呢?还有,带两位小数,你可以先扩大100倍再发啊,位数不够肯定得分两次发了,办法有很多,挑最简便易行的就好了,只要得到正确结果就ok
第4个回答  2012-11-09
你可以移位,转换成整数
然后再发。
相似回答