求助帖,51单片机控制ds18b20,弄了好久就是不出结果

2019-07-15 12:58发布

有大神帮我看看吗,我想把读出来的温度给P1口控制LED灯,可是输出总是全为高电平,我是在proteus仿真的,单片机晶振是11.0592#include <reg52.h>
#include <intrins.h>
#define UCHAR unsigned char
#define UINT unsigned int

sbit dula=P3^0;
sbit wela=P3^1;
sbit dq=P2^7;
void delay1(UINT z);
void init();
UCHAR fuwei();
void xie(UCHAR temp1);
UCHAR du();
void delay()
{;;}
UINT wd();
UINT n;
int main()
{
        UCHAR i,j;
        UINT w;
        while(1)
        {
                w=wd();
//                P1=0;
                i=w&0xff;        //取低8位
                j=(w>>8)&0xff;
                P1=i;
                delay1(20);
        }
}
void delay1(UINT z)
{
        while(z--);               
}
void init()
{
        dq=1;       
}
UCHAR fuwei()
{
        UCHAR flag;
        dq=1;
        delay();
        dq=0;
        for(n=300;n>0;n--);
        dq=1;
        for(n=30;n>0;n--);
        flag=dq;
        for(n=200;n>0;n--);
        dq=1;
        return flag;       
}
void xie(UCHAR temp1)
{
        int i=0;
        dq=1;
        delay();
        for(i=0;i<8;i++)
        {
                CY=temp1>>1;
                dq=0;
                for(n=7;n>0;n--);
                dq=CY;
                for(n=40;n>0;n--);
                dq=1;
                _nop_();
        }
        dq=1;
        delay();
}
UCHAR du()
{
        UCHAR temp,i;
        bit ret_bit;
        dq=1;
        delay();
        for(i=0;i<8;i++)
        {
                dq=0;
                _nop_();
                _nop_();
                dq=1;
                for(n=7;n>0;n--);
                ret_bit=dq;
                for(n=20;n>0;n--);
                dq=1;
                if(ret_bit)
                {
                        temp=(temp>>1)|0x80;
                }
                else
                        temp=temp>>1;       
        }
        dq=1;
        return temp;
}
UINT wd()
{
        UCHAR i,j;
        UINT  k;
    fuwei();
        xie(0xcc);
        xie(0x44);
        delay1(10);

        fuwei();
        xie(0xcc);
        xie(0xbe);
        i=du();
        j=du();
       
        k=j;
        k=k<<8;
        k=k+i;
        return k;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。