原创 DS18B20的C程序

2007-1-12 10:22 8649 7 11 分类: MCU/ 嵌入式

//     3.DS18B20数据口线的修改请参考DS18B20.h中的定义.


#include"DS18B20.h"
#include <IOM8v.h>
#include <macros.h>


void Delay1us(uchar value){
    value = value;
}
//---------------------------------------------
//name:Ds18b20Reset
//description:复位ds18b20芯片进行初始化
//parameter: no
//---------------------------------------------
void Ds18b20Reset(void){
    DS18B20_DQ_CLE;
    DelayUs(198);  //100us
    DelayUs(198); 
    DelayUs(198);
    DelayUs(198);
    DS18B20_DQ_SET;
    DelayUs(38);   //20us
}
//---------------------------------------------
//name:Ds18b20Ack
//description:应答单总线
//parameter: no
//---------------------------------------------
void Ds18b20Ack(void){
    while(DS18B20_DQ_DAT);
    while(!DS18B20_DQ_DAT);
    DelayUs(38);   //20us        
}
//---------------------------------------------
//name:Ds18b20Write
//description:   写一个字节
//parameter: dat 要写入的数据,无符号字符型
//---------------------------------------------


void Ds18b20Write(uchar data){
    uchar i;
    for(i=0;i<8;i++) {
        if(data & 0x01) {     // 写 1
            DS18B20_DQ_CLE;
            DelayUs(14);      //8us
            DS18B20_DQ_SET;
            DelayUs(108);     //55us 
        }else{                // 写 0
            DS18B20_DQ_CLE;
            DelayUs(108);     //55us
            DS18B20_DQ_SET;
            DelayUs(14);      //8us
        }
       data = data>>1;
    }
}
//---------------------------------------------
//name:Ds18b20ReadBit
//description:   读一个位
//parameter:     no
//---------------------------------------------
uchar Ds18b20ReadBit(void){
    uchar data;
    DS18B20_DQ_CLE;
    Delay1us(1);        //延时1个us
    DS18B20_DQ_SET;
    Delay1us(1);        //延时2个us
    Delay1us(1);
    data = DS18B20_DQ_DAT;
    DelayUs(118);      //60us
    return data;
}


//---------------------------------------------
//name:Ds18b20ReadByte
//description:   读一个字节
//parameter:     no
//---------------------------------------------
uchar Ds18b20ReadByte(void){
    uchar i,data;
    data = 0;
    for(i=0;i<8;i++){
        data = data >> 1;   
        if(Ds18b20ReadBit())
            data |= 0x80;
    }
    return data;
}
//---------------------------------------------
//name:Ds18b20Convert
//description:   命令Ds18b20开始转换温度
//parameter:     no
//---------------------------------------------
void Ds18b20Convert(void){
    Ds18b20Reset();
    Ds18b20Ack();
    delms(1);
    Ds18b20Write(DS18B20_SKIP_ROM);
    Ds18b20Write(DS18B20_CONVERT_TEM);
}
//---------------------------------------------
//name:Ds18b20ReadTem
//description:   从Ds18b20读取温度
//parameter:     no
//---------------------------------------------
uint Ds18b20ReadTem(void){
    uchar Height,Low;
    uint  Temp;
    Ds18b20Reset();                                   //初始化
    Ds18b20Ack();                                     
    delms(1);                                        
    Ds18b20Write(DS18B20_SKIP_ROM);                   //跳过ROM
    Ds18b20Write(DS18B20_READ_RAM);                   //读存储器
    Low    = Ds18b20ReadByte();
    Height = Ds18b20ReadByte();
    Temp   = (Height << 8) + Low;
    return Temp;
}

文章评论4条评论)

登录后参与讨论

用户309506 2011-3-24 23:03

请问你的这个头文件到那找 DS18B20.h

用户203227 2009-9-2 14:49

450535173.谢谢

用户203227 2009-9-2 14:49

你的DS18B20.h在那里啊?尽快联系我。

用户134257 2008-5-24 17:48

支持一下
相关推荐阅读
用户67869 2007-01-15 09:28
求助复位信号详解
1、我在DATASHEET上看见DSP对复位信号/RS有最短时间的要求,那么这个信号有效(低电平) 的持续时间最长能够是多少? 2、请问DSP什么时候退出复位状态,是在/RS由低变高的时候吗? 3、我...
用户67869 2007-01-15 09:22
DSP和USB之间的解决方案
DSP和USB是当今两个比较热门的话题,大家可以讨论 一下DSP和USB之间怎么做方案比较好。我总结了一下,有一下三种 方案可以考虑(以Cypress为例): 1。DSP+Stand-alone SI...
用户67869 2007-01-15 09:19
与DSP的常用接口芯片
: 以下是我所知道的1.PCI接口:代表芯片PCI2040,PLX9050; 2.USB接口:代表芯片CY7C64613,CY7C68613 3.E1接口:代表芯片DS21Q43 4.串口 5.Rap...
用户67869 2007-01-12 10:43
PID控制中如何确定三个系数
1 有仿真模型的话先做一下仿真, 可以大致确定一下各个系数的数量级。 2 .先不加积分,与微分,将比例调大至刚好震荡,然后再小一点 3 然后再加上积分,跳稳态误差 4 最后再加上微分,调节  注:MA...
用户67869 2007-01-12 10:30
DSP初学者指南
鉴于许多DSP初学者不知如何下手,这里简要介绍下本人的学习经验1。先学点数字信号处理的理论 2。再学DSP芯片的开发方法,一般就学TI的了,用的人多 3。开发工具有一台仿真器+CCS就够了 仿真器现在...
我要评论
4
7
关闭 站长推荐上一条 /2 下一条