打印
[技术问答]

那位大神有M054LB的DS18B20的程序啊

[复制链接]
920|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
426tingting3099|  楼主 | 2015-3-30 16:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
拜托啦
沙发
598330983| | 2015-3-30 21:48 | 只看该作者
那个是单线程芯片,你按照时序可以轻松写出来挂载一个的用法,如果一条线挂多个就很复杂了

使用特权

评论回复
板凳
598330983| | 2015-3-30 21:49 | 只看该作者
楼主不要动不动就问人家要,自己先写个试试才好

使用特权

评论回复
地板
wright0418| | 2015-3-31 09:36 | 只看该作者
可以參考 DHT11 的作法 , 大同小異

使用特权

评论回复
5
426tingting3099|  楼主 | 2015-3-31 10:27 | 只看该作者
各位看看有啥问题啊,结果永远是FF FF
//================================================================
void DS18b20_Rest(void)
{
    //_GPIO_ENABLE_DIGITAL_PATH(P3, 4);
        _GPIO_SET_PIN_MODE(P3, 4, GPIO_PMD_OUTPUT);
        P34 = 1;
    SYS_SysTickDelay(2);
        P34 = 0;
    SYS_SysTickDelay(750);
        P34 = 1;
    SYS_SysTickDelay(15);   
}
//================================================================
uchar DS18B20_Check(void)
{
    uchar rety = 0;
   
    //_GPIO_ENABLE_DIGITAL_PATH(P3, 4);
        _GPIO_SET_PIN_MODE(P3, 4, GPIO_PMD_INPUT);
    while(P34&&rety<200)
    {
        rety++;
        SYS_SysTickDelay(1);        
    };
    if(rety>=200)
        return 1;
    else
        rety = 0;
    while(P34&&rety<240)
    {
        rety++;
        SYS_SysTickDelay(1);         
    };
    if(rety>=240)
        return 1;
    return 0;
        
}
//================================================================
void Write_One_Byte(uchar dat)
{
        uchar i = 0;
    uchar whicebit;
   
    //_GPIO_ENABLE_DIGITAL_PATH(P3, 4);
        _GPIO_SET_PIN_MODE(P3, 4, GPIO_PMD_OUTPUT);
        for(i=0;i<8;i++)
    {
        whicebit = dat&0x01;
                dat>>=1;
        if(whicebit)
        {
            P34 = 0;
            SYS_SysTickDelay(2);
            P34 = 1;               
            SYS_SysTickDelay(60);
        }
        else
        {
            P34 = 0;
            SYS_SysTickDelay(60);
            P34 = 1;               
            SYS_SysTickDelay(2);
        }
    }
    P34 = 1;
}
//=====================================================================
uchar Read_One_Bit()                                 
{
        uchar dat = 0;

    //_GPIO_ENABLE_DIGITAL_PATH(P3, 4);
        _GPIO_SET_PIN_MODE(P3, 4, GPIO_PMD_OUTPUT);
    P34 = 1;                  
    SYS_SysTickDelay(2);
    P34 = 0;
    SYS_SysTickDelay(2);
    P34 = 1;
   
    //_GPIO_ENABLE_DIGITAL_PATH(P3, 4);
        _GPIO_SET_PIN_MODE(P3, 4, GPIO_PMD_INPUT);   
    SYS_SysTickDelay(12);
    if(P34)              
        dat = 1;
    else
        dat = 0;
    SYS_SysTickDelay(60);
    return (dat);
}
//================================================================
uchar DS18B20_Read_Byte(void)
{
    uchar i,j,dat;
    dat = 0;
    for (i=0;i<8;i++)
    {
        j=Read_One_Bit();
        dat=(j<<i)|dat;
    }
    return dat;
}
//===============================================================
void DS18B20_Star_Com(void)
{
    DS18b20_Rest();
    DS18B20_Check();
        Write_One_Byte(0xcc);
        Write_One_Byte(0x44);   
}
//===============================================================
void DS18B20_Read_Com(void)
{
    DS18b20_Rest();
    DS18B20_Check();
        Write_One_Byte(0xcc);
        Write_One_Byte(0xbe);   
}
//===============================================================
void Get_Tmp(void)
{
        float temp_map;   
        uchar temp_l,temp_h,flag;
   
    DS18B20_Star_Com();
    DS18B20_Read_Com();
   
        temp_l = DS18B20_Read_Byte();
        temp_h = DS18B20_Read_Byte();
//    if(temp_h>7)
//    {
//        temp_h = ~temp_h;
//        temp_l = ~temp_l;
//        flag = 0;
//    }
//    else
//        flag = 1;
        temp = temp_h;
        temp = temp<<8;
        temp = temp|temp_l;
        temp_map=temp*0.0625;                                                     
        temp = (uint)(temp_map*10+5);
                              
    TX1_buf[0] = temp/256;
    TX1_buf[1] = temp%256;
}

使用特权

评论回复
6
426tingting3099|  楼主 | 2015-4-1 14:33 | 只看该作者
问题解决了

使用特权

评论回复
7
quray1985| | 2015-4-1 22:35 | 只看该作者
426tingting3099 发表于 2015-3-31 10:27
各位看看有啥问题啊,结果永远是FF FF
//============================================================== ...

程序好长的说

使用特权

评论回复
8
稳稳の幸福| | 2015-4-3 13:16 | 只看该作者

楼主,你说的那个接收错误,是什么问题,我想知道。

使用特权

评论回复
9
426tingting3099|  楼主 | 2015-4-3 15:34 | 只看该作者
延时的问题

使用特权

评论回复
10
598330983| | 2015-4-5 19:54 | 只看该作者
这种跟时序相关的,大家一般都是错在延时上,时序都能搞清楚,就是延时计算不靠谱,因为并不是所有人都有示波器。

使用特权

评论回复
11
mintspring| | 2015-4-5 20:55 | 只看该作者
楼主很强大啊,多谢楼主的经验。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

21

帖子

0

粉丝