大家好,在下想做一个温度监测系统,使用的是51
单片机,DS18B20,以及串口发送。
问题描述:
在做之前先进简单的调试,结果碰见了很让我费解的问题,为了调试方便,我在下位机程序中设定了一个常温值2378(是23.78扩大100倍,准备在
labview中再缩小),先用串口调试助手,发现串口调试助手可以接收到01 17 4e(01是一个标志,为了以后可以添加跟多的ds18b20),但是用labview却不能接收到,我用虚拟串口自动发送十六进制01 17 4e,结果labview却可以显示出23.78这个温度,请高手帮帮我,这是怎么回事!
下位机程序如下:
#include <REG52.H>
#include <stdio.h>
void delay(unsigned int i);
unsigned char MESSAGE[3];
unsigned char a;
unsigned int value=2378; //这使我模拟的一个温度值23.78度,之后再在labview中缩小
void main (void)
{
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式2
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80; //波特率提高一倍
TH1 = 0xF3; // Baud 4800、数据位8、停止位1、效验位无(12M)
TL1 = 0xF3;
TR1 = 1; //开启定时器1
ES = 1; //开串口中断
EA = 1; // 开总中断
while(1)
{
MESSAGE[0]=1; //赋值1是为了能够程序扩展,代表的是第一个DS18B20
MESSAGE[1]=value/100;
MESSAGE[2]=value%100;
a=0;
while(a<3)
{
SBUF = MESSAGE[a]; //SUBF接受/发送缓冲器(又叫串行
通信特殊功能寄存器)
while(!
ti); // 等特数据传送 (TI发送中断标志)
TI = 0; // 清除数据传送标志
a++; // 下一个字符
}
delay(3000);
}
}
void delay(unsigned int i)
{
unsigned char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}
labview VI如图:
下面是我的下位机及vi程序:
232发送程序.zip
(43.07 KB, 下载次数: 27)
一周热门 更多>