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

📄 ds18b20.c

📁 DS18B20的读写函数
💻 C
字号:
#include<reg52.h>
#include<stdio.h>
#include <intrins.h>
#include"pdp.h"

unsigned char READ_DS(void)
{
	unsigned short temperature;
	unsigned char temp_high,temp_low;		

	initiate18b20();
	write18b20(0xCC);
	write18b20(0x44);
	initiate18b20();
	write18b20(0xCC);
	write18b20(0xBE);
	temp_low = read18b20();
	temp_high = read18b20();
	initiate18b20();

	if((temp_high&0xf8)==0x00)
	{
		temperature = ((temp_high<<8)&0xff00) + temp_low;
		temperature = temperature>>4;
		temperature = temperature&0x007f;
		return(temperature);
	}
	else
	{
		return(0x01);
	} 	

}

bit initiate18b20(void)
{
	unsigned short i;

	SD = 0;					   //初始化,送RESET,513.78us
	for(i=0;i<300;i++)		   
	{
		_nop_();
	}
	SD = 1;
	i = 0;
	while(SD)
	{
		i++;
		if(i>18) break;
	}

	if((!SD) && (i>4) && (i<19))	//等待DS18B20回送PRESENCE
	{
		i = 0;
		while(!SD)
		{
			i++;
			if(i>72) break;
		}
		if(SD && (i>16) && (i<73))	return(1);
		else return(0);
	}		
	else
	  return(1);
}

unsigned char read18b20(void)
{
	unsigned char temp = 0x00;
	unsigned char i,j;

	for(j=0;j<8;j++)
	{
		SD = 0;					
		for(i=0;i<1;i++);		// 3us

		SD = 1;
		for(i=0;i<3;i++)	   // 8us
		{
			_nop_();
		}					   
							   // 在15us前读总线数据
		if(SD)
		{
		  temp = (temp|(0x01<<j));			  
		}
		
		for(i=0;i<22;i++)	   //延时54us
		{
			_nop_();
		}
		
		SD = 1;
		for(i=0;i<2;i++) 		//recovery time	 6us
		{
			_nop_();
		}			 
	}
	return(temp);
}

void write18b20(unsigned char command)
{
	unsigned char i,j;

	for(j=0;j<8;j++)
	{
		SD = 0;						// 写每一位前的始化,将总线拉低8us
		for(i=0;i<3;i++)
		{
			_nop_();				// 
		}
		if((command>>j)&0x01)
		{
			SD = 1;
			for(i=0;i<32;i++)		// 写1后,保持79us   (60us<t<120us)
			{
	         	_nop_();
			}
			SD = 1;
			for(i=0;i<3;i++)		// 写完释放总线,恢复8us	 (1us<t<15us)
			{
	         	_nop_();
			}
		}
		else
		{
			SD = 0;
			for(i=0;i<32;i++)		// 写0后,保持79us   (60us<t<120us)
			{
	         	_nop_();
			}
			SD = 1;
			for(i=0;i<3;i++)		// 写完释放总线,恢复8us	 (1us<t<15us)
			{
	         	_nop_();
			}
		}
	}
}

⌨️ 快捷键说明

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