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

📄 18b20_1.h

📁 485通信仿真源码.rar
💻 H
字号:
#include<reg51.h>
#include<intrins.h>
#define _18B20_1_h
#define uchar unsigned char
#define uint unsigned int

sbit DQ=P3^7;

void delay10us(uchar t)
{
	uchar i;
	for(;t>0;t--)
		for(i=5;i>0;i--);

}

/**********************18B20处理函数*************************
************************************************************/
void b20_ini()					//18b20的初始化
{
	uchar r_ack;

	DQ=0;
	delay10us(45);				//	480us延时
	DQ=1;
	delay10us(5);			//	15-60s的等待时间
	r_ack=DQ;					//	低脉冲表示器件存在
	delay10us(10);			//	60-240us延时
}


void b20_w_byte(uchar dat)		//	向18b20写一字节数据
{
	uchar i;

	for(i=8;i>0;i--)
	{
		DQ=0;
		DQ=dat&0x01	;
		dat>>=1;
		delay10us(5);		//	写1在拉低15us后采样,写0要持续60us
		DQ=1;
	}	
}


uchar b20_r_byte()			//	从18b20读一字节数据
{
	uchar i,temp=0;

	for(i=8;i>0;i--)
	{
		DQ=0;
		temp>>=1;
		DQ=1;
		_nop_();					//	读0时要在拉低后的15us内读取

		if(DQ)	temp|=0x80;

		delay10us(5);			//	每个时间片必须大于60us
		DQ=1  ;
	}

	return temp;  
}


int b20_temperate()		//	读取温度寄存器
{
	uchar b20_l=0,b20_h=0;
	int tem_i=0;

	b20_ini();			//	18b20复位
	b20_w_byte(0xCC);		//	跳过rom操作
	b20_w_byte(0x44);		//	开始温度转换

	b20_ini();
	b20_w_byte(0xCC);
	b20_w_byte(0xBE);		//	读ram数据
	b20_l=b20_r_byte();	//	读温度低位寄存器
	b20_h=b20_r_byte();	//	读温度高位寄存器
			  
	tem_i=(((b20_h&0x07)<<4)|((b20_l&0xf0)>>4)); //取整数部分温度


	return (tem_i); 
}		   

⌨️ 快捷键说明

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