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

📄 ds18b20应用子程序.txt

📁 89C52单片机12M晶振下DS18B20温度传感器测量温度应用子程序源码
💻 TXT
字号:
晶体12M  89C52单片机

DS18B20传感器检测正温度的应用子程序


#include<reg52.h>


#define NOP_1uS  _nop_();

sbit DQ =P3^2;

void delay_20us(unsigned char n)
{
while(n--)
	{
		NOP_1uS;NOP_1uS;NOP_1uS;
		NOP_1uS;NOP_1uS;NOP_1uS;
		NOP_1uS;
	}
}
void ow_reset(void)

{

DQ = 0; //pull DQ line low
delay_20us(25); // leave it low for 500us
DQ = 1; // allow line to return high

delay_20us(4); // wait for presence
presence = DQ; // get presence signal
delay_20us(20); // wait for end of timeslot


} 
//from 1-wire read one byte
byte read_byte(void)
{
byte i;
byte value = 0;

for (i=8;i>0;i--)
{
value>>=1;
DQ = 0; // pull DQ low to start timeslot
NOP_1uS;
DQ = 1; // then return high
NOP_1uS;
NOP_1uS;
NOP_1uS;
if(DQ)value|=0x80;
delay_20us(3); // wait for rest of timeslot
}
return(value);
}
//to 1-WIRE write one byte
void write_byte(char val)
{
byte i;
for (i=8; i>0; i--) // writes byte, one bit at a time
{
DQ = 0; // pull DQ low to start timeslot
NOP_1uS;
NOP_1uS;
DQ = val&0x01;
delay_20us(5); // hold value for remainder of timeslot
DQ = 1;
val=val/2;
}
delay_20us(5);
}
void Read_Temperature()
{  unsigned int oldtarget;

glwd=0;
dlwd=0;
ow_reset();
if(presence==0)
{
write_byte(0xCC); //Skip ROM
write_byte(0x44); // Start Conversion
delay_20us(1);
}
ow_reset();
if(presence==0)
{
write_byte(0xCC); // Skip ROM
write_byte(0xBE); // Read Scratch Pad

dlwd=read_byte();
glwd=read_byte();

ow_reset();

}
vienum=(glwd*256+dlwd);
 return(vienum/16);

}

⌨️ 快捷键说明

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