单总线温度采集

1. DS18B20温度传感器:DS18B20是一种数字温度传感器,具有高精度、数字输出、单总线通信等特点。它可以直接连接到51单片机的IO口上,通过单总线协议进行数据通信。

2. 单总线协议:单总线协议是一种串行通信协议,通过一根数据线实现数据的传输和控制。在51单片机上使用单总线协议可以减少硬件连接,简化电路设计。

3. 采集流程:在51单片机上实现单总线温度采集的流程通常包括初始化DS18B20传感器、发送温度转换命令、读取温度数据等步骤。通过编写相应的程序,可以实现对DS18B20传感器的读取和温度数据的处理。

4. 应用领域:51单片机单总线温度采集广泛应用于各种温度监测系统,如温室控制、温度报警、环境监测等领域。通过采集环境温度数据,可以实现对环境的实时监测和控制。

总的来说,51单片机单总线温度采集是一种简单且有效的温度监测方案,适用于各种嵌入式系统和物联网应用。通过学习和实践,可以掌握这种温度采集技术,为自己的项目和应用增添新的功能和特性。

DS18B20

DS18B20是一款数字温度传感器,由美国芯片制造商Maxim Integrated公司生产。它采用单总线接口,能够通过数字信号输出温度数据,精度高达±0.5°C。DS18B20具有独特的64位ROM编程地址,可以通过唯一的地址来识别和区分多个传感器。它还具有低功耗特性,适用于各种温度测量应用,如室内温度监控、气象站、工业控制等领域。DS18B20被广泛应用于各种电子设备和系统中,是一款性能稳定可靠的数字温度传感器。


 

DB18B20通信时序 

DS18B20是一种数字温度传感器,采用单总线接口进行通信。下面是DS18B20的通信时序简介:

1. 初始化:主控制器发送初始化信号,即产生一个脉冲信号,持续时间至少480微秒,然后释放总线。

2. 传输指令:主控制器发送指令给DS18B20,指令包括读取温度、写入配置等。

3. 传输数据:DS18B20接收指令后,开始传输数据。数据传输采用脉冲编码方式,每个脉冲持续时间为60微秒,高电平表示逻辑1,低电平表示逻辑0。

代价

向DS18B20写一位数据

void WR_Bit(bit i)
    {
          DQ=0;//产生写时序 
          _nop_();
          _nop_();//总线拉低持续时间要大于1us
          DQ=i;//写数据 ,0和1均可
          Delayxus_DS18B20(3);//延时60us,等待ds18b20采样读取 
          DQ=1;//释放总线 
    }

DS18B20写字节函数

void WR_Byte(unsigned char dat)
    {
          unsigned char i="0";
          while(i++<8)
          {
                 WR_Bit(dat&0x01);//从最低位写起 
                 dat>>=1; //注意不要写成dat>>1
          }
    }

4. 数据采集:主控制器接收到DS18B20传输的数据后,进行数据采集和处理,得到温度值。

5. 结束通信:通信结束后,主控制器发送复位信号,即产生一个脉冲信号,持续时间至少480微秒。

以上是DS18B20的通信时序简介,通过这些步骤可以实现主控制器与DS18B20之间的通信和数据传输。
 

protues仿真图

代码如下 

#include "reg51.h"
#include "intrins.h"
#define uchar unsigned char
#define uint unsigned int 
#define out P0
sbit smg1=out^4;
sbit smg2=out^5;
sbit DQ=P3^7;
void delay5(uchar);
void init_ds18b20(void);
uchar readbyte(void);
void writebyte(uchar);
uchar retemp(void);
 
void main(void)			       //主函数
{
	uchar i,temp;
	delay5(1000);
	while(1)
	{
	 	temp=retemp();	
	 	for(i=0;i<10;i++)			//连续扫描数码管10次
	 	{
	 		out=(temp/10)&0x0f;
	 		smg1=0;
	 		smg2=1;
	 		delay5(1000);			//延时5ms
	 		out=(temp%10)&0x0f;
	 		smg1=1;
	 		smg2=0;
	 		delay5(1000);			//延时5ms
	 	}
	}
}
 
void delay5(uchar n)			//函数功能:延时5µs	
{
	 do
	 {
	 	_nop_();
	 	_nop_();
	 	_nop_();
	 	n--;
	 }
	 while(n);
}
 
void init_ds18b20(void)		//函数功能:18B20初始化
{
	 uchar x=0; 
	 DQ =0;    
	 delay5(120); 
	 DQ =1;    
	 delay5(16);
	 delay5(80);
}
 
uchar readbyte(void) 			//函数功能:读取1字节数据
{
	uchar i=0;
	uchar date=0;
	for (i=8;i>0;i--)
	{
		  DQ =0;
		  delay5(1);
		  DQ =1;			//15µs内拉释放总线
		  date>>=1;
		  if(DQ)
		  date|=0x80;
		  delay5(11);
	 }
 	return(date);
}
 
void writebyte(uchar dat) 			//函数功能:写1字节
{
 uchar i=0;
 for(i=8;i>0;i--)
 {
	  DQ =0;
	  DQ =dat&0x01;				//写"1" 在15µs内拉低
	  delay5(12);	   			//写"0" 拉低60µs
	  DQ = 1;	   
	  dat>>=1;
	  delay5(5);
	  }
}
 
uchar retemp(void)			//函数功能:读取温度
{
	uchar a,b,tt;
	uint t;
	init_ds18b20();
	writebyte(0xCC); 
	writebyte(0x44);
	init_ds18b20();
	writebyte(0xCC); 
	writebyte(0xBE); 
	a=readbyte();
	b=readbyte();
	t=b;
	t<<=8;
	t=t|a;
	tt=t*0.0625;
	return(tt);
}

keil波形

 

总结 

在此次学习温度传感器的过程中,了解到了单总线的工作原理,通过通过这次实验,可以验证通信时序的重要性,收益很多,为学习51单片机打下基础。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值