예제 #1
0
//18b20初始化函数
void Init_DS18B20(void)
{
	unsigned char x=0;
	DQ_18B20 = 1;    //DQ_18B20复位
	delay_18B20(80);  //稍做延时
	DQ_18B20 = 0;    //单片机将DQ_18B20拉低
	delay_18B20(800); //精确延时 大于 480us
	DQ_18B20 = 1;    //拉高总线
	delay_18B20(100);
	x=DQ_18B20;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
	delay_18B20(50);
}
예제 #2
0
파일: 18b20.c 프로젝트: ririyeye/det
void Init_DS18B20(void)
{
    unsigned char x=0;
    DQ = 1;          //DQ复位
    delay_18B20(8);  //稍做延时
    DQ = 0;          //单片机将DQ拉低
    delay_18B20(80); //精确延时 大于 480us
    DQ = 1;          //拉高总线
    delay_18B20(14);
    x=DQ;            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
    delay_18B20(20);
}
예제 #3
0
//写一个字节
void WriteOneChar(unsigned char dat)
{
	unsigned char i=0;
	for (i=8; i>0; i--)
	{
		DQ_18B20 = 0;
		DQ_18B20 = dat&0x01;
		delay_18B20(50);
		DQ_18B20 = 1;
		dat>>=1;
	}
	delay_18B20(50);
}
예제 #4
0
//读一个字节
unsigned char ReadOneChar(void)
{
	unsigned char i=0;
	unsigned char dat = 0;
	for (i=8;i>0;i--)
	{
		DQ_18B20 = 0; // 给脉冲信号
		dat>>=1;
		DQ_18B20 = 1; // 给脉冲信号
		if(DQ_18B20)
		dat|=0x80;
		delay_18B20(50);
	}
	return(dat);
}
예제 #5
0
파일: 18b20.c 프로젝트: ririyeye/det
void WriteOneChar(unsigned char dat)
{
    unsigned char i=0;
    for (i=8; i>0; i--)
    {
        _nop_();   //保证两次写操作时间间隔1us以上
        DQ = 0;
        _nop_(); //保证主机拉低总线1μs以上
        DQ = dat&0x01;  //向总线写入数据
        delay_18B20(5);          //写时间间隙必须最少持续60us
        DQ = 1;
        dat>>=1;

    }
}
예제 #6
0
파일: 18b20.c 프로젝트: ririyeye/det
unsigned char ReadOneChar(void)
{
    unsigned char i=0;
    unsigned char dat = 0;
    for (i=8; i>0; i--)
    {
        _nop_();   //保证两次读操作时间间隔1us以上
        DQ = 0; // 给脉冲信号
        _nop_(); //保证主机拉低总线1μs以上
        dat>>=1;
        DQ = 1; // 给脉冲信号
        if(DQ)     //主机对总线采样的数 判断
            dat|=0x80;

        delay_18B20(4);  //等待读操作结束
    }
    return(dat);
}
예제 #7
0
//读取温度
unsigned char ReadTemperature(void)
{
	unsigned char a=0;
	unsigned char b=0;
	unsigned char t=0;
	//float tt=0;
	Init_DS18B20();
	WriteOneChar(0xCC); // 跳过读序号列号的操作
	WriteOneChar(0x44); // 启动温度转换
	delay_18B20(2000);
	Init_DS18B20();
	WriteOneChar(0xCC); //跳过读序号列号的操作 
	WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
	a=ReadOneChar();
	b=ReadOneChar();
	
	b<<=4;
	b+=(a&0xf0)>>4;
	t=b;
	//tt=t*0.0625;
	//t= tt*10+0.5; //放大10倍输出并四舍五入
	return(t);
}