📄 temperature_sampling_source_code_base_on_ds18b20.txt
字号:
temperature_sampling_source_code_base_on_DS18B20
基于DS18B20的温度采样原程序(C),编译通过,很好用,大家看看
#define uchar unsigned char
#define uint unsigned int
#include<reg51.h>
#include <intrins.h> // _nop_()function
#define NOP _nop_();_nop_();_nop_()
sbit PORT_BIT_1820=P1^2;
/**********************************/
void wr_1820(uchar val);
float get_tmpr(void);
void init_1820(void);
void wr_1820(uchar val);
float rd_1820(void);
void delay1(uchar t);
void start(void);
//********************************************
void delay1(uchar t)
{
uchar i;
for (i=0;i<t;i++)
{
_nop_();
}
}
//********************************************
void start(void)
{
init_1820();
wr_1820(0xcc);
wr_1820(0x44);
}
float get_tmpr(void)
{ float tmpr;
uchar cnt,i;
cnt=0;
ag: EA=0;
init_1820();
wr_1820(0xcc);
wr_1820(0x44);
//delay1(250);
init_1820();
wr_1820(0xcc);
wr_1820(0xbe);
tmpr=rd_1820();
init_1820();
wr_1820(0xcc);
wr_1820(0x44); /* start convert */
EA=1;
if (tmpr<-10.0) tmpr=25.0;
return tmpr;
}
void init_1820(void)
{ uchar i,j;
PORT_BIT_1820=1; //1.6us
PORT_BIT_1820=0; /* 1--8+7us */
for(i=0;i<100;i++);/* delay 400--960us */ //300us
PORT_BIT_1820=1;
for(i=0;i<200;i++) /* delay 15--60us */
{ if (PORT_BIT_1820==0) break;}
for(i=0;i<=200;i++)
{ if (PORT_BIT_1820==1) break;
}
for(i=0;i<60;i++); /* delay 480us */
}
void wr_1820(uchar val)
{
uchar i,j;
PORT_BIT_1820=1; //1.6us
NOP; //3.6us
for (j=0;j<8;j++)
{ PORT_BIT_1820=0;
NOP;
NOP; /* delay 5us */
if ((val&0x01)==1)
PORT_BIT_1820=1;
else
PORT_BIT_1820=0;
for(i=0;i<6;i++); /* delay 56 us */ //20.6us
PORT_BIT_1820=1;
val=val>>1;
}
}
float rd_1820(void)
{ uchar j,i,k,tt[9],vv;
float tmpr;
vv=0;
for(k=0;k<9;k++)
{ for(j=0;j<8;j++)
{ PORT_BIT_1820=0;
NOP;NOP;NOP;NOP;
PORT_BIT_1820=1;
vv=vv>>1;
if(PORT_BIT_1820) vv=vv|0x80;
for(i=0;i<6;i++);/*delay 120 us */
PORT_BIT_1820=1;
}
tt[k]=vv;
}
i=tt[1]&0xf8;
if( (i!=0)&&(i!=0xf8)) return -100.0;
tmpr=tt[1]*256.0;
tmpr=(tmpr+tt[0])/16.0;
if(tmpr>100.0 ) return -100.0;
return tmpr;
}
/**********************************/
//************************************
main()
{
float tt;
uchar ds[8],i;
init_1820();
wr_1820(0x33);
start();
tt=get_tmpr();
_nop_();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -