找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 625|回复: 0
打印 上一主题 下一主题
收起左侧

ds18b20开源

[复制链接]
跳转到指定楼层
楼主
ID:428369 发表于 2018-11-17 19:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "ds18b20.h"


sbit ds18b20_data=P1^6;


//延时5us
#ifdef MCU_STC12
void ds18b20_delay(unsigned char  i)
{
        unsigned char j=0;
        for(j=0;j<i;j++);
}
#endif
#ifdef MCU_STC89
void ds18b20_delay(unsigned char i)
{
        while(i--);
}
#endif

void ds18b20_init()
{
        ds18b20_data=0;
        ds18b20_delay(120);           //>480us
        ds18b20_data=1;
        ds18b20_delay(8);          //40us
        ds18b20_delay(100);          //wait
}

void ds18b20_write(unsigned char cmd)
{
        char i=0;
        for(i=0;i<8;i++)
        {
                ds18b20_data=0;
                ds18b20_data=cmd&0x01;
                ds18b20_delay(15);        //>60us
                ds18b20_data=1;
                cmd>>=1;
        }
}

unsigned char ds18b20_read()
{
        char i=0;
        unsigned char tmp=0;
        for(i=0;i<8;i++)
        {
                ds18b20_data=0;
                tmp>>=1;
                ds18b20_data=1;
                if(ds18b20_data) tmp+=0x80;
                ds18b20_delay(15);                //>60us       
        }
        return tmp;
}

//传感器初始化
void init_ds18b20()
{
        unsigned char tmp = 0;
        tmp = ds18b20_read_temp();
        while(tmp == 85)//显示85为没初始化完毕,需要初始化
        {
                tmp = ds18b20_read_temp();
                ds18b20_delay(100);
                ds18b20_delay(100);
                ds18b20_delay(100);
        }
}

//返回数值为摄氏度,耗时8.25ms@12MHZ@STC89C52
unsigned int ds18b20_read_temp()
{
        unsigned char a=0;
        unsigned char b=0;
        unsigned int c=0;
        //EA=0;
        ds18b20_init();
        ds18b20_write(0xcc);
        ds18b20_write(0x44);
        ds18b20_init();
        ds18b20_write(0xcc);
        ds18b20_write(0xbe);
        a=ds18b20_read();
        b=ds18b20_read();
        //EA=1;
        c=b;
        c<<=8;
        c+=a;
        c=c >> 4;
        //c=c*0.0625;//浮点占用将近1ms
        return c;
}

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表