2511驱动 ds18b20 c程序

[复制链接]
查看3810 | 回复0 | 2015-6-30 11:09:00 | 显示全部楼层 |阅读模式
#include<sn8p2511.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define ds FP10//sbit ds=FP10
#define led FP12
#define _nop_();
uint temp;
uint f_temp;
#define led2 FP13
#define led1 FP54
void delayms(unsigned long  z)
{
        unsigned long int  x,y;
        for(x=z;x>0;x--)
                for(y=330;y>0;y--);
}
void delayus(unsigned long int xus)
{
        unsigned long int i;
        for(i=xus;i>0;i--);        //7us
        //        for(j=330;j>0;j--);
}
void delay()
{

        _nop_();                //2us
}
/*void main()
{
        FP10M=1;
        P1UR=0XFF;
        while(1)
        {
                FP10=1;
                delayus(300);        900us
                FP10=0;
                delayus(150);        }//500us
}*/
void dsreset(void)
{
//        uint i;
        ds=0;
        delayus(300);//900us
        //i=103;
//        while(i>0)i--;
        ds=1;
        delayus(150);        //500us
//        i=4;
//        while(i>0)i--;
}
       
bit tempreadbit(void)
{
//        uint i;
        bit dat;
        ds=0;delayus(2);
        ds=1;delayus(3);//delay();//i++;i++;
        dat=ds;
        delayus(150);//        i=8;while(i>0)i--;
        return(dat);
}

uchar tempread(void)
{
        uchar i,j,dat;
        dat=0;
        for(i=1;i<=8;i++)
        {
                j=tempreadbit();
                dat=(j<<7)|(dat>>1);
        }
        return(dat);
}

void tempwritebyte(uchar dat)
{
//        uint i;
        uchar j;
        bit testb;
        for(j=1;j<=8;j++)
        {
                testb=dat&0x01;
                dat=dat>>1;
                if(testb)
                {
                        ds=0;
                        delayus(3);//delay();        //i++;i++;
                        ds=1;
                        delayus(150);//        i=8;while(i>0)i--;
                }
                else
                {
                        ds=0;
                delayus(150);//        i=8;while(i>0)i--;
                        ds=1;
                        delayus(3);//i++;i++;
                }
        }
}

void tempchange(void)
{
        dsreset();
        delayms(1);
        tempwritebyte(0xcc);
        tempwritebyte(0x44);
}

uint get_temp()
{

        uchar a,b;
        dsreset();
        delayms(1);
        tempwritebyte(0xcc);
        tempwritebyte(0xbe);
        a=tempread();
        b=tempread();
        temp=b;
        temp<<=8;
        temp=temp|a;
        f_temp=temp*0.0625;
        temp=f_temp*10;//+0.5;
//        f_temp=f_temp+0.05;
        return temp;
}

void deal(uint temp)
{
        if((temp>270)&&(temp<=300))
        {
        FP12=0;        //warn(40,0x01);
        led2=1;
        }                                  
/*        else if(t<=270)
        {
                led1=0;
        }*/
        else  if((temp<370)&&(temp>=300))
        {
        led2=0;       
        FP12=1;//warn(40,0x04);
        }
        }
void main()
{
        FP10M=1;
        FP12M=1;
        FP13=1;
        P1UR=0XFF;
        //FP12=1;
        while(1)
        {
        tempchange();
        get_temp();
        deal(temp);
        }
}

这个程序无法执行,请大神们帮忙看看。。非常感谢!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则