DIY编程器网

标题: 18b20测温c51源程序 [打印本页]

作者: liyf    时间: 2011-4-28 18:55
标题: 18b20测温c51源程序
#include
#include
#define BUSY1 (DQ1==0)
sbit DQ1 = P0^4;
unsigned char idata TMP;
unsigned char idata TMP_d;
unsigned char f;
void wr_ds18_1(char dat);
unsigned char rd_ds18_1();
/***************延时程序,单位us,大于10us*************/
void time_delay(unsigned char time)
{

time=time-10;
time=time/6;
while(time!=0)time--;
}

/*****************************************************/
/* reset ds18b20 */
/*****************************************************/
void ds_reset_1(void)
{
unsigned char idata count=0;
DQ1=0;
time_delay(240);
time_delay(240);
DQ1=1;
return;
}

void check_pre_1(void)
{
while(DQ1);
while("DQ1);

time_delay(30);
}

void read_ROM(void)
{
int n;
ds_reset_1();
check_pre_1();
wr_ds18_1(0x33);
for(n=0;n>1;
if(testb)
{
DQ1=0;
_nop_();
_nop_();
DQ1=1;
time_delay(60);
}

else
{
DQ1=0;
time_delay(50);

DQ1=1;
_nop_();
_nop_();
}
}
}

int get_temp_1(void)
{
unsigned char idata a=0,b=0;
unsigned char idata i;
EA=0;

ds_reset_1();
check_pre_1();

wr_ds18_1(0xcc);
wr_ds18_1(0x44);
while(BUSY1);

ds_reset_1();
check_pre_1();
wr_ds18_1(0xcc);
wr_ds18_1(0xbe);

a=rd_ds18_1();
b=rd_ds18_1();

i=b; /*若b为1则为负温 */
i=(i>>4);
if(i==0)
{
f=0;
TMP=((a>>4)|(b8)
{
TMP=(TMP+1);
}
}
else
{
f=1;
a=a>>4;
b=b>4);

if(i==0)
{
f=0;
TMP=((a>>4)|(b>4;
b=b<<4;

TMP=(a|b);  
m=(m&0x0f);
TMP_d=m;
}

EA=1;
return(TMP);
}






欢迎光临 DIY编程器网 (http://www.diybcq.com/) Powered by Discuz! X3.2