📄 ds18b20通用程序.txt
字号:
-- DS18B20的通用程序
#include <reg932.h>
#include <intrins.h>
#define Seck 20 //1秒中的主程序的系数
#define NOP_1uS _nop_();_nop_();_nop_();_nop_();_nop_();_nop_()
//***********************************
sbit DQ=P2^0;
//***********************************
static unsigned char Power=0;
unsigned char Temper=0;
//----------------------------------
//功能:10us 级别延时
//----------------------------------
void Delay10us(unsigned char n)
{
while(n--)
{
NOP_1uS;NOP_1uS;NOP_1uS;
NOP_1uS;NOP_1uS;NOP_1uS;
NOP_1uS;
}
}
//-----------------------------------
//功能:写18B20
//-----------------------------------
void Write_18B20(unsigned char n)
{
unsigned char i;
for(i=0;i<8;i++)
{
DQ=0;
Delay10us(1);//延时13us 左右
DQ=n & 0x01;
n=n>>1;
Delay10us(5);//延时50us 以上
DQ=1;
}
}
//------------------------------------
//功能:读取18B20
//------------------------------------
unsigned char Read_18B20(void)
{
unsigned char i;
unsigned char temp;
for(i=0;i<8;i++)
{
temp=temp>>1;
DQ=0;
NOP_1uS;//延时1us
DQ=1;
NOP_1uS;NOP_1uS;//延时5us
NOP_1uS;NOP_1uS;NOP_1uS;
if(DQ==0)
{
temp=temp&0x7F;
}else
{
temp=temp|0x80;
}
Delay10us(5);//延时40us
DQ=1;
}
return temp;
}
//-----------------------------------
void Init (void)
{
DQ=0;
Delay10us(50);//延时500us
DQ=1;
Delay10us(9);//延时90us
if(DQ==1) //0001 1111b=1f
{
Power =0; //失败0
}else
{
Power++;
DQ=1;
}
}
//----------------------------------
void Skip(void)
{
Write_18B20(0xcc);
Power++;
}
//----------------------------------
void Convert (void)
{
Write_18B20(0x44);
Power++;
}
//----------------------------------
void Delay1S (void)
{
static unsigned int i=0;
if (i++==Seck) {i=0;Power++;}
}
//----------------------------------
void ReadDo (void)
{
Write_18B20(0xbe);
Power++;
}
//----------------------------------
void ReadTemp (void)
{
union
{
unsigned char Temp[2]; //单字节温度
int Tt; //2字节温度
}T;
T.Temp[1]=Read_18B20(); //读低位
T.Temp[0]=Read_18B20(); //读高位
//-----------------------------------
Power=0;
T.Tt <<= 4;
Temper=T.Temp[0];
}
/**********************************
函数指针定义
***********************************/
code void (code *SubTemp[])()=
{
Init,Skip,Convert,Delay1S,Init,Skip,ReadDo,ReadTemp
};
//*****************************
void GetTemp(void)
{
(*SubTemp[Power])();
}
//**************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -