18B20仿真时数码管一直显示16,怎么回事

2019-03-24 17:09发布

下面是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;
}


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。