学习嵌入式第四十七天

发布于:2025-09-11 ⋅ 阅读:(17) ⋅ 点赞:(0)

DS18B20

1.特性

  • 独特的单线接口,只需1个接口引脚即可通信
  • 多点(multidrop)能力使分布式温度检测应用得以简化
  • 不需要外部元件
  • 可用数据线供电
  • 测量范围从-55摄氏度至+125摄氏度,增量值为0.5摄氏度
  • 以 9 位数字值方式读出温度
  • 在 1 秒内把温度变换为数字
  • 用户可定义的,非易失性的温度告警设置
  • 告警搜索命令识别和寻址温度在编定的极限之外的器件
  • 应用范围包括恒温控制,工业系统 ,消费类产品 ,温度计或任何热敏系统

2.通信流程

  1. 复位
  2. 51单片机发送0xCC,代表跳过ROM
  3. 51单片机发送0x44,代表ds18b20开启温度转换
  4. 延时等待
  5. 复位
  6. 51单片机发送0xCC,代表跳过ROM
  7. 51单片机发送0xBE,代表读取ds18b20发送过来的温度值
  8. 读取温度数据

3.代码实现

  • 复位

    int ds18b20_Reset(void){
    
    	int t = 0;
    
    	DQ_DOWN;
    	Delay10us(70);
    	DQ_HIGH;
    	Delay10us(5);
    
    	while(DQ_CHECK && t < 30){
    	
    		Delay10us(1);
    		t++;
    	}
    	if(t >= 30){
    	
    		return 0;
    	}
    
    	t = 0;
    	while(!DQ_CHECK && t < 30){
    	
    		Delay10us(1);
    		t++;
    	}
    	if(t >= 30){
    	
    		return 0;
    	}
    
    	return 1;
    }
    
  • 51单片机发送数据

    void write_ds18b20(unsigned char dat){
    
    	int i = 0;
    	for(i = 0;i < 8;i++){
    	
    		if(dat & 1){
    		
    			DQ_DOWN;
    			_nop_();
    			_nop_();
    			DQ_HIGH;
    			Delay10us(5);
    		}
    		else{
    
    			DQ_DOWN;
    			Delay10us(5);
    			DQ_HIGH;
    		}
    		dat >>= 1;
    	}
    }
    
  • 51单片机读取数据

    unsigned char read_ds18b20(void){
    
    	int i = 0;
    	unsigned char ret = 0;
    
    	for(i = 0;i < 8;i++){
    	
    		DQ_DOWN;
    		_nop_();
    		_nop_();
    		DQ_HIGH;
    		_nop_();
    		_nop_();
    		_nop_();
    
    		if(DQ_CHECK){
    		
    			ret |= (1 << i);
    		}
    		Delay10us(5);
    	}
    	return ret;
    }
    
  • 获取温度

    float get_temp(void){
    
    	short ret = 0;
    	unsigned char tl = 0;
    	unsigned char th = 0;
    
    	ds18b20_Reset();
    	write_ds18b20(0xCC);
    	write_ds18b20(0x44);
    	Delay1ms(1000);
    	ds18b20_Reset();
    	write_ds18b20(0xCC);
    	write_ds18b20(0xBE);
    
    	tl = read_ds18b20();
    	th = read_ds18b20();
    
    	ret = th << 8;
    	ret |= tl;
    
    	return ret * 0.0625;
    }
    

网站公告

今日签到

点亮在社区的每一天
去签到