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

📄 ds18b20.c

📁 usblab usb程序开发实验 一个实例
💻 C
字号:
/*
   //************************************************************************* //
   //                  
   //
   //           COPYRIGHT (c)   2006 BY FOSHAN LX.
   //                     --  ALL RIGHTS RESERVED  --
   //
   // File Name:	ds18b20.C
   // Author:		guobin
   // Created:		2006/04/20
   // Modified:
   // Revision:		2.0
   //
   //*************************************************************************
*/

#include "hardware.h"

UCHAR	ROM64Bit[8];
UCHAR	RAM9Byte[9];

RealTM	RealTimeTM;

bit DS18B20_Initial(void)
{
	UINT	i;

	DS18B20_DQ=0;
	i=200;
	while(i--);				//delay minimum= 480us
	DS18B20_DQ=1;
	i=15;
	while(i--);				//delay 15~60us=40us
	i=80;
	while(i--)				//delay 60~240us
		if(!DS18B20_DQ)
			break;
	
	if(i==0xFFFF)
		return	0;
	i=100;					//delay 240us
	while(i--);
	return	1;
}

void DS18B20_Write(UCHAR Dat)
{
	UCHAR	i=0;
    UCHAR	j;

   	for(j=1;j<=8;j++)
   		{
   		if((Dat&0x01)==0x01)
   			{
   			DS18B20_DQ=0;
			for(i=0;i<5;i++);			//delay min=1us	 4us
			DS18B20_DQ=1;
			i=20;
			while(i--);					//delay max=60us
   			}
		else
			{
			DS18B20_DQ=0;
			i=40;						//delay min=60us max=120us	 84us
			while(i--);
			DS18B20_DQ=1;
			for(i=0;i<5;i++);			//delay min=1us
			}
		Dat>>=1;
   		}    
}

UCHAR	DS18B20_Read(void)
{
	UCHAR	i,j;
	UCHAR	Dat;

	Dat=0;
	for(i=0;i<8;i++)
		{
		DS18B20_DQ=0;
		for(j=0;j<2;j++);			//delay min=1us	 2us
		DS18B20_DQ=1;
		for(j=0;j<5;j++);			//delay 2us~10us
		if(DS18B20_DQ)
			Dat+=1<<i;
		j=30;
		while(j--);					//delay min=45us
		}
	return	Dat;
}

UCHAR	DS18B20_Start(void)
{
	UCHAR	i;

	if(!DS18B20_Initial())
		return	0;
	
	DS18B20_Write(0x33);	//read rom code 64bit

	for(i=0;i<8;i++)
		ROM64Bit[i]=DS18B20_Read();

	DS18B20_Write(0x44);	//start convert temprature

	
	return	1;
}

void	DS18B20_WaitDQ(void)
{
	while(!DS18B20_DQ);
}

void	DS18B20_ReadTM(void)
{
	UCHAR	i;
	UINT	j;

	DS18B20_Initial();
	
	DS18B20_Write(0x33);	//read rom code 64bit

	for(i=0;i<8;i++)
		ROM64Bit[i]=DS18B20_Read();

	DS18B20_Write(0xBE);	//Read temprature

	for(i=0;i<9;i++)
		RAM9Byte[i]=DS18B20_Read();

	((UCHAR *)&j)[0]=RAM9Byte[1];
	((UCHAR *)&j)[1]=RAM9Byte[0];

	if(RAM9Byte[1]>0x80)
		{
		RealTimeTM.Sign=1;
		RealTimeTM.ZhengShu=(UCHAR)(~j>>4);
		RealTimeTM.XiaoShu=(16-(j&0x000F))*625;
		if(RealTimeTM.XiaoShu==0)
			RealTimeTM.ZhengShu++;
		}
	else
		{
		RealTimeTM.Sign=0;
		RealTimeTM.ZhengShu=(UCHAR)(j>>4);
		RealTimeTM.XiaoShu=(j&0x000F)*625;
		}
}

⌨️ 快捷键说明

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