Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2338033
  • 博文数量: 816
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-17 17:57
文章分类

全部博文(816)

文章存档

2011年(1)

2008年(815)

分类:

2008-12-17 18:09:00

功能:在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) |
给主人留下些什么吧!~~