请高人指点一下!!!大家帮我看看这个简单的基于89c51单片机与labview的温度检测系统为什么不能运行。
下面是我的具体的单片机C程序与labview程序图,其中单片机程序与labview程序单独运行都是没问题的,但是连接起来就不能运行了。盼望高手们的指点,提出能够使它真正运...
下面是我的具体的单片机C程序与labview程序图,其中单片机程序与labview程序单独运行都是没问题的,但是连接起来就不能运行了。盼望高手们的指点,提出能够使它真正运行起来!(希望您能够亲自运行一下,我自己是在单片机开发板上实验的)
#include<reg52.h>#include <stdio.h>#include <stdlib.h>#define uchar unsigned char#define uint unsigned int sbit DQ=P3^7;//51单片机的P3^7与18B20的数据输入端口相连接uchar temp1,temp2;uchar i;bit Flag;
uint ReData,SenData;//延时void delay(uint m){ while(m--);}
//复位程序void ow_rest(void){ uchar feedback=0; DQ=1; delay(8); DQ=0; delay(80); DQ=1; delay(14); feedback=DQ; delay(20);}//从单总线上读字节uchar read_byte(void){ uchar value=0; for(i=0;i<8;i++) { DQ=0; value>>=1; DQ=1; if(DQ) { value|=0x80; } delay(4); } return(value);}//详单总线上写字节void write_byte(uchar val){ for(i=0;i<8;i++) { DQ=0; DQ=val&0x01; //val>>=1; delay(5); DQ=1; val>>=1; }}//读取温度void read_temperature(void){ ow_rest(); write_byte(0xcc); write_byte(0x44); delay(10); ow_rest(); write_byte(0xcc); write_byte(0xbe); temp1=read_byte(); temp2=read_byte();}//主程序void main(){ uint temp; bit flag; SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1 TMOD|= 0x20; //定时器工作方式2 PCON|= 0x80; //TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592) TH1 = 0xF3; // //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M) TL1 = 0xF3; TR1 = 1; ES = 1; //开串口中断 EA = 1; // 开总中断
while(1) { read_temperature(); temp=temp2*256+temp1; if(temp2>0xf8) { flag=1; temp=~temp+1; } temp=temp*0.0625; SenData=temp; if (Flag==1) { SBUF=SenData; //SUBF接受/发送缓冲器 while(TI==0); TI=0; Flag=0; } } }
/**************************************************** 串口中断程序******************************************************/void ser_int (void) interrupt 4 using 1{ if(RI == 1) //RI接受中断标志 { RI = 0; //清除RI接受中断标志 ReData = SBUF; //SUBF接受/发送缓冲器 Flag=1; }} 展开
#include<reg52.h>#include <stdio.h>#include <stdlib.h>#define uchar unsigned char#define uint unsigned int sbit DQ=P3^7;//51单片机的P3^7与18B20的数据输入端口相连接uchar temp1,temp2;uchar i;bit Flag;
uint ReData,SenData;//延时void delay(uint m){ while(m--);}
//复位程序void ow_rest(void){ uchar feedback=0; DQ=1; delay(8); DQ=0; delay(80); DQ=1; delay(14); feedback=DQ; delay(20);}//从单总线上读字节uchar read_byte(void){ uchar value=0; for(i=0;i<8;i++) { DQ=0; value>>=1; DQ=1; if(DQ) { value|=0x80; } delay(4); } return(value);}//详单总线上写字节void write_byte(uchar val){ for(i=0;i<8;i++) { DQ=0; DQ=val&0x01; //val>>=1; delay(5); DQ=1; val>>=1; }}//读取温度void read_temperature(void){ ow_rest(); write_byte(0xcc); write_byte(0x44); delay(10); ow_rest(); write_byte(0xcc); write_byte(0xbe); temp1=read_byte(); temp2=read_byte();}//主程序void main(){ uint temp; bit flag; SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1 TMOD|= 0x20; //定时器工作方式2 PCON|= 0x80; //TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592) TH1 = 0xF3; // //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M) TL1 = 0xF3; TR1 = 1; ES = 1; //开串口中断 EA = 1; // 开总中断
while(1) { read_temperature(); temp=temp2*256+temp1; if(temp2>0xf8) { flag=1; temp=~temp+1; } temp=temp*0.0625; SenData=temp; if (Flag==1) { SBUF=SenData; //SUBF接受/发送缓冲器 while(TI==0); TI=0; Flag=0; } } }
/**************************************************** 串口中断程序******************************************************/void ser_int (void) interrupt 4 using 1{ if(RI == 1) //RI接受中断标志 { RI = 0; //清除RI接受中断标志 ReData = SBUF; //SUBF接受/发送缓冲器 Flag=1; }} 展开
展开全部
uchar temp1,temp2;
temp=temp*0.0625;
SenData=temp;
??
浮点??无符号字符??
一次只能发8位
你先用串口调试助手看过数据正确发送没??
电平转换过没??
temp=temp*0.0625;
SenData=temp;
??
浮点??无符号字符??
一次只能发8位
你先用串口调试助手看过数据正确发送没??
电平转换过没??
更多追问追答
追问
电平转换过了;
只能接受整数部分;
追答
就程序来说是只能发整数部分啊 你的问题就是这个么
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有硬件,没法测试你的程序啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个问题不是很难,我们没有相关硬件,但是你可以从硬件入手,找一下原因!
追问
硬件你能提一些建议吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个简单 我也做过
追问
请求指点一下!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询