大家帮我看看这个简单的基于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; }} 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询