⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.c

📁 温度控制系统——毕业设计
💻 C
字号:
#include "reg52.h"
#include "delay.h"
#include "intrins.h"
sbit dq=P1^4;
void rest()
{
	dq=0;
	delay_n10us(60);
	dq=1;
	delay_n10us(60);
}

void write1()
{
	dq=0;
	_nop_();_nop_();
	_nop_();_nop_();
	dq=1;
	delay_n10us(7);
}

void write0()
{
	dq=0;
	delay_n10us(8);
	dq=1;
}

bit read()
{
	bit temp;
	dq=0;
	_nop_();_nop_();
	_nop_();
	dq=1;_nop_();
	if(dq)temp=1;
	else temp=0;
	delay_n10us(8);
	return temp;	
}

void write_18b20_data(unsigned char date)
{
	unsigned char m;
	dq=1;
	for(m=0;m<8;m++)
	{
		if(date&0x01)write1();
		else write0();
		date=date>>1;
	}
}

unsigned char read_18b20_data()
{
	unsigned char m;
	unsigned char date=0;
	dq=1;
	for(m=0;m<8;m++)
	{
		date=date>>1;
		if(read())date=date|0x80;
	}
	return date;
}

void ini_18b20()
{
	rest();
	write_18b20_data(0xcc);		//跳过ROM匹配
	write_18b20_data(0x4e);		//发写寄存器指令
	write_18b20_data(0x7d);		//写高温报警125
	write_18b20_data(0xc9);		//写低温报警-55
	write_18b20_data(0x00);		//写转换模式10位模式,100m
}
unsigned char read_tempuature()
{
	unsigned char htem,ltem,tempuature=0;
	rest();
	write_18b20_data(0xcc);		//跳过ROM匹配
	write_18b20_data(0x44);		//发送转换指令
	delay_ms(150);
	rest();
	write_18b20_data(0xcc);		//跳过ROM匹配
	write_18b20_data(0xbe);		//发送读RAM指令
	ltem=read_18b20_data();		//读温度低位
	htem=read_18b20_data();		//读间谍高位
	rest();
	htem=htem<<5;
	ltem=ltem>>3;
	tempuature=tempuature|htem;
	tempuature=tempuature|ltem;
	return tempuature;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -