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

loving_lms 2012-05-29 11:06:31
小弟用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);
...全文
85 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
loving_lms 2012-05-30
  • 打赏
  • 举报
回复
还有一个问题,能不能实现从一个串口中读数据,把这些数据显示在不同的文本框中呢?
hdg3707 2012-05-30
  • 打赏
  • 举报
回复
for(k=0;k<len;k++)
{
BYTE bt=*(char*)(rxdata+k);
strtemp.Format("%02x",bt);//改成16进制显示,你原先是按字符显示,所以显示的值和下位机不一样
m_strRXData+=strtemp;
}
loving_lms 2012-05-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

1 上位机软件的串口参数配置是否和下位机的一致
2 简单的写个死循环发送数据,用串口精灵之类的软件看看,是否能收到数据
[/Quote]
我在网上下载了一个串口调试助手,能正常显示,就是说我写得上位机有问题。我也不知道哪里出现的问题
zgl7903 2012-05-30
  • 打赏
  • 举报
回复
1 上位机软件的串口参数配置是否和下位机的一致
2 简单的写个死循环发送数据,用串口精灵之类的软件看看,是否能收到数据
jiuzhoulh 2012-05-30
  • 打赏
  • 举报
回复
建议楼主使用API来设计串口通信实现
西山小月 2012-05-29
  • 打赏
  • 举报
回复
这么简单的流程,有什么错误单步调试一下就ok了。一定要学会调试程序!

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧