功能:在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---------------------
阅读(1196) | 评论(0) | 转发(0) |