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

📄 read_ds18b20.bak

📁 用单片机实现的温度检测 是整个电路的代码调试
💻 BAK
字号:
sbit TMDAT = P3^3;	//根据实实际情况设定
unsigned char tmpf;		//结果是否为负温,“0”为正温,“1”为负温
//延时部分
void dmsec (unsigned int count)	 				
{								
	unsigned int i;		       				
	while (count)							
	{								
		i = 115;						
		while (i>0) i--;				
		count--;					
    }								
}							

//发送复位
void tmreset (void)						
{		                  		 			
	unsigned int i;
        TMDAT = 1;					
        i++;
	TMDAT = 0;							
	i = 65;							
	while (i>0) i--;         	// 延时 510uS
	TMDAT = 1;							
	i = 8;						//延时60uS				
	while (i>0) i--;
        TMDAT = 1;
        						
}

// 等待存在脉冲
/*unsigned char tmpre (void)			//判断器件是否存在		
{                 					
    unsigned int i;							//
	i=6000;
	while (TMDAT==1&&i>0){i--;}				//
	if(i==0)return	0;
		else
		{
			i=6000;	
			while (TMDAT==0&&i>0){i--;}				//
			if(i==0){return	0;TMDAT=1;}
			else return	1;
		}
	i = 4; while (i>0) i--;		
}*/								

// 读一位
bit tmrbit (void)						
{                   						
	unsigned int i;							
	bit dat;						
	TMDAT = 0;	i++;						
	TMDAT = 1; 	i++; i++;			//微量延时		
	dat = TMDAT;						
	//i = 8; while (i>0) i--;		// 延时			
	return (dat);						
}								


//读一个字节
unsigned char tmrbyte (void) 			 		
{         							
	unsigned char i,j,dat;					
	dat = 0;						
	for (i=1;i<=8;i++)					
	{							
		j = tmrbit ();					
		dat = (j << 7) | (dat >> 1);			
	}							
	return (dat);						
}								


//写一个字节
void tmwbyte (unsigned char dat)				
{                						
	unsigned int i;						
	unsigned char j;						
	bit testb;							
	for (j=1;j<=8;j++)					
	{								
		testb = dat & 0x01;				
		dat = dat >> 1;					
		if (testb)					
		{							
			TMDAT = 0;                            
			i++; i++;                            	
			TMDAT = 1;					
			i = 8; while (i>0) i--;              	
		}						
		else						
		{							
			TMDAT = 0;                         
			i = 8; while (i>0) i--;              	
			TMDAT = 1;					
			i++; i++;                            	
		}							
	}								
}									

//发送ds1820 开始转换
void tmstart (void)							
{   //unsigned char	a;//TC_tmp; 
	//extern	TCOUNT; 
	//TC_tmp=TCOUNT;             						
	/*do	{*/
			tmreset ();				//复位
	//		a=tmpre();				//等待存在脉冲
	//	}	while(a==0&&TC_tmp==TCOUNT);			
	dmsec (1);						//延时					
	tmwbyte (0xcc);					//跳过序列号命令,对所有器件有效	
	tmwbyte (0x44); 				//发转换命令 44H,		
}								



//读取温度
unsigned char tmpread()								
{   unsigned char TMP;         						
	unsigned char a,b,real_a,real_b,real;							
	tmreset();			//复位			
	dmsec(1);			//延时				
    tmwbyte (0xcc);		//跳过序列号命令,对所有器件有效                							//
	tmwbyte (0xbe); 	//发送读取命令 			
	a = tmrbyte ();		//连续读取两位温度		
	b = tmrbyte ();  				
	tmpf  	=	b&0xf0; 
	real_b	=	b&0x0f;
	real_b	=	real_b<<4;
	real_a	=	a&0xf0;
	real_a	=	real_a>>4;
	real	=	real_b|real_a;    
	if(tmpf)TMP=~real;			
         else TMP=real;					
	return	TMP;							
}
//void tmstart (void)
//unsigned long tmpread()
				

⌨️ 快捷键说明

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