ds18b20.c

来自「AVR atmega64串口驱动」· C语言 代码 · 共 96 行

C
96
字号
#define ds18b20_c
#include "main.h"
void reset_ds18b20(void)
{
	//set_ds18b20_dq_ddr();
	clr_ds18b20_dq();
	_delay_us(198);//100us
	_delay_us(198);//100us
	_delay_us(198);//100us
	_delay_us(198);//100us
	set_ds18b20_dq();
	_delay_us(38);//20us
}
void ack_ds18b20(void)
{
    while(in_ds18b20_dq());
    while(!(in_ds18b20_dq()));
	_delay_us(38);//20us
}
uchar read_ds18b20(void)
{
	unsigned char data=0;
	unsigned char i=0;
	for(i=0;i<8;i++)
	{
		data>>=1;
		clr_ds18b20_dq();
		_delay_us(1);//1us
		set_ds18b20_dq();
		_delay_us(2);//2us
		if(in_ds18b20_dq()) data|=0x80;
		_delay_us(118);//60us
	}
	return(data);
}
void write_ds18b20(unsigned char data)
{
	unsigned char i=0;
	for(i=0;i<8;i++)
	{
		if(data&0x01){
			clr_ds18b20_dq();
			_delay_us(14);//8us
			set_ds18b20_dq();
			_delay_us(108);//55us
		}
		else
		{
			clr_ds18b20_dq();
			_delay_us(108);//55us
			set_ds18b20_dq();
			_delay_us(14);//8us
		}
		data>>=1;
	}	
}
void convert_ds18b20(void)
{
	reset_ds18b20();
    ack_ds18b20();
    _delay_ms(1);
    write_ds18b20(ds18b20_skip_rom);
    write_ds18b20(ds18b20_convert_tem);
}
void read_temperature(void)
{
   // unsigned long x=0;
	unsigned char low=0;
	unsigned char high=0;
	reset_ds18b20();
	ack_ds18b20();
	_delay_ms(1);
	write_ds18b20(ds18b20_skip_rom);
	write_ds18b20(ds18b20_read_ram);
	low=read_ds18b20();
	high=read_ds18b20();
	if(high!=0xff)
	{
		temperature_low=low;
		temperature_high=high;
	}
	else if(low!=0xff)
	{
		temperature_low=low;
		temperature_high=high;
	}
	temper=temperature_high<<4;
	temper+=temperature_low>>4;
	//x=temperature_low+(int)(temperature_high<<8);
	//x*=625;
	//hex_bcd(x);
	convert_ds18b20();
}


⌨️ 快捷键说明

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