⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.c

📁 基于STC89C52和DS18B20的温度采集代码
💻 C
字号:
#include "ds18b20.h"


void delay_us(uchar us)
{
        while(us--);
}

/*
uchar crc1820(uchar jj)   
{
	uchar ii,crc_data=0;

        for(ii=0;ii<jj;ii++){ 
			crc_data=crc_table[crc_data^temp_buff[ii]];
		}
    return(crc_data);
}
*/

bit init_1820(void)
{
        bit F18b20;
        Bdq18B20=1;
        _nop_();
        Bdq18B20=0;
        delay_us(80);  //delay 480us
        Bdq18B20=1;
        delay_us(14);  //delay 100us
        if(Bdq18B20==0) F18b20=1;
        else F18b20=0;
        delay_us(20);
        Bdq18B20=1;
        return(F18b20);
}

void write_1820(uchar wr)
{
        uchar ii;
        for (ii=0;ii<8;ii++)
        {
                Bdq18B20=0;
                _nop_();
                Bdq18B20=wr&1;
                delay_us(5);//delay 45us
                Bdq18B20=1;
                wr>>=1;
        }
}

uchar read_1820(void) //

{
        uchar ii,uu=0;
        for(ii=0;ii<8;ii++){
            Bdq18B20=0;
            uu>>=1;
            Bdq18B20=1;
            if(Bdq18B20==1) uu|=0x80;
            delay_us(4);
        }
        return(uu);
}


 

void read_1820s(uchar jj)   
{
        uchar ii;
        p=temp_buff;
        for(ii=0;ii<jj;ii++)
        {
                *p=read_1820();
                p++;
        }
}


/*
void config_1820(void)    
{
        bit Berr;
        Berr=init_1820();
        if(!Berr) return;
        write_1820(0xcc);
        write_1820(0x4e);
        write_1820(0x19);
        write_1820(0x1a);
        write_1820(0x7f);
        init_1820();
        write_1820(0xcc);
        write_1820(0x48);
        init_1820();
        write_1820(0xcc);
        write_1820(0xb8);
}
*/


/*返回值低四位为小数部分16进制精度,高五位为负数标志(>63488),
若为负数则此五位全部为1,求其正数的方法为(65536-当前值)中间七位为整数部分*/
uint get_temp1820(void) 
{
        //unsigned char crc_temp;
        uint tmp;
        init_1820();			//启动1820
        write_1820(0xcc);		//SKIP ROM
        write_1820(0x44);		//启动转换
        init_1820();			//启动1820
        write_1820(0xcc);		//SKIP ROM
        write_1820(0xbe);		//发送读取命令
        read_1820s(2);			//读取温度值
        //crc_temp=crc1820(9);	//CRC校验,此处不用
        //if(crc_temp==0){
        tmp=temp_buff[1]*0x100+temp_buff[0];
        return(tmp);
        //}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -