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

📄 ds18b20_demo.txt

📁 PICC18 DS18B20温度传感器读写程序
💻 TXT
字号:
//初始化函数
void Init_zl(void)
{
	 unsigned char x=0;
	 TRISAbits.TRISA0=0; 
	 PORTAbits.RA0 = 0;    //单片机拉低
	 delay1(90); //精确延时 大于 480us,改成500us
	 TRISAbits.TRISA0=1;   //释放总线
	 delay1(20);   //改成75us
	 x=PORTA&0X01;
	 delay1(90);  //改成450us
}
//读一个字节
unsigned char ReadZL(void)
{
unsigned char i=0;
unsigned char dat = 0,addr;
for (i=8;i>0;i--)
 {	
	dat>>=1;
  	TRISAbits.TRISA0=0;
  	PORTAbits.RA0 = 0; // 给脉冲信号
 	TRISAbits.TRISA0=1;
 	delay1(1);  // 延时1us
  	Aport=PORTA&0X01; 
  	if(Aport)
   		dat|=0x80;
  	delay1(18);   // 改成延时60us
 }
 return(dat);
}
//写一个字节
void WriteZL (unsigned char dat)
{
	unsigned char i=0;
	for (i=8; i>0; i--)
	{
		TRISAbits.TRISA0=0;
		PORTAbits.RA0 =0; 
		PORTAbits.RA0 = dat&0x01;
		delay1(15);   //改成60us
		PORTAbits.RA0 = 1;
		TRISAbits.TRISA0=0;
		dat>>=1;
		delay1(15);   //改成延时5us 
	}
	//delay1(15);
}
//读取温度
unsigned int ReadTempZL(void)
{
	unsigned char a=0;
	unsigned char b=0;
	unsigned int t=0;
	float tt=0;
	Init_zl();
	WriteZL(0xCC); // 跳过读序号列号的操作
	WriteZL(0x44); // 启动温度转换
	delay1(100);   //改成延时775ms
	Init_zl();
	WriteZL(0xCC); //跳过读序号列号的操作
	WriteZL(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
	adresult.adre[0]=ReadZL();
	adresult.adre[1]=ReadZL();
	t=adresult.y1;
	tt=(float)t;
	tt*=0.0625;
	tt+=0.5;
	t=(unsigned int) tt;
	return(t);
}

//////*****************///////////
//初始化函数
void Init_sl0(void)
{
	 unsigned char x=0;
	 TRISAbits.TRISA1=0; 
	 PORTAbits.RA1 = 0;    //单片机拉低
	 delay1(90); //精确延时 大于 480us
	 TRISAbits.TRISA1=1;   //释放总线
	 delay1(20);
	 x=PORTA&0X02;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
	 delay1(90);
}
//读一个字节
unsigned char ReadSL0(void)
{
	unsigned char i=0;
	unsigned char dat = 0,addr;
	for (i=8;i>0;i--)
	{
	  	dat>>=1;
	  	TRISAbits.TRISA1=0;
	  	PORTAbits.RA1 = 0; // 给脉冲信号
	  	TRISAbits.TRISA1=1;
	  	delay1(1);   // 延时1us
	  	Aport=PORTA&0X02; 
	  	if(Aport)
	   		dat|=0x80;
	   	delay1(18);
 	}
 	return(dat);
}
//写一个字节
void WriteSL0 (unsigned char dat)
{
	 unsigned char i=0;
	 TRISAbits.TRISA1=0; 
	 for (i=8; i>0; i--)
	 {
		TRISAbits.TRISA1=0;
		PORTAbits.RA1 =0; 
		PORTAbits.RA1 = dat&0x02;  //原dat&0x01
		delay1(15);
		PORTAbits.RA1 = 1;
		TRISAbits.TRISA1=0;
		dat>>=1;
		delay1(15);
	 }	
}
//读取温度
unsigned int ReadTempSL1(void)
{
	unsigned char a=0;
	unsigned char b=0;
	unsigned int t=0;
	float tt=0;
	Init_sl0();
	WriteSL0(0xCC); // 跳过读序号列号的操作
	WriteSL0(0x44); // 启动温度转换
	delay1(100);
	Init_sl0();
	WriteSL0(0xCC); //跳过读序号列号的操作
	WriteSL0(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
	adresult.adre[0]=ReadSL0();
	adresult.adre[1]=ReadSL0();
	t=adresult.y1;
	tt=t*0.0625;
	tt+=0.5;
	t=(unsigned int) tt;
	return(t);
}

//////*****************///////////
//初始化函数
void Init_sl1(void)
{
	 unsigned char x=0;
	 TRISAbits.TRISA2=0; 
	 PORTAbits.RA2 = 0;    //单片机拉低
	 delay1(90); //精确延时 大于 480us
	 TRISAbits.TRISA2=1;   //释放总线
	 delay1(20);
	 x=PORTA&0X03;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
	 delay1(90);
}
//读一个字节
unsigned char ReadSL1(void)
{
	unsigned char i=0;
	unsigned char dat = 0,addr;
	for (i=8;i>0;i--)
	{
	  	dat>>=1;
	  	TRISAbits.TRISA2=0;
	  	PORTAbits.RA2 = 0; // 给脉冲信号
	  	TRISAbits.TRISA2=1;
	  	delay1(1);   // 延时1us
	  	Aport=PORTA&0X03; 
	  	if(Aport)
	   		dat|=0x80;
	   	delay1(18);
 	}
 	return(dat);
}
//写一个字节
void WriteSL1 (unsigned char dat)
{
	 unsigned char i=0;
	 TRISAbits.TRISA2=0; 
	 for (i=8; i>0; i--)
	 {
		TRISAbits.TRISA2=0;
		PORTAbits.RA2 =0; 
		PORTAbits.RA2 = dat&0x03;  //原dat&0x01
		delay1(15);
		PORTAbits.RA2 = 1;
		TRISAbits.TRISA2=0;
		dat>>=1;
		delay1(15);
	 }	
}
//读取温度
unsigned int ReadTempSL2(void)
{
	unsigned char a=0;
	unsigned char b=0;
	unsigned int t=0;
	float tt=0;
	Init_sl1();
	WriteSL1(0xCC); // 跳过读序号列号的操作
	WriteSL1(0x44); // 启动温度转换
	delay1(100);
	Init_sl1();
	WriteSL1(0xCC); //跳过读序号列号的操作
	WriteSL1(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
	adresult.adre[0]=ReadSL1();
	adresult.adre[1]=ReadSL1();
	t=adresult.y1;
	tt=t*0.0625;
	tt+=0.5;
	t=(unsigned int) tt;
	return(t);
}

⌨️ 快捷键说明

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