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

📄 ds18b20.h

📁 温度传感器DS18B20 AVR的C语言驱动程序。
💻 H
字号:
#define	 CLR_DS18B20	(PORTE&=~(1<<PE6))//数据线强制拉低
#define	 SET_DS18B20	(PORTE|=(1<<PE6))//数据线强制拉高,上拉
#define	 HLD_DS18B20	(DDRE|=(1<<PE6))//Mega64控制总线
#define	 RLS_DS18B20	(DDRE&=~(1<<PE6))//释放总线
#define	 STU_DS18B20	(PINE&(1<<PE6))//数据线的状态

void TemResError_pro(void);/*报错函数,温度高或DS18B20短线时报错*/
/*******************************************************************************************
** 函数名称: resetDS18B20
** 功能描述: DS18B20初始化
*******************************************************************************************/
void resetDS18B20(void)
{
	unsigned char errTime;
restartDS18B20:
	errTime=0;
	HLD_DS18B20;
	CLR_DS18B20;//PORT7输出0
	Delay_tenth_us(50);		//500us复位低电平480us~960us
	SET_DS18B20;
	RLS_DS18B20;//porte7为输入状态
	while(STU_DS18B20)	
	{
		_delay_us(5);	 	//5us
		errTime++;
		if(errTime>20)
			{
			TemResError_pro();		
			goto restartDS18B20;
			}
	}
	errTime=0;
	while(!(STU_DS18B20))	
	{
		Delay_tenth_us(1);	 //10US
		errTime++;
		if(errTime>30)
			{
			TemResError_pro();	
			goto restartDS18B20;
			}
	}
}
/*******************************************************************************************
** 函数名称: readByteDS18B20(void)
** 功能描述: 读DS18B20一个字节
*******************************************************************************************/
unsigned char readByteDS18B20(void)
{
	unsigned char i;
	unsigned char retVal=0;
	//RLS_DS18B20;		//释放总线
	for(i=8;i>0;i--)
	{
	 	retVal>>=1;
	    HLD_DS18B20;	//Maga16控制总线
		CLR_DS18B20;	//强制拉低
		_delay_us(2);	//延时大于1us	
		RLS_DS18B20;	//释放总线,DS18B20会将总线强制拉低
		SET_DS18B20;
		asm("nop");
		if(STU_DS18B20)	retVal|=0x80;
		_delay_us(15);	 //15us
		_delay_us(15);	 //15us
		RLS_DS18B20;	//释放总线
		_delay_us(15);	//15us
		_delay_us(15);	//15us
	}
	_delay_us(2);	 	//2.71us(大于1us就行了)
	return(retVal);
}
/*******************************************************************************************
** 函数名称: writeByteDS18B20
** 功能描述: 写DS18B20一个字节
*******************************************************************************************/
void writeByteDS18B20(unsigned char wb)
{
	unsigned char i;
	unsigned char temp;
	RLS_DS18B20;		//释放总线
	for(i=0;i<8;i++)
	{
		HLD_DS18B20;	//Maga16控制总线
		CLR_DS18B20;	//强制拉低
		_delay_us(15);	//15us
		temp=wb>>i;
		temp&=0x01;
		if(temp)
			{
			RLS_DS18B20;	//释放总线
			SET_DS18B20;
			}
		else
			{
			HLD_DS18B20;
			CLR_DS18B20;	//强制拉低
			}
		_delay_us(15);	 	//15us
		_delay_us(15);	 	//15us
		_delay_us(15);	 	//15us
		RLS_DS18B20;		//释放总线
		SET_DS18B20;
		_delay_us(2); 		//大于1us就行了
	}
}
/*******************************************************************************************
** 函数名称: readTempDS18B20(void)
** 功能描述: 读DS18B20温度
*******************************************************************************************/
void StartTemShift(void)
{
	resetDS18B20();
	writeByteDS18B20(0xcc); 	//跳过ROM
	writeByteDS18B20(0x44);		//启动温度转换
	//Delay_tenth_ms(100);
}
/*******************************************************************************************
** 函数名称: readTempDS18B20(void)
** 功能描述: 读DS18B20温度
*******************************************************************************************/
unsigned int readTempDS18B20(void)
{
	unsigned char tempL,tempH;
	unsigned int Temp;
	resetDS18B20();
	writeByteDS18B20(0xcc);		//跳过ROM
	writeByteDS18B20(0xbe);		//读数据
	tempL=readByteDS18B20();
	tempH=readByteDS18B20();
	Temp=(tempH<<8)|tempL;
	StartTemShift();//启动温度转换
	return(Temp);
} 


⌨️ 快捷键说明

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