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

📄 ds18b20.c

📁 数据采集系统的好参考资料,高精度的传感器采集系统
💻 C
字号:
//=========================================================
//                test the temputure with 18b20
//                copyright by wangmeng 2006.4.3
//==========================================================
#include"reg51.h" 
sbit DQ =P2^3;                // 定义DQ引脚为P1.7
//============================================================
//delay time is (1+2+2*t)*1.08
//=============================================================
void delay(unsigned char t) 
{
	while(--t);
}
//=============================================================
//reset 18b20
//=============================================================
unsigned char reset(void) 
{
	unsigned char presence;
	DQ = 0;  			
	delay(240); 		//holding 483us(400~960)
	DQ = 1; 			
	delay(15); 			//holding 33us(15~60)
	presence = DQ; 		
	delay(240); 		//wait for 18b20 203
	return(presence); 	// return the sign,0 is presence, 1 is no
}
//==============================================================
//write  one bit to 18b20
//==============================================================
void write_bit(char bitval) 
{
 	DQ = 0;
	delay(1);
	if(bitval) DQ =1; 		//if write 1,DQ return 1 
	else DQ = 0;
   	delay(28); 				//holding 63us(>60us)
   	DQ = 1; 	
}	
//==============================================================
//write one byte to 18b20
//==============================================================
void write_byte(char val) 
{
   	unsigned char i;
   	unsigned char temp;
   	for (i=0; i<8; i++) 
	{						// 写入字节, 每次写入一位 
      	temp = val>>i; 		
      	temp &= 0x01; 		
      	write_bit(temp); 
    }
}
//==================================================
//read one bit from the 18b20
//==================================================
unsigned char read_bit(void) 
{
   	unsigned char i;
    DQ = 0;
	delay(1);
   	DQ = 1;							// then return high
   	
	delay(2); 						//delay 15us
   	i=DQ;
	delay(25);
	DQ = 1;
	return(i); 			
}
//========================================================
//read one byte from 18b20
//========================================================
unsigned char read_byte(void) 
{
   	unsigned char i;
   	unsigned char value = 0;
   	for (i=0;i<8;i++) 
	{  				// 读取字节,每次读取一个字节
      	if(read_bit()) value|=0x01<<i; 	// 然后将其左移
      	delay(3); 					
    }
   	return(value);
}
//========================================
//get the temperature
//========================================
char Read_Temperature(void) 
{
   	unsigned char get[10];
   	unsigned char temp_lsb,temp_msb;
   	int k;
   	reset();
   	write_byte(0xCC); 					// 跳过 ROM
   	write_byte(0x44); 					// 启动温度转换
   	
	delay(50);
   	
	reset();
   	write_byte(0xCC); 					// 跳过 ROM
   	write_byte(0xBE); 					// 读暂存器
   	
	for (k=0;k<9;k++)
	{
      	get[k]=read_byte();
	}
   	
	temp_msb = get[1]; 	// Sign byte + lsbit
   	temp_lsb = get[0]; 	// Temp data plus lsb
	k=temp_msb;
	k&=0x07;			//match the sign bit
	k=k<<8|temp_lsb;
	k=k/16;
   	return(k);
}

⌨️ 快捷键说明

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