单片机和电脑串口通信的有关问题

单片机和电脑串口通信的问题
小弟用51单片机通过串口向电脑的VC编的上位机发数据,结果收到的数据不对。求帮忙看一下
单片机发送程序
#include<reg52.h>
#include<stdio.h>
#define uint unsigned int
#define uchar unsigned char
float f_temp;
sbit k1=P3^0;
uint cnt=0;
/*****************功能函数定义*******************************/
void init_com()
{
TMOD=0X20;
PCON=0X00;
SCON=0X50;
TH1=0XFD;
TL1=0XFD;
TR1=1;
k1=1;
//P1=0x55;
}

void delayms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

void comm(char* parr)
{
do
{
SBUF=*parr++;
while(!TI);
TI=0;
}while(*parr);
}
void com_m( float f_temp)
{  
  uchar buff[3];
  init_com();
  sprintf(buff,"%f",f_temp);
  comm(buff);

}
/***********************************************************/
void main()
{
while(1)
{
f_temp=22;
init_com();
if(k1==0)
{
delayms(10);
if(k1==0)
{
cnt++;
f_temp++;
com_m( f_temp);
if(f_temp>40)
{
f_temp=0;
}
}
while(!k1);

}


}

}


下面的是上位机控件的程序
void CHongjingDlg::OnOnCommMscomm1() 
{
// TODO: Add your control notification handler code here

m_strRXData=" ";
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048];
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2)
{
variant_inp=m_ctrlComm.GetInput();
safearray_inp=variant_inp;
len=safearray_inp.GetOneDimSize();
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);
for(k=0;k<len;k++)
{
BYTE bt=*(char*)(rxdata+k);
strtemp.Format("%c",bt);
m_strRXData+=strtemp;
}
}


UpdateData(FALSE);

------解决方案--------------------
这么简单的流程,有什么错误单步调试一下就ok了。一定要学会调试程序!
------解决方案--------------------
1 上位机软件的串口参数配置是否和下位机的一致
2 简单的写个死循环发送数据,用串口精灵之类的软件看看,是否能收到数据

------解决方案--------------------
for(k=0;k<len;k++)
{
BYTE bt=*(char*)(rxdata+k);
strtemp.Format("%02x",bt);//改成16进制显示,你原先是按字符显示,所以显示的值和下位机不一样
m_strRXData+=strtemp;
}