C++爱好者 - 网友留言

1228阅读 0评论2008-12-17 3JTwF2T
分类:

功能:在C++Builder的Edit框内打入浮点数(字符),转换成浮点数后,将该浮点数转成4字节送到单片机,单片机将4字节转成浮点数,乘2后发回PC。
问题:1、显示单片机传回的数据不正确,。(PC与单片机的通讯用字符试过,没有问题)

单片机程序:
#include "reg51.h"
#include "string.h"
#include "math.h"

#define uchar unsigned char
#define uint unsigned int

#define INBUF_LEN 20   //数据长度

uchar idata inbuf1[INBUF_LEN];
uint count=0;

static float x1,x2,y1,y2;

sbit LED=P2^6;
bit read_flag=0;

void init_serial_comm()     //单片机初始化
{
     。。。
}
void send_char_comm(uchar ch)        //串口发送字节
{
SBUF=ch;
while(TI==0);
TI=0;
}
void send_string_comm(uchar *str, uint strlen)          //串口发送字符串
{
uint k=0;
do
{
send_char_comm(*(str+k));
k++;
}
while(k}
void serial_comm() interrupt 4 using 3            //中断接受
{
    if(RI)
    {
        unsigned char ch;
        RI = 0;
        ch=SBUF;
        if(ch=='$')                  //结束标志。
        {
             read_flag=1;
        }
        else
        {
             inbuf1[count++]=ch;
        }
    }  
}
void floattopack()                //浮点数转4字节
{
int i;
for(i=0;i<4;i++)
{
inbuf1[i]=*((uchar *)(&y1)+i);
}
for(i=0;i<4;i++)
{
inbuf1[i+4]=*((uchar *)(&y2)+i);;
}
inbuf1[8]='$';
}
void packtofloat()                      //4字节转浮点数
{
int i;
uchar ppp[4];
for(i=0;i<4;i++)
{
ppp[i]=inbuf1[i];
}
x1=*(float *)(&ppp[0]);
for(i=0;i<4;i++)
{
ppp[i]=inbuf1[i+4];
}
x2=*(float *)(&ppp[0]);
}
void main()
{
init_serial_comm();
while(1)
{
if(read_flag)
{
packtofloat();
y1=x1*2;
y2=x2*2;
floattopack();
send_string_comm(inbuf1,9);
          read_flag=0;
count=0;
strcpy(inbuf1,"");
}
}
}


C++Builder程序和上面的差不多。


--------------------next---------------------

上一篇:C++爱好者 - 网友留言
下一篇:C++爱好者 - 网友留言