下面是18B20部分的程序,大神帮忙看看
哪错了,数据类型定义,延时什么的,帮忙看看
要怎么改(数码管显示部分的程序我单独检测过了,是正常的)
//延时函数 10us
void delay(uchar t)
{
do{
_nop_();_nop_();
}while(--t);
}
//18B20时序
//初始化
void init()
{
DQ=1;
_nop_();_nop_();
DQ=0;
delay(70);
DQ=1;
delay(6);
while(!DQ);
}
//写时序
void write(uchar dat)
{
uchar mask;
for(mask=0x01;mask!=0;mask<<=1)
{
DQ=0;
_nop_();_nop_();
if(dat&mask)
{
DQ=1;
}
delay(6);
}
DQ=1;
_nop_();_nop_();
}
//读时序
uchar read()
{
uchar mask;
for(mask=0x01;mask!=0;mask<<=1)
{
uchar dat;
DQ=0;
_nop_();_nop_();
DQ=1;
_nop_();_nop_();
if(DQ)
{
dat=dat|mask;
}
else
dat&=~mask;
delay(6);
DQ=1;
return dat;
}
}
//测温度
uint temperature()
{
uchar lsb;
uint tem,msb;
init();
write(0xCC);
write(0xBE);
delay(50);
init();
write(0xCC);
write(0x44);
lsb=read();
msb=read();
if(msb&0xf0)
{
tem=((~(msb<<8)|lsb)+1)*0.0625;
}
else
tem=((msb<<8)|lsb)*0.0625;
return tem;
}
此帖出自
小平头技术问答
一周热门 更多>